#endif // __WXMICROWIN__
-// this is defined in dialog.cpp
+// NB: wxDlgProc must be defined here and not in dialog.cpp because the latter
+// is not included by wxUniv build which does need wxDlgProc
LONG APIENTRY _EXPORT
wxDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
parent = ms_hiddenParent;
}
- return parent ? parent->GetHWND() : NULL;
+ return parent ? parent->GetHWND() : WXHWND(NULL);
}
bool wxTopLevelWindowMSW::CreateDialog(const void *dlgTemplate,
if ( this == ms_hiddenParent )
{
// stop [infinite] recursion which would otherwise happen when we do
- // "delete ms_hiddenParent" below
+ // "delete ms_hiddenParent" below -- and we're not interested in doing
+ // anything of the rest below for that window because the rest of
+ // wxWindows doesn't even know about it
return;
}
- wxTopLevelWindows.DeleteObject(this);
-
if ( wxModelessWindows.Find(this) )
wxModelessWindows.DeleteObject(this);
}
}
- // If this is the last top-level window, exit.
- if ( wxTheApp && (wxTopLevelWindows.Number() == 0) )
+ // if this is the last top-level window, we're going to exit and we should
+ // delete ms_hiddenParent now to avoid leaking it
+ if ( IsLastBeforeExit() )
{
if ( ms_hiddenParent )
{
delete ms_hiddenParent;
ms_hiddenParent = NULL;
}
-
- wxTheApp->SetTopWindow(NULL);
-
- if ( wxTheApp->GetExitOnFrameDelete() )
- {
- ::PostQuitMessage(0);
- }
}
}
}
}
+// the DialogProc for all wxWindows dialogs
+LONG APIENTRY _EXPORT
+wxDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ switch ( message )
+ {
+ case WM_INITDIALOG:
+ // for this message, 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 from here as well, so fall through
+
+ default:
+ // for all the other ones, FALSE means that we didn't process the
+ // message
+ return FALSE;
+ }
+}
+