+// Default activation behaviour - set the focus for the first child
+// subwindow found.
+void wxTopLevelWindowMSW::OnActivate(wxActivateEvent& event)
+{
+ if ( event.GetActive() )
+ {
+ // restore focus to the child which was last focused unless we already
+ // have it
+ wxLogTrace(_T("focus"), _T("wxTLW %08x activated."), (int) m_hWnd);
+
+ wxWindow *winFocus = FindFocus();
+ if ( !winFocus || wxGetTopLevelParent(winFocus) != this )
+ {
+ wxWindow *parent = m_winLastFocused ? m_winLastFocused->GetParent()
+ : NULL;
+ if ( !parent )
+ {
+ parent = this;
+ }
+
+ wxSetFocusToChild(parent, &m_winLastFocused);
+ }
+ }
+ else // deactivating
+ {
+ // remember the last focused child if it is our child
+ m_winLastFocused = FindFocus();
+
+ if ( m_winLastFocused )
+ {
+ // let it know that it doesn't have focus any more
+ m_winLastFocused->HandleKillFocus((WXHWND)NULL);
+
+ // and don't remember it if it's a child from some other frame
+ if ( wxGetTopLevelParent(m_winLastFocused) != this )
+ {
+ m_winLastFocused = NULL;
+ }
+ }
+
+ wxLogTrace(_T("focus"),
+ _T("wxTLW %08x deactivated, last focused: %08x."),
+ (int) m_hWnd,
+ (int) (m_winLastFocused ? GetHwndOf(m_winLastFocused)
+ : NULL));
+
+ event.Skip();
+ }
+}
+
+// the DialogProc for all wxWidgets dialogs
+LONG APIENTRY _EXPORT
+wxDlgProc(HWND hDlg,
+ UINT message,
+ WPARAM WXUNUSED(wParam),
+ LPARAM WXUNUSED(lParam))
+{
+ switch ( message )
+ {
+ 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
+#ifndef __SMARTPHONE__
+ | SHIDIF_DONEBUTTON
+#endif
+ ;
+ shidi.hDlg = hDlg;
+ SHInitDialog( &shidi );
+#else // no SHInitDialog()
+ 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
+ return FALSE;
+}
+
+// ============================================================================
+// wxTLWHiddenParentModule implementation
+// ============================================================================
+
+HWND wxTLWHiddenParentModule::ms_hwnd = NULL;
+
+const wxChar *wxTLWHiddenParentModule::ms_className = NULL;
+
+bool wxTLWHiddenParentModule::OnInit()