From 914589c26ced86ffa672171ee476e1740538fbb8 Mon Sep 17 00:00:00 2001 From: David Webster Date: Thu, 2 Mar 2000 22:13:38 +0000 Subject: [PATCH] More framework updates git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6403 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/os2/private.h | 3 + src/os2/app.cpp | 150 +++++++++++++++++++++++---------------- src/os2/frame.cpp | 101 ++++++++++++-------------- src/os2/icon.cpp | 10 ++- src/os2/makefile.va | 18 ++--- src/os2/menuitem.cpp | 42 +++++------ src/os2/utils.cpp | 59 +++++++++++++++ src/os2/window.cpp | 21 ++++-- 8 files changed, 253 insertions(+), 151 deletions(-) diff --git a/include/wx/os2/private.h b/include/wx/os2/private.h index 103ec64d5c..2dd674aeed 100644 --- a/include/wx/os2/private.h +++ b/include/wx/os2/private.h @@ -196,6 +196,9 @@ WXDLLEXPORT extern wxString wxGetWindowClass(WXHWND hWnd); // is, for mainly historical reasons, signed) WXDLLEXPORT extern WXWORD wxGetWindowId(WXHWND hWnd); +// Convert a PM Error code to a string +WXDLLEXPORT extern wxString wxPMErrorToStr(ERRORID vError); + // Does this window style specify any border? inline bool wxStyleHasBorder(long style) { diff --git a/src/os2/app.cpp b/src/os2/app.cpp index 521f05f586..e895010722 100644 --- a/src/os2/app.cpp +++ b/src/os2/app.cpp @@ -119,6 +119,16 @@ bool wxApp::Initialize( HAB vHab ) { + // + // OS2 has to have an anchorblock + // + vHab = WinInitialize(0); + + if (!vHab) + return FALSE; + else + vHabmain = vHab; + // Some people may wish to use this, but // probably it shouldn't be here by default. #ifdef __WXDEBUG__ @@ -188,100 +198,110 @@ bool wxApp::RegisterWindowClasses( ) { APIRET rc; + ERRORID vError = 0L; + wxString sError; if ((rc = ::WinRegisterClass( vHab ,wxFrameClassName ,(PFNWP)wxWndProc - ,CS_SIZEREDRAW | CS_SYNCPAINT | CS_HITTEST | CS_CLIPCHILDREN | CS_FRAME + ,CS_SIZEREDRAW | CS_SYNCPAINT | CS_FRAME ,0 )) != 0) { - wxLogLastError("RegisterClass(frame)"); - + vError = ::WinGetLastError(vHab); + sError = wxPMErrorToStr(vError); + wxLogLastError(sError); return FALSE; } - if (!::WinRegisterClass( vHab - ,wxFrameClassNameNoRedraw - ,(PFNWP)wxWndProc - ,CS_HITTEST | CS_CLIPCHILDREN | CS_FRAME - ,0 - )) + if ((rc = ::WinRegisterClass( vHab + ,wxFrameClassNameNoRedraw + ,(PFNWP)wxWndProc + ,CS_FRAME + ,0 + )) != 0) { - wxLogLastError("RegisterClass(no redraw frame)"); - + vError = ::WinGetLastError(vHab); + sError = wxPMErrorToStr(vError); + wxLogLastError(sError); return FALSE; } - if (!::WinRegisterClass( vHab - ,wxMDIFrameClassName - ,(PFNWP)wxWndProc - ,CS_SIZEREDRAW | CS_SYNCPAINT | CS_HITTEST | CS_CLIPCHILDREN | CS_FRAME - ,0 - )) + if ((rc = ::WinRegisterClass( vHab + ,wxMDIFrameClassName + ,(PFNWP)wxWndProc + ,CS_SIZEREDRAW | CS_SYNCPAINT | CS_FRAME + ,0 + )) != 0) { - wxLogLastError("RegisterClass(MDI parent)"); - + vError = ::WinGetLastError(vHab); + sError = wxPMErrorToStr(vError); + wxLogLastError(sError); return FALSE; } - if (!::WinRegisterClass( vHab - ,wxMDIFrameClassNameNoRedraw - ,(PFNWP)wxWndProc - ,CS_HITTEST | CS_CLIPCHILDREN | CS_FRAME - ,0 - )) + if ((rc = ::WinRegisterClass( vHab + ,wxMDIFrameClassNameNoRedraw + ,(PFNWP)wxWndProc + ,CS_FRAME + ,0 + )) != 0) { - wxLogLastError("RegisterClass(no redraw MDI parent)"); - + vError = ::WinGetLastError(vHab); + sError = wxPMErrorToStr(vError); + wxLogLastError(sError); return FALSE; } - if (!::WinRegisterClass( vHab - ,wxMDIChildFrameClassName - ,(PFNWP)wxWndProc - ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_SYNCPAINT | CS_HITTEST | CS_CLIPSIBLINGS | CS_FRAME - ,0 - )) + if ((rc = ::WinRegisterClass( vHab + ,wxMDIChildFrameClassName + ,(PFNWP)wxWndProc + ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_SYNCPAINT | CS_HITTEST | CS_FRAME + ,0 + )) != 0) { - wxLogLastError("RegisterClass(MDI child)"); - + vError = ::WinGetLastError(vHab); + sError = wxPMErrorToStr(vError); + wxLogLastError(sError); return FALSE; } - if (!::WinRegisterClass( vHab - ,wxMDIChildFrameClassNameNoRedraw - ,(PFNWP)wxWndProc - ,CS_HITTEST | CS_CLIPSIBLINGS | CS_FRAME - ,0 - )) + if ((rc = ::WinRegisterClass( vHab + ,wxMDIChildFrameClassNameNoRedraw + ,(PFNWP)wxWndProc + ,CS_HITTEST | CS_FRAME + ,0 + )) != 0) { - wxLogLastError("RegisterClass(no redraw MDI child)"); - + vError = ::WinGetLastError(vHab); + sError = wxPMErrorToStr(vError); + wxLogLastError(sError); return FALSE; } - if (!::WinRegisterClass( vHab - ,wxPanelClassName - ,(PFNWP)wxWndProc - ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_CLIPSIBLINGS | CS_SAVEBITS | CS_SYNCPAINT - ,0 - )) + if ((rc = ::WinRegisterClass( vHab + ,wxPanelClassName + ,(PFNWP)wxWndProc + ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_SAVEBITS | CS_SYNCPAINT + ,0 + )) != 0) { - wxLogLastError("RegisterClass(Panel)"); - + vError = ::WinGetLastError(vHab); + sError = wxPMErrorToStr(vError); + wxLogLastError(sError); return FALSE; } - if (!::WinRegisterClass( vHab - ,wxCanvasClassName - ,(PFNWP)wxWndProc - ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_CLIPSIBLINGS | CS_SAVEBITS | CS_SYNCPAINT - ,0 - )) + if ((rc = ::WinRegisterClass( vHab + ,wxCanvasClassName + ,(PFNWP)wxWndProc + ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_SAVEBITS | CS_SYNCPAINT + ,0 + )) != 0) { - wxLogLastError("RegisterClass(Canvas)"); - + vError = ::WinGetLastError(vHab); + sError = wxPMErrorToStr(vError); + wxLogLastError(sError); return FALSE; } return TRUE; @@ -483,9 +503,17 @@ int wxEntry( bool wxApp::OnInitGui() { - vHabmain = WinInitialize(0); - m_hMq = WinCreateMsgQueue(vHabmain, 0); + ERRORID vError; + wxString sError; + m_hMq = WinCreateMsgQueue(vHabmain, 0); + if (!m_hMq) + { + vError = ::WinGetLastError(vHabmain); + sError = wxPMErrorToStr(vError); + wxLogDebug(sError); + return FALSE; + } return TRUE; } diff --git a/src/os2/frame.cpp b/src/os2/frame.cpp index d697f9ca5d..becb832a40 100644 --- a/src/os2/frame.cpp +++ b/src/os2/frame.cpp @@ -727,70 +727,63 @@ bool wxFrame::OS2Create( , long ulStyle ) { - ULONG ulPmFlags = 0; - ULONG ulExtraFlags = 0; - ULONG ulTempFlags = FCF_TITLEBAR | - FCF_SYSMENU | - FCF_MINBUTTON | - FCF_MAXBUTTON | - FCF_SIZEBORDER | - FCF_ICON | - FCF_MENU | - FCF_ACCELTABLE | - FCF_SHELLPOSITION | - FCF_TASKLIST; + ULONG ulPmFlags = 0L; + ULONG ulExtraFlags = 0L; + ULONG ulTempFlags = FCF_STANDARD; m_hDefaultIcon = (WXHICON) (wxSTD_FRAME_ICON ? wxSTD_FRAME_ICON : wxDEFAULT_FRAME_ICON); - if ((ulStyle & wxCAPTION) == wxCAPTION) - ulPmFlags = FCF_TASKLIST; + if (ulStyle == wxDEFAULT_FRAME_STYLE) + ulPmFlags = FCF_STANDARD; else - ulPmFlags = FCF_NOMOVEWITHOWNER; - - if (ulStyle & wxMINIMIZE_BOX) - ulPmFlags |= FCF_MINBUTTON; - if (ulStyle & wxMAXIMIZE_BOX) - ulPmFlags |= FCF_MAXBUTTON; - if (ulStyle & wxTHICK_FRAME) - ulPmFlags |= FCF_DLGBORDER; - if (ulStyle & wxSYSTEM_MENU) - ulPmFlags |= FCF_SYSMENU; - if ((ulStyle & wxMINIMIZE) || (ulStyle & wxICONIZE)) - ulPmFlags |= WS_MINIMIZED; - if (ulStyle & wxMAXIMIZE) - ulPmFlags |= WS_MAXIMIZED; - if (ulStyle & wxCAPTION) - ulPmFlags |= FCF_TASKLIST; - if (ulStyle & wxCLIP_CHILDREN) { - // Invalid for frame windows under PM - } + if ((ulStyle & wxCAPTION) == wxCAPTION) + ulPmFlags = FCF_TASKLIST; + else + ulPmFlags = FCF_NOMOVEWITHOWNER; + + if (ulStyle & wxMINIMIZE_BOX) + ulPmFlags |= FCF_MINBUTTON; + if (ulStyle & wxMAXIMIZE_BOX) + ulPmFlags |= FCF_MAXBUTTON; + if (ulStyle & wxTHICK_FRAME) + ulPmFlags |= FCF_DLGBORDER; + if (ulStyle & wxSYSTEM_MENU) + ulPmFlags |= FCF_SYSMENU; + if ((ulStyle & wxMINIMIZE) || (ulStyle & wxICONIZE)) + ulPmFlags |= WS_MINIMIZED; + if (ulStyle & wxMAXIMIZE) + ulPmFlags |= WS_MAXIMIZED; + if (ulStyle & wxCAPTION) + ulPmFlags |= FCF_TASKLIST; + if (ulStyle & wxCLIP_CHILDREN) + { + // Invalid for frame windows under PM + } - // - // Keep this in wxFrame because it saves recoding this function - // in wxTinyFrame - // + // + // Keep this in wxFrame because it saves recoding this function + // in wxTinyFrame + // #if wxUSE_ITSY_BITSY - if (ulStyle & wxTINY_CAPTION_VERT) - ulExtraFlags |= kVertCaption; - if (ulStyle & wxTINY_CAPTION_HORIZ) - ulExtraFlags |= kHorzCaption; + if (ulStyle & wxTINY_CAPTION_VERT) + ulExtraFlags |= kVertCaption; + if (ulStyle & wxTINY_CAPTION_HORIZ) + ulExtraFlags |= kHorzCaption; #else - if (ulStyle & wxTINY_CAPTION_VERT) - ulPmFlags |= FCF_TASKLIST; - if (ulStyle & wxTINY_CAPTION_HORIZ) - ulPmFlags |= FCF_TASKLIST; + if (ulStyle & wxTINY_CAPTION_VERT) + ulPmFlags |= FCF_TASKLIST; + if (ulStyle & wxTINY_CAPTION_HORIZ) + ulPmFlags |= FCF_TASKLIST; #endif - if ((ulStyle & wxTHICK_FRAME) == 0) - ulPmFlags |= FCF_BORDER; - if (ulStyle & wxFRAME_TOOL_WINDOW) - ulExtraFlags = kFrameToolWindow; + if ((ulStyle & wxTHICK_FRAME) == 0) + ulPmFlags |= FCF_BORDER; + if (ulStyle & wxFRAME_TOOL_WINDOW) + ulExtraFlags = kFrameToolWindow; - if (ulStyle & wxSTAY_ON_TOP) - ulPmFlags |= FCF_SYSMODAL; - - if (ulPmFlags & ulTempFlags) - ulPmFlags = FCF_STANDARD; + if (ulStyle & wxSTAY_ON_TOP) + ulPmFlags |= FCF_SYSMODAL; + } // // Clear the visible flag, we always call show // diff --git a/src/os2/icon.cpp b/src/os2/icon.cpp index d3d3f49313..9168126aee 100644 --- a/src/os2/icon.cpp +++ b/src/os2/icon.cpp @@ -68,7 +68,15 @@ wxIcon::wxIcon( , int nDesiredHeight ) { - LoadFile( rIconFile + // + // A very poor hack, but we have to have separate icon files from windows + // So we have a modified name where replace the last three characters + // with os2. Also need the extension. + // + wxString sOs2Name = rIconFile.Mid(0, rIconFile.Length() - 3); + + sOs2Name += "Os2.ico"; + LoadFile( sOs2Name ,lFlags ,nDesiredWidth ,nDesiredHeight diff --git a/src/os2/makefile.va b/src/os2/makefile.va index 9f938f704c..1785ccae96 100644 --- a/src/os2/makefile.va +++ b/src/os2/makefile.va @@ -915,7 +915,7 @@ $(WXDIR)\lib\wxos22.lib: $(OS2LIBOBJS2) ilib $(LIBFLAGS) $@ @<< $**; << - del *.obj +# del *.obj $(WXDIR)\lib\wx.lib: \ $D\dummy.obj \ @@ -933,14 +933,14 @@ $(WXDIR)\lib\wx.lib: \ ilib $(LIBFLAGS) $@ @<< $**; << - del $(COMTEMPTGT1) - del $(COMTEMPTGT2) - del $(COMTEMPTGT3) - del $(GENTEMPTGT) - del $(HTMLTEMPTGT) - del $(NONESTEMPTGT) - del $(OS2TEMPTGT1) - del $(OS2TEMPTGT2) +# del $(COMTEMPTGT1) +# del $(COMTEMPTGT2) +# del $(COMTEMPTGT3) +# del $(GENTEMPTGT) +# del $(HTMLTEMPTGT) +# del $(NONESTEMPTGT) +# del $(OS2TEMPTGT1) +# del $(OS2TEMPTGT2) !else diff --git a/src/os2/menuitem.cpp b/src/os2/menuitem.cpp index da529a5633..03ee6f9b5d 100644 --- a/src/os2/menuitem.cpp +++ b/src/os2/menuitem.cpp @@ -180,17 +180,17 @@ void wxMenuItem::Enable( if (m_isEnabled == bEnable) return; if (bEnable) - bOk = ::WinSendMsg( GetHMenuOf(m_parentMenu) - ,MM_SETITEMATTR - ,MPFROM2SHORT(GetRealId(), TRUE) - ,MPFROM2SHORT(MIA_DISABLED, MIA_DISABLED) - ); + bOk = (bool)::WinSendMsg( GetHMenuOf(m_parentMenu) + ,MM_SETITEMATTR + ,MPFROM2SHORT(GetRealId(), TRUE) + ,MPFROM2SHORT(MIA_DISABLED, MIA_DISABLED) + ); else - bOk = ::WinSendMsg( GetHMenuOf(m_parentMenu) - ,MM_SETITEMATTR - ,MPFROM2SHORT(GetRealId(), TRUE) - ,MPFROM2SHORT(MIA_DISABLED, FALSE) - ); + bOk = (bool)::WinSendMsg( GetHMenuOf(m_parentMenu) + ,MM_SETITEMATTR + ,MPFROM2SHORT(GetRealId(), TRUE) + ,MPFROM2SHORT(MIA_DISABLED, FALSE) + ); if (!bOk) { wxLogLastError("EnableMenuItem"); @@ -208,17 +208,17 @@ void wxMenuItem::Check( if (m_isChecked == bCheck) return; if (bCheck) - bOk = ::WinSendMsg( GetHMenuOf(m_parentMenu) - ,MM_SETITEMATTR - ,MPFROM2SHORT(GetRealId(), TRUE) - ,MPFROM2SHORT(MIA_CHECKED, MIA_CHECKED) - ); + bOk = (bool)::WinSendMsg( GetHMenuOf(m_parentMenu) + ,MM_SETITEMATTR + ,MPFROM2SHORT(GetRealId(), TRUE) + ,MPFROM2SHORT(MIA_CHECKED, MIA_CHECKED) + ); else - bOk = ::WinSendMsg( GetHMenuOf(m_parentMenu) - ,MM_SETITEMATTR - ,MPFROM2SHORT(GetRealId(), TRUE) - ,MPFROM2SHORT(MIA_CHECKED, FALSE) - ); + bOk = (bool)::WinSendMsg( GetHMenuOf(m_parentMenu) + ,MM_SETITEMATTR + ,MPFROM2SHORT(GetRealId(), TRUE) + ,MPFROM2SHORT(MIA_CHECKED, FALSE) + ); if (!bOk) { wxLogLastError("EnableMenuItem"); @@ -250,7 +250,7 @@ void wxMenuItem::SetText( USHORT uId = GetRealId(); MENUITEM vItem; USHORT uFlagsOld; - + if (!::WinSendMsg( hMenu ,MM_QUERYITEM ,MPFROM2SHORT(uId, TRUE) diff --git a/src/os2/utils.cpp b/src/os2/utils.cpp index 34cb8a977f..ec490fca94 100644 --- a/src/os2/utils.cpp +++ b/src/os2/utils.cpp @@ -817,3 +817,62 @@ WXWORD WXDLLEXPORT wxGetWindowId( return ::WinQueryWindowUShort((HWND)hWnd, QWS_ID); } +wxString WXDLLEXPORT wxPMErrorToStr( + ERRORID vError +) +{ + wxString sError; + + // + // Remove the high order byte -- it is useless + // + vError &= 0x0000ffff; + switch(vError) + { + case PMERR_INVALID_HWND: + sError = wxT("Invalid window handle specified"); + break; + + case PMERR_INVALID_FLAG: + sError = wxT("Invalid flag bit set"); + break; + + case PMERR_NO_MSG_QUEUE: + sError = wxT("No message queue available"); + break; + + case PMERR_INVALID_PARM: + sError = wxT("Parameter contained invalid data"); + break; + + case PMERR_INVALID_PARAMETERS: + sError = wxT("Parameter value is out of range"); + break; + + case PMERR_PARAMETER_OUT_OF_RANGE: + sError = wxT("Parameter value is out of range"); + break; + + case PMERR_INVALID_INTEGER_ATOM: + sError = wxT("Not a valid atom"); + break; + + case PMERR_INVALID_HATOMTBL: + sError = wxT("Atom table handle is invalid"); + break; + + case PMERR_INVALID_ATOM_NAME: + sError = wxT("Not a valid atom name"); + break; + + case PMERR_ATOM_NAME_NOT_FOUND: + sError = wxT("Valid name format, but cannot find name in atom table"); + break; + + default: + sError = wxT("Unknown error"); + } + return(sError); +} // end of wxPMErrorToStr + + diff --git a/src/os2/window.cpp b/src/os2/window.cpp index c4b8665f2b..5120d55fa2 100644 --- a/src/os2/window.cpp +++ b/src/os2/window.cpp @@ -2327,6 +2327,8 @@ bool wxWindow::OS2Create( , WXDWORD dwExtendedStyle // Port compatability only ) { + ERRORID vError; + wxString sError; int nX1 = CW_USEDEFAULT; int nY1 = 0; int nWidth1 = CW_USEDEFAULT; @@ -2350,6 +2352,8 @@ bool wxWindow::OS2Create( nWidth1 = vParentRect.xRight - vParentRect.xLeft; nHeight1 = vParentRect.yTop - vParentRect.yBottom; } + else + hParent = HWND_DESKTOP; if (nX > -1) nX1 = nX; @@ -2373,7 +2377,7 @@ bool wxWindow::OS2Create( PDLGTEMPLATE pDlgt; ::DosGetResource(0L, RT_DIALOG, vId, (PPVOID)&pDlgt); - m_hWnd = (WXHWND)::WinCreateDlg( pParent->GetHWND() + m_hWnd = (WXHWND)::WinCreateDlg( hParent ,NULLHANDLE ,(PFNWP)wxDlgProc ,pDlgt @@ -2381,8 +2385,11 @@ bool wxWindow::OS2Create( ); if (m_hWnd == 0) { - wxLogError(_("Can't find dummy dialog template!\n" - "Check resource include path for finding wx.rc.")); + vError = ::WinGetLastError(vHabmain); + sError = wxPMErrorToStr(vError); + wxLogError("Can't find dummy dialog template!\n" + "Check resource include path for finding wx.rc.\n" + "Error: %s\n", sError); return FALSE; } @@ -2398,7 +2405,9 @@ bool wxWindow::OS2Create( ,SWP_MOVE | SWP_SIZE | SWP_NOREDRAW )); { - wxLogLastError(wxT("MoveWindow")); + vError = ::WinGetLastError(vHabmain); + sError = wxPMErrorToStr(vError); + wxLogError("MoveWindow, error: %s\n", sError); } } else @@ -2447,7 +2456,9 @@ bool wxWindow::OS2Create( ); if (!m_hWnd) { - wxLogError("Can't create window of class %s!\n", zWclass); + vError = ::WinGetLastError(vHabmain); + sError = wxPMErrorToStr(vError); + wxLogError("Can't create window of class %s!. Error: %s\n", zWclass, sError); return FALSE; } } -- 2.47.2