HBRUSH wxDisableButtonBrush = (HBRUSH) 0;
+MRESULT EXPENTRY wxWndProc( HWND hWnd,ULONG message,MPARAM mp1,MPARAM mp2);
+MRESULT EXPENTRY wxFrameWndProc( HWND hWnd,ULONG message,MPARAM mp1,MPARAM mp2);
+
// ===========================================================================
// implementation
// ===========================================================================
if (!::WinRegisterClass( vHab
,wxFrameClassName
- ,NULL
- ,CS_SIZEREDRAW | CS_MOVENOTIFY | CS_SYNCPAINT
+ ,wxFrameWndProc
+ ,CS_SIZEREDRAW | CS_MOVENOTIFY | CS_SYNCPAINT | CS_CLIPCHILDREN
,sizeof(ULONG)
))
{
if (!::WinRegisterClass( vHab
,wxFrameClassNameNoRedraw
- ,NULL
- ,0
+ ,wxWndProc
,0
+ ,sizeof(ULONG)
))
{
vError = ::WinGetLastError(vHab);
if (!::WinRegisterClass( vHab
,wxMDIFrameClassName
- ,NULL
+ ,wxWndProc
,CS_SIZEREDRAW | CS_MOVENOTIFY | CS_SYNCPAINT
- ,0
+ ,sizeof(ULONG)
))
{
vError = ::WinGetLastError(vHab);
if (!::WinRegisterClass( vHab
,wxMDIFrameClassNameNoRedraw
- ,NULL
- ,0
+ ,wxWndProc
,0
+ ,sizeof(ULONG)
))
{
vError = ::WinGetLastError(vHab);
if (!::WinRegisterClass( vHab
,wxMDIChildFrameClassName
- ,NULL
+ ,wxWndProc
,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_SYNCPAINT | CS_HITTEST
- ,0
+ ,sizeof(ULONG)
))
{
vError = ::WinGetLastError(vHab);
if (!::WinRegisterClass( vHab
,wxMDIChildFrameClassNameNoRedraw
- ,NULL
+ ,wxWndProc
,CS_HITTEST
- ,0
+ ,sizeof(ULONG)
))
{
vError = ::WinGetLastError(vHab);
if (!::WinRegisterClass( vHab
,wxPanelClassName
- ,NULL
+ ,wxWndProc
,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_SAVEBITS | CS_SYNCPAINT
- ,0
+ ,sizeof(ULONG)
))
{
vError = ::WinGetLastError(vHab);
if (!::WinRegisterClass( vHab
,wxCanvasClassName
- ,NULL
- ,0 // CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_SAVEBITS | CS_SYNCPAINT
- ,0
+ ,wxWndProc
+ ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_SAVEBITS | CS_SYNCPAINT | CS_CLIPCHILDREN
+ ,sizeof(ULONG)
))
{
vError = ::WinGetLastError(vHab);
if (wxTheApp->OnInit())
{
nRetValue = wxTheApp->OnRun();
-// nRetValue = -1;
}
- }
-// Normal exit
- wxWindow* pTopWindow = wxTheApp->GetTopWindow();
-
- if (pTopWindow)
- {
- // Forcibly delete the window.
- if (pTopWindow->IsKindOf(CLASSINFO(wxFrame)) ||
- pTopWindow->IsKindOf(CLASSINFO(wxDialog)) )
- {
- pTopWindow->Close(TRUE);
- wxTheApp->DeletePendingObjects();
- }
- else
+ // Normal exit
+ wxWindow* pTopWindow = wxTheApp->GetTopWindow();
+ if (pTopWindow)
{
- delete pTopWindow;
- wxTheApp->SetTopWindow(NULL);
+ // Forcibly delete the window.
+ if (pTopWindow->IsKindOf(CLASSINFO(wxFrame)) ||
+ pTopWindow->IsKindOf(CLASSINFO(wxDialog)) )
+ {
+ pTopWindow->Close(TRUE);
+ wxTheApp->DeletePendingObjects();
+ }
+ else
+ {
+ delete pTopWindow;
+ wxTheApp->SetTopWindow(NULL);
+ }
}
}
else // app initialization failed
}
#endif // wxUSE_TOOLTIPS
+ //
+ // We must relay Timer events to wxTimer's processing function
+ //
+ if (pMsg->msg == WM_TIMER)
+ wxTimerProc(NULL, 0, (int)pMsg->mp1, 0);
+
//
// For some composite controls (like a combobox), wndThis might be NULL
// because the subcontrol is not a wxWindow, but only the control itself
wxApp::CleanUp();
} // end of wxExit
+static bool gs_inYield = FALSE;
+
//
// Yield to incoming messages
//
//
wxLog::Suspend();
+ gs_inYield = TRUE;
+
//
// We want to go back to the main message loop
// if we see a WM_QUIT. (?)
// Let the logs be flashed again
//
wxLog::Resume();
+ gs_inYield = FALSE;
return TRUE;
} // end of wxYield
+// Yield to incoming messages; but fail silently if recursion is detected.
+bool wxYieldIfNeeded()
+{
+ if (gs_inYield)
+ return FALSE;
+
+ return wxYield();
+}
+
wxIcon wxApp::GetStdIcon(
int nWhich
) const