X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a9102b3671a45d116d781b0c8e90d2e9a84fbdcb..f9daf953d69a1f367a8c2d85cf587fe29eb4a45a:/src/msw/toplevel.cpp diff --git a/src/msw/toplevel.cpp b/src/msw/toplevel.cpp index 09e60871b1..7048c01b18 100644 --- a/src/msw/toplevel.cpp +++ b/src/msw/toplevel.cpp @@ -148,10 +148,6 @@ void wxTopLevelWindowMSW::Init() #if defined(__SMARTPHONE__) && defined(__WXWINCE__) m_MenuBarHWND = 0; #endif -#ifdef __POCKETPC__ - // A dummy menubar for dialogs - m_menuBarHWND = 0; -#endif } WXDWORD wxTopLevelWindowMSW::MSWGetStyle(long style, WXDWORD *exflags) const @@ -185,8 +181,10 @@ WXDWORD wxTopLevelWindowMSW::MSWGetStyle(long style, WXDWORD *exflags) const *exflags |= WS_EX_DLGMODALFRAME; else if ( !(style & wxBORDER_NONE) ) msflags |= WS_BORDER; +#ifndef __POCKETPC__ else msflags |= WS_POPUP; +#endif #endif // normally we consider that all windows without a caption must be popups, @@ -419,27 +417,6 @@ bool wxTopLevelWindowMSW::CreateDialog(const void *dlgTemplate, ::SetWindowText(GetHwnd(), title); } -#ifdef __POCKETPC__ - // Create an empty menubar so that we don't see the menubar underneath - SHMENUBARINFO mbi; - - memset (&mbi, 0, sizeof (SHMENUBARINFO)); - mbi.cbSize = sizeof (SHMENUBARINFO); - mbi.hwndParent = (HWND) GetParent()->GetHWND(); - mbi.nToolBarId = 5000; - mbi.nBmpId = 0; - mbi.cBmpImages = 0; - mbi.dwFlags = 0 ; // SHCMBF_EMPTYBAR; - mbi.hInstRes = wxGetInstance(); - - if (!SHCreateMenuBar(&mbi)) - { - wxFAIL_MSG( _T("SHCreateMenuBar failed") ); - } - - m_menuBarHWND = (WXHWND) mbi.hwndMB; -#endif - SubclassWin(m_hWnd); #ifdef __SMARTPHONE__ @@ -470,10 +447,6 @@ bool wxTopLevelWindowMSW::CreateFrame(const wxString& title, bool result = MSWCreate(wxCanvasClassName, title, pos, sz, flags, exflags); -#ifdef __SMARTPHONE__ - // Work around title non-display glitch - Show(false); -#endif return result; } @@ -533,9 +506,11 @@ bool wxTopLevelWindowMSW::Create(wxWindow *parent, // all dialogs are popups dlgTemplate->style |= WS_POPUP; +#ifndef __WXWINCE__ // force 3D-look if necessary, it looks impossibly ugly otherwise if ( style & (wxRESIZE_BORDER | wxCAPTION) ) dlgTemplate->style |= DS_MODALFRAME; +#endif ret = CreateDialog(dlgTemplate, title, pos, sizeReal); free(dlgTemplate); @@ -552,26 +527,17 @@ 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(); } - // Native look is full screen window on Smartphones and Standard SDK. - // TODO: check that we need this (if we're passing default values to ctor). - // Also check that there really is a difference between PocketPC and Smartphone in this regard. + // Note: if we include PocketPC in this test, dialogs can fail to show up, + // for example the text entry dialog in the dialogs sample. Problem with Maximise()? #if defined(__WXWINCE__) && (defined(__SMARTPHONE__) || defined(__WINCE_STANDARDSDK__)) if ( style & wxMAXIMIZE ) { @@ -588,15 +554,6 @@ bool wxTopLevelWindowMSW::Create(wxWindow *parent, wxTopLevelWindowMSW::~wxTopLevelWindowMSW() { -#ifdef __POCKETPC__ - // Destroy the dummy menubar for dialogs - if (m_menuBarHWND) - { - ::DestroyWindow((HWND) m_menuBarHWND); - m_menuBarHWND = 0; - } -#endif - // after destroying an owned window, Windows activates the next top level // window in Z order but it may be different from our owner (to reproduce // this simply Alt-TAB to another application and back before closing the @@ -703,6 +660,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()); } } @@ -711,7 +676,7 @@ bool wxTopLevelWindowMSW::IsMaximized() const #ifdef __WXWINCE__ return false; #else - return ::IsZoomed(GetHwnd()) != 0; + return m_maximizeOnShow || ::IsZoomed(GetHwnd()) != 0; #endif } @@ -792,7 +757,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); @@ -803,7 +768,6 @@ bool wxTopLevelWindowMSW::ShowFullScreen(bool show, long style) rect.y = 0; #endif } -#endif // wxUSE_DISPLAY SetSize(rect); @@ -963,10 +927,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; @@ -976,7 +942,7 @@ void wxTopLevelWindowMSW::RequestUserAttention(int flags) s_pfnFlashWindowEx = (FlashWindowEx_t) dllUser32.GetSymbol(_T("FlashWindowEx")); - // we can safely unload user32.dll here, it's goign to remain loaded as + // we can safely unload user32.dll here, it's going to remain loaded as // long as the program is running anyhow }