1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     Native dialog loading code (part of wxWindow) 
   4 // Author:      David Webster 
   8 // Copyright:   (c) David Webster 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 // =========================================================================== 
  14 // =========================================================================== 
  16 // --------------------------------------------------------------------------- 
  18 // --------------------------------------------------------------------------- 
  20 // For compilers that support precompilation, includes "wx.h". 
  21 #include "wx/wxprec.h" 
  28 #include "wx/os2/private.h" 
  29 #include "wx/spinbutt.h" 
  31 // --------------------------------------------------------------------------- 
  33 // --------------------------------------------------------------------------- 
  35 extern wxWindow
* wxWndHook
; 
  36 extern MRESULT EXPENTRY 
wxDlgProc( HWND   hWnd
 
  42 // =========================================================================== 
  44 // =========================================================================== 
  46 bool wxWindow::LoadNativeDialog ( 
  51     wxWindow
*                       pChild 
= NULL
; 
  53     HWND                            hWndNext 
= NULLHANDLE
; 
  57         hWndOwner 
= GetHwndOf(pParent
); 
  59         hWndOwner 
= HWND_DESKTOP
; 
  64     m_hWnd 
= ::WinLoadDlg( HWND_DESKTOP
 
  68                           ,(ULONG
)131 // Caption dialog from the resource file 
  76     SubclassWin(GetHWND()); 
  79         pParent
->AddChild(this); 
  81         wxTopLevelWindows
.Append(this); 
  84     // Enumerate the children 
  86     hEnum 
= ::WinBeginEnumWindows(GetHwndOf(pParent
)); 
  87     while ((hWndNext 
= ::WinGetNextWindow(hEnum
)) != NULLHANDLE
) 
  88         pChild 
= CreateWindowFromHWND( this 
  91     ::WinEndEnumWindows(hEnum
); 
  93 } // end of wxWindow::LoadNativeDialog 
  95 bool wxWindow::LoadNativeDialog ( 
  97 , const wxString
&                   rsName
 
 103         hWndOwner 
= GetHwndOf(pParent
); 
 105         hWndOwner 
= HWND_DESKTOP
; 
 109     m_hWnd 
= ::WinLoadDlg( HWND_DESKTOP
 
 113                           ,(ULONG
)131 // Caption dialog from the resource file 
 121     SubclassWin(GetHWND()); 
 124         pParent
->AddChild(this); 
 126         wxTopLevelWindows
.Append(this); 
 128 } // end of wxWindow::LoadNativeDialog 
 130 // --------------------------------------------------------------------------- 
 131 // look for child by id 
 132 // --------------------------------------------------------------------------- 
 133 wxWindow
* wxWindow::GetWindowChild1 ( 
 137     if (m_windowId 
== vId
) 
 140     wxWindowList::compatibility_iterator node 
= GetChildren().GetFirst(); 
 144         wxWindow
*                   pChild 
= node
->GetData(); 
 145         wxWindow
*                   pWin   
= pChild
->GetWindowChild1(vId
); 
 150         node 
= node
->GetNext(); 
 153 } // end of wxWindow::GetWindowChild1 
 155 wxWindow
* wxWindow::GetWindowChild ( 
 159     wxWindow
*                       pWin 
= GetWindowChild1(vId
); 
 163         HWND                        hWnd 
= 0; // TODO: ::GetDlgItem((HWND) GetHWND(), id); 
 167             wxWindow
*               pChild 
= CreateWindowFromHWND( this 
 172                 pChild
->AddChild(this); 
 178 } // end of wxWindow::GetWindowChild 
 180 // --------------------------------------------------------------------------- 
 181 // create wxWin window from a native HWND 
 182 // --------------------------------------------------------------------------- 
 184 wxWindow
* wxWindow::CreateWindowFromHWND ( 
 189     wxString                        
sStr(wxGetWindowClass(hWnd
)); 
 190     long                            lId    
= wxGetWindowId(hWnd
); 
 191     long                            lStyle 
= ::WinQueryWindowULong((HWND
)hWnd
 
 194     wxWindow
*                       pWin 
= NULL
; 
 200     if (sStr 
== wxT("BUTTON")) 
 202         if (lStyle 
== BS_AUTOCHECKBOX
) 
 204             pWin 
= new wxCheckBox
; 
 206         else if (lStyle 
== BS_AUTORADIOBUTTON
) 
 208             pWin 
= new wxRadioButton
; 
 210         else if (lStyle 
& BS_BITMAP 
|| lStyle 
== BS_USERBUTTON
) 
 212             pWin 
= new wxBitmapButton
; 
 214         else if (lStyle 
== BS_PUSHBUTTON
) 
 218         else if (lStyle 
== SS_GROUPBOX
) 
 220             pWin 
= new wxStaticBox
; 
 224             wxLogError(wxT("Don't know what kind of button this is: id = %ld"), 
 228     else if (sStr 
== wxT("COMBOBOX")) 
 230         pWin 
= new wxComboBox
; 
 232     else if (sStr 
== wxT("EDIT")) 
 234         pWin 
= new wxTextCtrl
; 
 236     else if (sStr 
== wxT("LISTBOX")) 
 238         pWin 
= new wxListBox
; 
 240     else if (sStr 
== wxT("SCROLLBAR")) 
 242         pWin 
= new wxScrollBar
; 
 244     else if (sStr 
== wxT("MSCTLS_UPDOWN32")) 
 246         pWin 
= new wxSpinButton
; 
 248     else if (sStr 
== wxT("MSCTLS_TRACKBAR32")) 
 252     else if (sStr 
== wxT("STATIC")) 
 254         if (lStyle 
== SS_TEXT
) 
 255             pWin 
= new wxStaticText
; 
 256         else if (lStyle 
== SS_ICON
) 
 258             pWin 
= new wxStaticBitmap
; 
 263         wxString                    
sMsg(wxT("Don't know how to convert from Windows class ")); 
 270         pParent
->AddChild(pWin
); 
 271         pWin
->SetEventHandler(pWin
); 
 274         pWin
->SubclassWin(hWnd
); 
 275         pWin
->AdoptAttributesFromHWND(); 
 276         pWin
->SetupColours(); 
 281 } // end of wxWindow::CreateWindowFromHWND 
 284 // Make sure the window style (etc.) reflects the HWND style (roughly) 
 286 void wxWindow::AdoptAttributesFromHWND() 
 288   // Does nothing under OS/2 
 289 } // end of wxWindow::AdoptAttributesFromHWND