]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/window.cpp
Use system default font for all platforms
[wxWidgets.git] / src / os2 / window.cpp
index c4b8665f2baf0614211a0a586ddf04f1611af2f2..01de71dd154368b5b4d6c8ac1026c3f675368fc4 100644 (file)
@@ -111,11 +111,11 @@ wxList*                   wxWinHandleList = NULL;
 //
 // the window proc for all our windows; most gui's have something similar
 //
-MRESULT wxWndProc( HWND hWnd
-                  ,ULONG message
-                  ,MPARAM mp1
-                  ,MPARAM mp2
-                 );
+MRESULT EXPENTRY wxWndProc( HWND hWnd
+                           ,ULONG message
+                           ,MPARAM mp1
+                           ,MPARAM mp2
+                          );
 
 #ifdef  __WXDEBUG__
     const char *wxGetMessageName(int message);
@@ -326,6 +326,8 @@ bool wxWindow::Create(
 , const wxString&                   rName
 )
 {
+    HWND                            hParent = NULLHANDLE;
+
     wxCHECK_MSG(pParent, FALSE, wxT("can't create wxWindow without parent"));
 
     if ( !CreateBase( pParent
@@ -338,53 +340,47 @@ bool wxWindow::Create(
                     ))
         return(FALSE);
 
-    pParent->AddChild(this);
+    if (pParent)
+    {
+        pParent->AddChild(this);
+        hParent = GetWinHwnd(pParent);
+    }
+    else
+       hParent = HWND_DESKTOP;
+
+    ULONG                           ulCreateFlags = 0L;
 
-    ULONG                           ulFlags = 0L;
 
     //
-    // Frame windows and their derivatives only
+    // Most wxSTYLES are really PM Class specific styles and will be
+    // set in those class create procs.  PM's basic windows styles are
+    // very limited.
     //
-    if (lStyle & wxBORDER)
-        ulFlags |= FCF_BORDER;
-    if (lStyle & wxTHICK_FRAME )
-        ulFlags |= FCF_SIZEBORDER;
+    if (lStyle & wxCLIP_CHILDREN )
+        ulCreateFlags |= WS_CLIPCHILDREN;
 
     //
-    // Some generic window styles
+    // Empty stuff for now since PM has no custome 3D effects
+    // Doesn't mean someone cannot make some up though
     //
-    ulFlags |= WS_VISIBLE;
-    if (lStyle & wxCLIP_CHILDREN )
-        ulFlags |= WS_CLIPCHILDREN;
-
     bool                            bWant3D;
     WXDWORD                         dwExStyle = Determine3DEffects(WS_EX_CLIENTEDGE, &bWant3D);
 
     //
-    // OS/2 PM doesn't have "extended" styles but if the library specifies
-    // them and we are creating a frame window then at least give it a border
+    // Generic OS/2 Windows are created with no owner, no Z Order, no Control data,
+    // and no presentation parameters
     //
-    if ( bWant3D ||
-        (m_windowStyle & wxSIMPLE_BORDER) ||
-        (m_windowStyle & wxRAISED_BORDER ) ||
-        (m_windowStyle & wxSUNKEN_BORDER) ||
-        (m_windowStyle & wxDOUBLE_BORDER)
-       )
-    {
-        ulFlags |= FCF_BORDER;
-    }
-    OS2Create( m_windowId
-              ,pParent
-              ,wxCanvasClassName
-              ,this
-              ,NULL
+    OS2Create( hParent
+              ,(PSZ)wxCanvasClassName
+              ,rName.c_str()
+              ,ulCreateFlags
               ,rPos.x
               ,rPos.y
               ,WidthDefault(rSize.x)
               ,HeightDefault(rSize.y)
-              ,ulFlags
-              ,NULL
-              ,dwExStyle
+              ,NULLHANDLE
+              ,NULLHANDLE
+              ,m_windowId
              );
     return(TRUE);
 } // end of wxWindow::Create
@@ -1773,7 +1769,7 @@ wxWindow*                           wxWndHook = NULL;
 //
 // Main window proc
 //
-MRESULT wxWndProc(
+MRESULT EXPENTRY wxWndProc(
   HWND                              hWnd
 , ULONG                             ulMsg
 , MPARAM                            wParam
@@ -2313,24 +2309,28 @@ void wxWindow::OS2DetachWindowMenu()
 } // end of wxWindow::OS2DetachWindowMenu
 
 bool wxWindow::OS2Create(
-  int                               vId
-, wxWindow*                         pParent
-, const wxChar*                     zWclass
-, wxWindow*                         pWxWin
+  WXHWND                            hParent
+, PSZ                               zClass
 , const wxChar*                     zTitle
-, int                               nX
-, int                               nY
-, int                               nWidth
-, int                               nHeight
 , WXDWORD                           dwStyle
-, const wxChar*                     zDialogTemplate
-, WXDWORD                           dwExtendedStyle // Port compatability only
-)
-{
-    int                             nX1      = CW_USEDEFAULT;
-    int                             nY1      = 0;
-    int                             nWidth1  = CW_USEDEFAULT;
-    int                             nHeight1 = 100;
+, long                              lX
+, long                              lY
+, long                              lWidth
+, long                              lHeight
+, WXHWND                            hOwner
+, WXHWND                            hZOrder
+, unsigned long                     ulId
+, void*                             pCtlData
+, void*                             pPresParams
+)
+{
+    ERRORID                         vError;
+    wxString                        sError;
+    long                            lX1      = (long)CW_USEDEFAULT;
+    long                            lY1      = 0L;
+    long                            lWidth1  = (long)CW_USEDEFAULT;
+    long                            lHeight1 = 100L;
+    int                             nControlId = 0;
 
     //
     // Find parent's size, if it exists, to set up a possible default
@@ -2339,117 +2339,60 @@ bool wxWindow::OS2Create(
     RECTL                           vParentRect;
     HWND                            hWndClient;
 
-    HWND                            hParent = (HWND)NULL;
-
-    if (pParent)
-    {
-        hParent = (HWND)pParent->GetHWND();
-        hWndClient = ::WinWindowFromID(hParent, FID_CLIENT);
-        ::WinQueryWindowRect(hWndClient, &vParentRect);
-
-        nWidth1  = vParentRect.xRight - vParentRect.xLeft;
-        nHeight1 = vParentRect.yTop - vParentRect.yBottom;
-    }
-
-    if (nX > -1)
-        nX1 = nX;
-    if (nY > -1)
-        nY1 = nY;
-    if (nWidth > -1)
-        nWidth1   = nWidth;
-    if (nHeight > -1)
-        nHeight1 = nHeight;
+    if (lX > -1L)
+        lX1 = lX;
+    if (lY > -1L)
+        lY1 = lY;
+    if (lWidth > -1L)
+        lWidth1 = lWidth;
+    if (lHeight > -1L)
+        lHeight1 = lHeight;
 
     wxWndHook = this;
 
-    if (zDialogTemplate)
+    //
+    // check to see if the new window is a standard control
+    //
+    if ((ULONG)zClass == (ULONG)WC_BUTTON ||
+        (ULONG)zClass == (ULONG)WC_COMBOBOX ||
+        (ULONG)zClass == (ULONG)WC_CONTAINER ||
+        (ULONG)zClass == (ULONG)WC_ENTRYFIELD ||
+        (ULONG)zClass == (ULONG)WC_LISTBOX ||
+        (ULONG)zClass == (ULONG)WC_MENU ||
+        (ULONG)zClass == (ULONG)WC_NOTEBOOK ||
+        (ULONG)zClass == (ULONG)WC_SCROLLBAR ||
+        (ULONG)zClass == (ULONG)WC_SPINBUTTON ||
+        (ULONG)zClass == (ULONG)WC_STATIC ||
+        (ULONG)zClass == (ULONG)WC_TITLEBAR ||
+        (ULONG)zClass == (ULONG)WC_VALUESET
+       )
     {
-        //
-        // We can use extended styles for custom default user config params
-        // These can be processed in the dialog proc's WM_INITDLG
-        // Dialog template is defined by vId and should be loaded from the
-        // resource file in the current .exe
-        //
-        PDLGTEMPLATE                 pDlgt;
-
-        ::DosGetResource(0L, RT_DIALOG, vId, (PPVOID)&pDlgt);
-        m_hWnd = (WXHWND)::WinCreateDlg( pParent->GetHWND()
-                                        ,NULLHANDLE
-                                        ,(PFNWP)wxDlgProc
-                                        ,pDlgt
-                                        ,(PVOID)&dwExtendedStyle
-                                       );
-        if (m_hWnd == 0)
-        {
-            wxLogError(_("Can't find dummy dialog template!\n"
-                         "Check resource include path for finding wx.rc."));
-            return FALSE;
-        }
-
-        //
-        // Move the dialog to its initial position without forcing repainting
-        //
-        if (!::WinSetWindowPos( m_hWnd
-                               ,HWND_TOP
-                               ,nX1
-                               ,nY1
-                               ,nWidth1
-                               ,nHeight1
-                               ,SWP_MOVE | SWP_SIZE | SWP_NOREDRAW
-                              ));
-        {
-            wxLogLastError(wxT("MoveWindow"));
-        }
+            nControlId = ulId;
     }
-    else
-    {
-        int                         nControlId = 0;
-        WXDWORD                     dwClass = dwStyle | 0xffff0000;
 
-        //
-        // check to see if the new window is a standard control
-        //
-        if (dwClass & (ULONG)WC_BUTTON ||
-            dwClass & (ULONG)WC_COMBOBOX ||
-            dwClass & (ULONG)WC_CONTAINER ||
-            dwClass & (ULONG)WC_ENTRYFIELD ||
-            dwClass & (ULONG)WC_LISTBOX ||
-            dwClass & (ULONG)WC_MENU ||
-            dwClass & (ULONG)WC_NOTEBOOK ||
-            dwClass & (ULONG)WC_SCROLLBAR ||
-            dwClass & (ULONG)WC_SPINBUTTON ||
-            dwClass & (ULONG)WC_STATIC ||
-            dwClass & (ULONG)WC_TITLEBAR ||
-            dwClass & (ULONG)WC_VALUESET
-           )
-            nControlId = vId;
-
-        wxString                    sClassName(zWclass);
-
-        if (GetWindowStyleFlag() & wxNO_FULL_REPAINT_ON_RESIZE )
-        {
-            sClassName += wxT("NR");
-        }
-
-        m_hWnd = (WXHWND)::WinCreateWindow( hParent
-                                           ,(PSZ)sClassName.c_str()
-                                           ,zTitle ? zTitle : wxT("")
-                                           ,dwStyle
-                                           ,nX1
-                                           ,nY1
-                                           ,nWidth
-                                           ,nHeight
-                                           ,NULLHANDLE
-                                           ,HWND_TOP
-                                           ,vId
-                                           ,NULL
-                                           ,NULL
-                                          );
-        if (!m_hWnd)
-        {
-            wxLogError("Can't create window of class %s!\n", zWclass);
-            return FALSE;
-        }
+    //
+    // We will either have a registered class via string name or a standard PM Class via a long
+    //
+    m_hWnd = (WXHWND)::WinCreateWindow( (HWND)hParent
+                                       ,zClass
+                                       ,(PSZ)zTitle ? zTitle : wxT("")
+                                       ,(ULONG)dwStyle
+                                       ,(LONG)lX1
+                                       ,(LONG)lY1
+                                       ,(LONG)lWidth
+                                       ,(LONG)lHeight
+                                       ,NULLHANDLE
+                                       ,HWND_TOP
+                                       ,(ULONG)ulId
+                                       ,pCtlData
+                                       ,pPresParams
+                                      );
+    if (!m_hWnd)
+    {
+        vError = ::WinGetLastError(vHabmain);
+        sError = wxPMErrorToStr(vError);
+        wxLogError("Can't create window of class %s!. Error: %s\n", zClass, sError);
+        return FALSE;
     }
     wxWndHook = NULL;