X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3103e8a97e834e9793f0eb149aa82a99fd64ef9a..75e275af320f70d9bb57dd30494f6cc2c100dc25:/src/msw/toplevel.cpp diff --git a/src/msw/toplevel.cpp b/src/msw/toplevel.cpp index 2378243914..8b7cc3f70a 100644 --- a/src/msw/toplevel.cpp +++ b/src/msw/toplevel.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: msw/toplevel.cpp +// Name: src/msw/toplevel.cpp // Purpose: implements wxTopLevelWindow for MSW // Author: Vadim Zeitlin // Modified by: @@ -17,10 +17,6 @@ // headers // ---------------------------------------------------------------------------- -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "toplevel.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -209,7 +205,7 @@ WXDWORD wxTopLevelWindowMSW::MSWGetStyle(long style, WXDWORD *exflags) const if ( style & wxMAXIMIZE_BOX ) msflags |= WS_MAXIMIZEBOX; -#ifndef __WXWINCE__ +#ifndef __WXWINCE__ if ( style & wxSYSTEM_MENU ) msflags |= WS_SYSMENU; #endif @@ -418,11 +414,11 @@ bool wxTopLevelWindowMSW::CreateDialog(const void *dlgTemplate, } SubclassWin(m_hWnd); - + #ifdef __SMARTPHONE__ // Work around title non-display glitch Show(false); -#endif +#endif return true; #endif // __WXMICROWIN__/!__WXMICROWIN__ @@ -527,21 +523,13 @@ bool wxTopLevelWindowMSW::Create(wxWindow *parent, } #endif - // for some reason we need to manually send ourselves this message as - // otherwise the mnemonics are always shown -- even if they're configured - // to be hidden until "Alt" is pressed in the control panel - // - // this could indicate a bug somewhere else but for now this is the only - // fix we have + // for standard dialogs the dialog manager generates WM_CHANGEUISTATE + // itself but for custom windows we have to do it ourselves in order to + // make the keyboard indicators (such as underlines for accelerators and + // focus rectangles) work under Win2k+ if ( ret ) { - ::SendMessage - ( - GetHwnd(), - WM_UPDATEUISTATE, - MAKEWPARAM(UIS_INITIALIZE, UISF_HIDEFOCUS | UISF_HIDEACCEL), - 0 - ); + MSWUpdateUIState(UIS_INITIALIZE); } // Note: if we include PocketPC in this test, dialogs can fail to show up, @@ -629,27 +617,6 @@ bool wxTopLevelWindowMSW::Show(bool show) if (frame && frame->GetMenuBar()) frame->GetMenuBar()->AddAdornments(GetWindowStyleFlag()); #endif - - if ( show ) - { - ::BringWindowToTop(GetHwnd()); - - wxActivateEvent event(wxEVT_ACTIVATE, true, m_windowId); - event.SetEventObject( this ); - GetEventHandler()->ProcessEvent(event); - } - else // hide - { - // Try to highlight the correct window (the parent) - if ( GetParent() ) - { - HWND hWndParent = GetHwndOf(GetParent()); - if (hWndParent) - ::BringWindowToTop(hWndParent); - } - } - - return true; } // ---------------------------------------------------------------------------- @@ -668,6 +635,14 @@ void wxTopLevelWindowMSW::Maximize(bool maximize) // we can't maximize the hidden frame because it shows it as well, so // just remember that we should do it later in this case m_maximizeOnShow = maximize; + + // after calling Maximize() the client code expects to get the frame + // "real" size and doesn't want to know that, because of implementation + // details, the frame isn't really maximized yet but will be only once + // it's shown, so return our size as it will be then in this case + + // we don't know which display we're on yet so use the default one + SetSize(wxGetClientDisplayRect().GetSize()); } } @@ -676,7 +651,7 @@ bool wxTopLevelWindowMSW::IsMaximized() const #ifdef __WXWINCE__ return false; #else - return ::IsZoomed(GetHwnd()) != 0; + return m_maximizeOnShow || ::IsZoomed(GetHwnd()) != 0; #endif } @@ -757,7 +732,7 @@ bool wxTopLevelWindowMSW::ShowFullScreen(bool show, long style) rect = wxDisplay(dpy).GetGeometry(); } else // fall back to the main desktop -#else // wxUSE_DISPLAY +#endif // wxUSE_DISPLAY { // resize to the size of the desktop wxCopyRECTToRect(wxGetWindowRect(::GetDesktopWindow()), rect); @@ -768,7 +743,6 @@ bool wxTopLevelWindowMSW::ShowFullScreen(bool show, long style) rect.y = 0; #endif } -#endif // wxUSE_DISPLAY SetSize(rect); @@ -818,6 +792,16 @@ bool wxTopLevelWindowMSW::ShowFullScreen(bool show, long style) // wxTopLevelWindowMSW misc // ---------------------------------------------------------------------------- +void wxTopLevelWindowMSW::SetTitle( const wxString& title) +{ + SetLabel(title); +} + +wxString wxTopLevelWindowMSW::GetTitle() const +{ + return GetLabel(); +} + void wxTopLevelWindowMSW::SetIcon(const wxIcon& icon) { SetIcons( wxIconBundle( icon ) ); @@ -928,10 +912,12 @@ bool wxTopLevelWindowMSW::SetShape(const wxRegion& region) void wxTopLevelWindowMSW::RequestUserAttention(int flags) { - // check if we can use FlashWindowEx(): unfortunately an explicit test for - // FLASHW_STOP, for example, doesn't work because MSVC6 headers do #define - // it but don't provide FlashWindowEx() declaration -#if (WINVER >= 0x0500 && (defined FLASHW_STOP)) + // check if we can use FlashWindowEx(): unfortunately a simple test for + // FLASHW_STOP doesn't work because MSVC6 headers do #define it but don't + // provide FlashWindowEx() declaration, so try to detect whether we have + // real headers for WINVER 0x0500 by checking for existence of a symbol not + // declated in MSVC6 header +#if defined(FLASHW_STOP) && defined(VK_XBUTTON1) // available in the headers, check if it is supported by the system typedef BOOL (WINAPI *FlashWindowEx_t)(FLASHWINFO *pfwi); FlashWindowEx_t s_pfnFlashWindowEx = NULL; @@ -1143,5 +1129,3 @@ HWND wxTLWHiddenParentModule::GetHWND() return ms_hwnd; } - -