]> git.saurik.com Git - wxWidgets.git/commitdiff
More framework updates
authorDavid Webster <Dave.Webster@bhmi.com>
Thu, 2 Mar 2000 22:13:38 +0000 (22:13 +0000)
committerDavid Webster <Dave.Webster@bhmi.com>
Thu, 2 Mar 2000 22:13:38 +0000 (22:13 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6403 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/os2/private.h
src/os2/app.cpp
src/os2/frame.cpp
src/os2/icon.cpp
src/os2/makefile.va
src/os2/menuitem.cpp
src/os2/utils.cpp
src/os2/window.cpp

index 103ec64d5cd66c27a0501dabbc42298a9653f2a5..2dd674aeed516efd4e6beb7080c749939a84065d 100644 (file)
@@ -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)
 {
index 521f05f5868b7866bc55bc28d2d586072d859a7d..e895010722c4d5dc1c43a96ed7d232bee0be2739 100644 (file)
@@ -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;
 }
 
index d697f9ca5d0be16d0a5b4c185179050d382732c2..becb832a40f1b9379ab63fbb75127905d981b560 100644 (file)
@@ -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
     //
index d3d3f49313996ca6a582ffc70e99f1d76268ef0d..9168126aeeaa8f19fc42903e90c7e8c359c02450 100644 (file)
@@ -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
index 9f938f704c395c5098e503edfcf7a7a98e6bc175..1785ccae962f98948e4a5882ebc9ad7b4b560ed0 100644 (file)
@@ -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
 
index da529a56339e435e30ac8dfec9c6c3e756d7e9d7..03ee6f9b5d3543d25d0093288b258159455e99cf 100644 (file)
@@ -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)
index 34cb8a977f85db24a84c0ffadf90f58ac64ee2de..ec490fca949cb2d3d3972536eb52e7d7e4c6b06e 100644 (file)
@@ -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
+
+
index c4b8665f2baf0614211a0a586ddf04f1611af2f2..5120d55fa2c65eb3b04ce9ca3fcfbd3786852a4a 100644 (file)
@@ -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;
         }
     }