#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
return (WXHWND)hwndParent;
}
+#if defined(__SMARTPHONE__) || defined(__POCKETPC__)
+bool wxTopLevelWindowMSW::HandleSettingChange(WXWPARAM wParam, WXLPARAM lParam)
+{
+ SHACTIVATEINFO *info = (SHACTIVATEINFO*) m_activateInfo;
+ if ( info )
+ {
+ SHHandleWMSettingChange(GetHwnd(), wParam, lParam, info);
+ }
+
+ return wxWindowMSW::HandleSettingChange(wParam, lParam);
+}
+#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_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,
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
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;
}
}
else // hidden
{
- // 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
+ // 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());
+ if ( maximize )
+ {
+ // unfortunately 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
}
}
#ifdef __WXWINCE__
return false;
#else
- // also update the current state
- ((wxTopLevelWindowMSW *)this)->m_iconized = ::IsIconic(GetHwnd()) != 0;
-
- return m_iconized;
+ // don't use m_iconized, it may be briefly out of sync with the real state
+ // as it's only modified when we receive a WM_SIZE and we could be called
+ // from an event handler from one of the messages we receive before it,
+ // such as WM_MOVE
+ return ::IsIconic(GetHwnd()) != 0;
#endif
}
{
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 )
{
::SendMessage( GetHwndOf( this ), WM_SETICON, ICON_BIG,
(LPARAM)GetHiconOf(big) );
}
-#endif // __WIN95__
+#endif // !__WXMICROWIN__
}
bool wxTopLevelWindowMSW::EnableCloseButton(bool enable)
WPARAM WXUNUSED(wParam),
LPARAM WXUNUSED(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;
+ }
}
// 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;
}