if ( winTop )
{
wxIcon icon = winTop->GetIcon();
- if ( icon.Ok() )
+ if ( icon.IsOk() )
{
::SendMessage(GetHwnd(), WM_SETICON,
(WPARAM)TRUE,
if ( GetExtraStyle() & wxTOPLEVEL_EX_DIALOG )
{
// we have different dialog templates to allows creation of dialogs
- // with & without captions under MSWindows, resizeable or not (but a
- // resizeable dialog always has caption - otherwise it would look too
+ // with & without captions under MSWindows, resizable or not (but a
+ // resizable dialog always has caption - otherwise it would look too
// strange)
// we need 3 additional WORDs for dialog menu, class and title (as we
// finally send an event allowing the window to relayout itself &c
wxSizeEvent event(rect.GetSize(), GetId());
+ event.SetEventObject(this);
HandleWindowEvent(event);
}
else // stop showing full screen
{
const wxSize size(::GetSystemMetrics(smX), ::GetSystemMetrics(smY));
- const wxIcon icon = icons.GetIconOfExactSize(size);
- if ( icon.Ok() )
+ // Try the exact size first.
+ wxIcon icon = icons.GetIconOfExactSize(size);
+
+ if ( !icon.IsOk() )
{
- ::SendMessage(GetHwnd(), WM_SETICON, i, (LPARAM)GetHiconOf(icon));
- return true;
+ // If we didn't find any, set at least some icon: it will look scaled
+ // and ugly but in practice it's impossible to prevent this because not
+ // everyone can provide the icons in all sizes used by all versions of
+ // Windows in all DPIs (this would include creating them in at least
+ // 14, 16, 22, 32, 48, 64 and 128 pixel sizes).
+ icon = icons.GetIcon(size);
}
- return false;
+ if ( !icon.IsOk() )
+ return false;
+
+ ::SendMessage(GetHwnd(), WM_SETICON, i, (LPARAM)GetHiconOf(icon));
+ return true;
}
void wxTopLevelWindowMSW::SetIcons(const wxIconBundle& icons)
return;
}
- bool anySet =
- DoSelectAndSetIcon(icons, SM_CXSMICON, SM_CYSMICON, ICON_SMALL);
- if ( DoSelectAndSetIcon(icons, SM_CXICON, SM_CYICON, ICON_BIG) )
- anySet = true;
-
- if ( !anySet )
- {
- wxFAIL_MSG( "icon bundle doesn't contain any suitable icon" );
- }
+ DoSelectAndSetIcon(icons, SM_CXSMICON, SM_CYSMICON, ICON_SMALL);
+ DoSelectAndSetIcon(icons, SM_CXICON, SM_CYICON, ICON_BIG);
}
bool wxTopLevelWindowMSW::EnableCloseButton(bool enable)
return (os_type == wxOS_WINDOWS_NT && ver_major >= 5);
}
+void wxTopLevelWindowMSW::DoEnable(bool enable)
+{
+ wxTopLevelWindowBase::DoEnable(enable);
+
+ // Enabling or disabling a window may change its appearance. Unfortunately,
+ // in at least some situation, toplevel windows don't repaint themselves,
+ // so we have to issue explicit refresh to avoid rendering artifacts.
+ //
+ // TODO: find out just what exactly is wrong here
+ Refresh();
+}
void wxTopLevelWindowMSW::DoFreeze()
{