X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/75e275af320f70d9bb57dd30494f6cc2c100dc25..ad4e3f7be6f20d5a164a608b44c51056231ddad9:/src/msw/toplevel.cpp?ds=inline diff --git a/src/msw/toplevel.cpp b/src/msw/toplevel.cpp index 8b7cc3f70a..9d742a864b 100644 --- a/src/msw/toplevel.cpp +++ b/src/msw/toplevel.cpp @@ -144,6 +144,14 @@ void wxTopLevelWindowMSW::Init() #if defined(__SMARTPHONE__) && defined(__WXWINCE__) m_MenuBarHWND = 0; #endif + +#if defined(__SMARTPHONE__) || defined(__POCKETPC__) + SHACTIVATEINFO* info = new SHACTIVATEINFO; + wxZeroMemory(*info); + info->cbSize = sizeof(SHACTIVATEINFO); + + m_activateInfo = (void*) info; +#endif } WXDWORD wxTopLevelWindowMSW::MSWGetStyle(long style, WXDWORD *exflags) const @@ -304,6 +312,63 @@ WXHWND wxTopLevelWindowMSW::MSWGetParent() const return (WXHWND)hwndParent; } +#if defined(__SMARTPHONE__) || defined(__POCKETPC__) +bool wxTopLevelWindowMSW::HandleSettingChange(WXWPARAM wParam, WXLPARAM lParam) +{ + SHACTIVATEINFO* info = (SHACTIVATEINFO*) m_activateInfo; + if (!info) return false; + return SHHandleWMSettingChange(GetHwnd(), wParam, lParam, info) == TRUE; +} +#endif + +WXLRESULT wxTopLevelWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) +{ + WXLRESULT rc = 0; + bool processed = false; + +#if defined(__SMARTPHONE__) || defined(__POCKETPC__) + switch ( message ) + { + case WM_ACTIVATE: + { + SHACTIVATEINFO* info = (SHACTIVATEINFO*) m_activateInfo; + if (info) + { + DWORD flags = 0; + if (GetExtraStyle() & wxTOPLEVEL_EX_DIALOG) flags = SHA_INPUTDIALOG; + SHHandleWMActivate(GetHwnd(), wParam, lParam, info, flags); + } + + // This implicitly sends a wxEVT_ACTIVATE_APP event + if (wxTheApp) + wxTheApp->SetActive(wParam != 0, FindFocus()); + + break; + } + case WM_SETTINGCHANGE: + { + processed = HandleSettingChange(wParam,lParam); + break; + } + case WM_HIBERNATE: + { + if (wxTheApp) + { + wxActivateEvent event(wxEVT_HIBERNATE, true, wxID_ANY); + event.SetEventObject(wxTheApp); + processed = wxTheApp->ProcessEvent(event); + } + break; + } + } +#endif + + if ( !processed ) + rc = wxTopLevelWindowBase::MSWWindowProc(message, wParam, lParam); + + return rc; +} + bool wxTopLevelWindowMSW::CreateDialog(const void *dlgTemplate, const wxString& title, const wxPoint& pos, @@ -550,6 +615,12 @@ bool wxTopLevelWindowMSW::Create(wxWindow *parent, wxTopLevelWindowMSW::~wxTopLevelWindowMSW() { +#if defined(__SMARTPHONE__) || defined(__POCKETPC__) + SHACTIVATEINFO* info = (SHACTIVATEINFO*) m_activateInfo; + delete info; + m_activateInfo = NULL; +#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 @@ -617,6 +688,8 @@ bool wxTopLevelWindowMSW::Show(bool show) if (frame && frame->GetMenuBar()) frame->GetMenuBar()->AddAdornments(GetWindowStyleFlag()); #endif + + return true; } // ---------------------------------------------------------------------------- @@ -640,9 +713,13 @@ void wxTopLevelWindowMSW::Maximize(bool maximize) // "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()); + if ( maximize ) + { + // unfortunatrly we don't know which display we're on yet so we + // have to use the default one + SetSize(wxGetClientDisplayRect().GetSize()); + } + //else: can't do anything in this case, we don't have the old size } } @@ -811,7 +888,7 @@ void wxTopLevelWindowMSW::SetIcons(const wxIconBundle& icons) { wxTopLevelWindowBase::SetIcons(icons); -#if defined(__WIN95__) && !defined(__WXMICROWIN__) +#if !defined(__WXMICROWIN__) const wxIcon& sml = icons.GetIcon( wxSize( 16, 16 ) ); if( sml.Ok() && sml.GetWidth() == 16 && sml.GetHeight() == 16 ) { @@ -825,7 +902,7 @@ void wxTopLevelWindowMSW::SetIcons(const wxIconBundle& icons) ::SendMessage( GetHwndOf( this ), WM_SETICON, ICON_BIG, (LPARAM)GetHiconOf(big) ); } -#endif // __WIN95__ +#endif // !__WXMICROWIN__ } bool wxTopLevelWindowMSW::EnableCloseButton(bool enable) @@ -1017,40 +1094,55 @@ void wxTopLevelWindowMSW::OnActivate(wxActivateEvent& event) LONG APIENTRY _EXPORT wxDlgProc(HWND hDlg, UINT message, - WPARAM WXUNUSED(wParam), - LPARAM WXUNUSED(lParam)) + WPARAM wParam, + LPARAM lParam) { - if ( message == WM_INITDIALOG ) + switch ( message ) { - // under CE, add a "Ok" button in the dialog title bar and make it full - // screen - // - // TODO: find the window for this HWND, and take into account - // wxMAXIMIZE and wxCLOSE_BOX. For now, assume both are present. - // - // Standard SDK doesn't have aygshell.dll: see - // include/wx/msw/wince/libraries.h + case WM_INITDIALOG: + { + // under CE, add a "Ok" button in the dialog title bar and make it full + // screen + // + // TODO: find the window for this HWND, and take into account + // wxMAXIMIZE and wxCLOSE_BOX. For now, assume both are present. + // + // Standard SDK doesn't have aygshell.dll: see + // include/wx/msw/wince/libraries.h #if defined(__WXWINCE__) && !defined(__WINCE_STANDARDSDK__) && !defined(__HANDHELDPC__) - SHINITDLGINFO shidi; - shidi.dwMask = SHIDIM_FLAGS; - shidi.dwFlags = SHIDIF_SIZEDLG // take account of the SIP or menubar + SHINITDLGINFO shidi; + shidi.dwMask = SHIDIM_FLAGS; + shidi.dwFlags = SHIDIF_SIZEDLG // take account of the SIP or menubar #ifndef __SMARTPHONE__ - | SHIDIF_DONEBUTTON + | SHIDIF_DONEBUTTON #endif ; - shidi.hDlg = hDlg; - SHInitDialog( &shidi ); + shidi.hDlg = hDlg; + SHInitDialog( &shidi ); #else // no SHInitDialog() - wxUnusedVar(hDlg); + wxUnusedVar(hDlg); #endif + // for WM_INITDIALOG, returning TRUE tells system to set focus to + // the first control in the dialog box, but as we set the focus + // ourselves, we return FALSE for it as well + return FALSE; + } + + case WM_SETTINGCHANGE: + { +#if defined(__SMARTPHONE__) || defined(__POCKETPC__) + wxTopLevelWindow *tlw = wxDynamicCast(wxGetWindowFromHWND(hDlg), wxTopLevelWindow); + if(tlw) return tlw->HandleSettingChange(wParam,lParam) ? TRUE : FALSE; +#else + wxUnusedVar(wParam); + wxUnusedVar(lParam); +#endif + break; + } } // for almost all messages, returning FALSE means that we didn't process // the message - // - // for WM_INITDIALOG, returning TRUE tells system to set focus to - // the first control in the dialog box, but as we set the focus - // ourselves, we return FALSE for it as well return FALSE; }