don't hardcode 16/32 as sizes for small/normal icons (fixes bug 1862812)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@50999 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-01-03 01:13:44 +00:00
parent bf37d5c83e
commit 074ca2937d
3 changed files with 22 additions and 17 deletions

View File

@@ -118,8 +118,7 @@ All (Unix):
wxMSW: wxMSW:
- Fix rare bug with messages delivered to wrong wxSocket (Tim Kosse) - Fix rare bug with messages delivered to wrong wxSocket (Tim Kosse)
- Fix setting icons when they have non-default (16*16 and 32*32) sizes
wxGTK:

View File

@@ -180,6 +180,11 @@ protected:
#endif // __SMARTPHONE__ && __WXWINCE__ #endif // __SMARTPHONE__ && __WXWINCE__
private: private:
// helper of SetIcons(): calls gets the icon with the size specified by the
// given system metrics (SM_C{X|Y}[SM]ICON) from the bundle and sets it
// using WM_SETICON with the specified wParam (ICOM_SMALL or ICON_BIG)
void DoSelectAndSetIcon(const wxIconBundle& icons, int smX, int smY, int i);
#if defined(__SMARTPHONE__) || defined(__POCKETPC__) #if defined(__SMARTPHONE__) || defined(__POCKETPC__)
void* m_activateInfo; void* m_activateInfo;

View File

@@ -910,25 +910,26 @@ void wxTopLevelWindowMSW::SetIcon(const wxIcon& icon)
SetIcons( wxIconBundle( icon ) ); SetIcons( wxIconBundle( icon ) );
} }
void wxTopLevelWindowMSW::DoSelectAndSetIcon(const wxIconBundle& icons,
int smX,
int smY,
int i)
{
const wxSize size(::GetSystemMetrics(smX), ::GetSystemMetrics(smY));
const wxIcon icon = icons.GetIcon(size);
if ( icon.Ok() && icon.GetWidth() == size.x && icon.GetHeight() == size.y )
{
::SendMessage(GetHwnd(), WM_SETICON, i, (LPARAM)GetHiconOf(icon));
}
}
void wxTopLevelWindowMSW::SetIcons(const wxIconBundle& icons) void wxTopLevelWindowMSW::SetIcons(const wxIconBundle& icons)
{ {
wxTopLevelWindowBase::SetIcons(icons); wxTopLevelWindowBase::SetIcons(icons);
#if !defined(__WXMICROWIN__) DoSelectAndSetIcon(icons, SM_CXSMICON, SM_CYSMICON, ICON_SMALL);
const wxIcon& sml = icons.GetIcon( wxSize( 16, 16 ) ); DoSelectAndSetIcon(icons, SM_CXICON, SM_CYICON, ICON_BIG);
if( sml.Ok() && sml.GetWidth() == 16 && sml.GetHeight() == 16 )
{
::SendMessage( GetHwndOf( this ), WM_SETICON, ICON_SMALL,
(LPARAM)GetHiconOf(sml) );
}
const wxIcon& big = icons.GetIcon( wxSize( 32, 32 ) );
if( big.Ok() && big.GetWidth() == 32 && big.GetHeight() == 32 )
{
::SendMessage( GetHwndOf( this ), WM_SETICON, ICON_BIG,
(LPARAM)GetHiconOf(big) );
}
#endif // !__WXMICROWIN__
} }
bool wxTopLevelWindowMSW::EnableCloseButton(bool enable) bool wxTopLevelWindowMSW::EnableCloseButton(bool enable)