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
// ===========================================================================
HAB vHab
)
{
+#if defined(wxUSE_CONSOLEDEBUG)
+ #if wxUSE_CONSOLEDEBUG
+/***********************************************/
+/* Code for using stdout debug */
+/* To use it you mast link app as "Window" - EK*/
+/***********************************************/
+ {
+ PPIB pib;
+ PTIB tib;
+
+ printf("In console\n");
+
+ DosGetInfoBlocks(&tib, &pib);
+/* Try morphing into a PM application. */
+// if(pib->pib_ultype == 2) /* VIO */
+ pib->pib_ultype = 3;
+ }
+/**********************************************/
+/**********************************************/
+ #endif //wxUSE_CONSOLEDEBUG
+#endif
+
//
// OS2 has to have an anchorblock
//
return TRUE;
} // end of wxApp::Initialize
+const char* CANTREGISTERCLASS = " Can't register Class ";
// ---------------------------------------------------------------------------
// RegisterWindowClasses
// ---------------------------------------------------------------------------
if (!::WinRegisterClass( vHab
,wxFrameClassName
- ,(PFNWP)wxWndProc
- ,CS_SIZEREDRAW | CS_MOVENOTIFY | CS_SYNCPAINT
+ ,wxFrameWndProc
+ ,CS_SIZEREDRAW | CS_MOVENOTIFY | CS_SYNCPAINT | CS_CLIPCHILDREN
,sizeof(ULONG)
))
{
if (!::WinRegisterClass( vHab
,wxFrameClassNameNoRedraw
- ,(PFNWP)wxWndProc
- ,0
+ ,wxWndProc
,0
+ ,sizeof(ULONG)
))
{
vError = ::WinGetLastError(vHab);
if (!::WinRegisterClass( vHab
,wxMDIFrameClassName
- ,(PFNWP)wxWndProc
+ ,wxWndProc
,CS_SIZEREDRAW | CS_MOVENOTIFY | CS_SYNCPAINT
- ,0
+ ,sizeof(ULONG)
))
{
vError = ::WinGetLastError(vHab);
if (!::WinRegisterClass( vHab
,wxMDIFrameClassNameNoRedraw
- ,(PFNWP)wxWndProc
- ,0
+ ,wxWndProc
,0
+ ,sizeof(ULONG)
))
{
vError = ::WinGetLastError(vHab);
if (!::WinRegisterClass( vHab
,wxMDIChildFrameClassName
- ,(PFNWP)wxWndProc
+ ,wxWndProc
,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_SYNCPAINT | CS_HITTEST
- ,0
+ ,sizeof(ULONG)
))
{
vError = ::WinGetLastError(vHab);
if (!::WinRegisterClass( vHab
,wxMDIChildFrameClassNameNoRedraw
- ,(PFNWP)wxWndProc
+ ,wxWndProc
,CS_HITTEST
- ,0
+ ,sizeof(ULONG)
))
{
vError = ::WinGetLastError(vHab);
if (!::WinRegisterClass( vHab
,wxPanelClassName
- ,(PFNWP)wxWndProc
+ ,wxWndProc
,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_SAVEBITS | CS_SYNCPAINT
- ,0
+ ,sizeof(ULONG)
))
{
vError = ::WinGetLastError(vHab);
if (!::WinRegisterClass( vHab
,wxCanvasClassName
- ,(PFNWP)wxWndProc
+ ,wxWndProc
,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_SAVEBITS | CS_SYNCPAINT
- ,0
+ ,sizeof(ULONG)
))
{
vError = ::WinGetLastError(vHab);
#endif // wxUSE_LOG
} // end of wxApp::CleanUp
+//----------------------------------------------------------------------
+// Main wxWindows entry point
+//----------------------------------------------------------------------
int wxEntry(
int argc
, char* argv[]
if (wxTheApp->OnInit())
{
nRetValue = wxTheApp->OnRun();
-// nRetValue = -1;
- }
- }
-
- 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
+ {
+ wxLogLastError(" Gui initialization failed, exitting");
+ }
+#if wxUSE_CONSOLEDEBUG
+ printf("wxTheApp->OnExit ");
+ fflush(stdout);
+#endif
wxTheApp->OnExit();
+#if wxUSE_CONSOLEDEBUG
+ printf("wxApp::CleanUp ");
+ fflush(stdout);
+#endif
wxApp::CleanUp();
+#if wxUSE_CONSOLEDEBUG
+ printf("return %i ", nRetValue);
+ fflush(stdout);
+#endif
return(nRetValue);
} // end of wxEntry
{
BOOL bRc = ::WinGetMsg(vHabmain, &svCurrentMsg, HWND(NULL), 0, 0);
-// wxUsleep(1000);
if (bRc == 0)
{
// got WM_QUIT
#if wxUSE_THREADS
wxMutexGuiLeaveOrEnter();
#endif // wxUSE_THREADS
- while (!Pending() && ProcessIdle())
+ while (/*Pending() &&*/ ProcessIdle())
{
-// wxUsleep(10000);
+// wxUsleep(10000);
}
DoMessage();
}
}
#endif // wxUSE_TOOLTIPS
+ //
+ // We must relay Timer events to wxTimer's processing function
+ //
+ if (pMsg->msg == WM_TIMER)
+ wxTimerProc(NULL, 0, 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
//
// Try translations first; find the youngest window with
- // a translation table.
+ // a translation table. OS/2 has case sensative accels, so
+ // this block, coded by BK, removes that and helps make them
+ // case insensative.
//
-#if 0
- for (pWnd = pWndThis; pWnd; pWnd = pWnd->GetParent() )
+ if(pMsg->msg == WM_CHAR)
{
- if (pMsg->msg == WM_CHAR)
- if (pWnd->OS2TranslateMessage(pWxmsg))
- return TRUE;
+ PBYTE pChmsg = (PBYTE)&(pMsg->msg);
+ USHORT uSch = CHARMSG(pChmsg)->chr;
+ bool bRc;
+
+ //
+ // Do not process keyup events
+ //
+ if(!(CHARMSG(pChmsg)->fs & KC_KEYUP))
+ {
+ if((CHARMSG(pChmsg)->fs & (KC_ALT | KC_CTRL)) && CHARMSG(pChmsg)->chr != 0)
+ CHARMSG(pChmsg)->chr = (USHORT)wxToupper((UCHAR)uSch);
+
+
+ for(pWnd = pWndThis; pWnd; pWnd = pWnd->GetParent() )
+ {
+ if((bRc = pWnd->OS2TranslateMessage(pWxmsg)) == TRUE)
+ break;
+ }
+
+ if(!bRc) // untranslated, should restore original value
+ CHARMSG(pChmsg)->chr = uSch;
+ }
}
-#endif
//
// Anyone for a non-translation message? Try youngest descendants first.
//
- for (pWnd = pWndThis; pWnd; pWnd = pWnd->GetParent())
- {
- if (pWnd->OS2ProcessMessage(pWxmsg))
- return TRUE;
- }
+// for (pWnd = pWndThis; pWnd; pWnd = pWnd->GetParent())
+// {
+// if (pWnd->OS2ProcessMessage(pWxmsg))
+// return TRUE;
+// }
return FALSE;
} // end of wxApp::ProcessMessage
//
// Avoid recursion (via ProcessEvent default case)
//
- if (sbInOnIdle )
+ if (sbInOnIdle)
return;
sbInOnIdle = TRUE;