bool wxSpinButton::Create( wxWindow* pParent , wxWindowID vId , const wxPoint& rPos , const wxSize& rSize , long lStyle , const wxString& rsName ) { int nX = rPos.x; int nY = rPos.y; int nWidth = rSize.x; int nHeight = rSize.y; SWP vSwp; m_min = 0; m_max = 100; if (vId == -1) m_windowId = NewControlId(); else m_windowId = vId; if (pParent) { m_backgroundColour = pParent->GetBackgroundColour(); m_foregroundColour = pParent->GetForegroundColour(); } SetName(rsName); SetParent(pParent); m_windowStyle = lStyle; // // Get the right size for the control // if (nWidth <= 0 || nHeight <= 0 ) { wxSize vSize = DoGetBestSize(); if (nWidth <= 0 ) nWidth = vSize.x; if (nHeight <= 0 ) nHeight = vSize.y; } if (nX < 0 ) nX = 0; if (nY < 0 ) nY = 0; long lSstyle = 0L; lSstyle = WS_VISIBLE | WS_TABSTOP | SPBS_MASTER | // We use only single field spin buttons SPBS_NUMERICONLY; // We default to numeric data if (m_windowStyle & wxCLIP_SIBLINGS ) lSstyle |= WS_CLIPSIBLINGS; m_hWnd = (WXHWND)::WinCreateWindow( GetWinHwnd(pParent) ,WC_SPINBUTTON ,(PSZ)NULL ,lSstyle ,0L, 0L, 0L, 0L ,GetWinHwnd(pParent) ,HWND_TOP ,(HMENU)vId ,NULL ,NULL ); if (m_hWnd == 0) { return FALSE; } SetRange(m_min, m_max); if(pParent) pParent->AddChild((wxSpinButton *)this); ::WinQueryWindowPos(m_hWnd, &vSwp); SetXComp(vSwp.x); SetYComp(vSwp.y-5); // compensate for the associated TextControl border SetFont(*wxSMALL_FONT); // // For OS/2 we want to hide the text portion so we can substitute an // independent text ctrl in its place. // Therefore we must override any user given width with our best guess. // SetSize( nX - GetXComp() ,nY - GetYComp() ,nWidth ,nHeight ); wxAssociateWinWithHandle( m_hWnd ,(wxWindowOS2*)this ); #if 0 // FIXME: // Apparently, this does not work, as it crashes in setvalue/setrange calls // What's it supposed to do anyway? ::WinSetWindowULong(GetHwnd(), QWL_USER, (LONG)this); fnWndProcSpinCtrl = (WXFARPROC)::WinSubclassWindow(m_hWnd, (PFNWP)wxSpinCtrlWndProc); #endif return TRUE; } // end of wxSpinButton::Create
bool wxButton::Create( wxWindow* pParent, wxWindowID vId, const wxString& rsLbl, const wxPoint& rPos, const wxSize& rSize, long lStyle, const wxValidator& rValidator, const wxString& rsName) { wxString rsLabel(rsLbl); if (rsLabel.empty() && wxIsStockID(vId)) rsLabel = wxGetStockLabel(vId); wxString sLabel = ::wxPMTextToLabel(rsLabel); SetName(rsName); #if wxUSE_VALIDATORS SetValidator(rValidator); #endif m_windowStyle = lStyle; pParent->AddChild((wxButton *)this); if (vId == -1) m_windowId = NewControlId(); else m_windowId = vId; lStyle = WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON; // // OS/2 PM does not have Right/Left/Top/Bottom styles. // We will have to define an additional style when we implement notebooks // for a notebook page button // if (m_windowStyle & wxCLIP_SIBLINGS ) lStyle |= WS_CLIPSIBLINGS; m_hWnd = (WXHWND)::WinCreateWindow( GetHwndOf(pParent) // Parent handle ,WC_BUTTON // A Button class window ,(PSZ)sLabel.c_str() // Button text ,lStyle // Button style ,0, 0, 0, 0 // Location and size ,GetHwndOf(pParent) // Owner handle ,HWND_TOP // Top of Z-Order ,vId // Identifier ,NULL // No control data ,NULL // No Presentation parameters ); if (m_hWnd == 0) { return false; } // // Subclass again for purposes of dialog editing mode // SubclassWin(m_hWnd); wxFont* pButtonFont = new wxFont( 8 ,wxSWISS ,wxNORMAL ,wxNORMAL ); SetFont(*pButtonFont); SetXComp(0); SetYComp(0); SetSize( rPos.x ,rPos.y ,rSize.x ,rSize.y ); delete pButtonFont; return true; } // end of wxButton::Create
bool wxSpinCtrl::Create( wxWindow* pParent, wxWindowID vId, const wxString& WXUNUSED(rsValue), const wxPoint& rPos, const wxSize& rSize, long lStyle, int nMin, int nMax, int nInitial, const wxString& rsName ) { if (vId == wxID_ANY) m_windowId = NewControlId(); else m_windowId = vId; m_backgroundColour = pParent->GetBackgroundColour(); m_foregroundColour = pParent->GetForegroundColour(); SetName(rsName); SetParent(pParent); m_windowStyle = lStyle; int lSstyle = 0L; lSstyle = WS_VISIBLE | WS_TABSTOP | SPBS_MASTER | // We use only single field spin buttons SPBS_NUMERICONLY; // We default to numeric data if (m_windowStyle & wxCLIP_SIBLINGS ) lSstyle |= WS_CLIPSIBLINGS; SPBCDATA vCtrlData; vCtrlData.cbSize = sizeof(SPBCDATA); vCtrlData.ulTextLimit = 10L; vCtrlData.lLowerLimit = 0L; vCtrlData.lUpperLimit = 100L; vCtrlData.idMasterSpb = vId; vCtrlData.pHWXCtlData = NULL; m_hWnd = (WXHWND)::WinCreateWindow( GetWinHwnd(pParent) ,WC_SPINBUTTON ,(PSZ)NULL ,lSstyle ,0L, 0L, 0L, 0L ,GetWinHwnd(pParent) ,HWND_TOP ,(HMENU)vId ,(PVOID)&vCtrlData ,NULL ); if (m_hWnd == 0) { return false; } m_hWndBuddy = m_hWnd; // One in the same for OS/2 if(pParent) pParent->AddChild((wxSpinButton *)this); SetFont(*wxSMALL_FONT); SetXComp(0); SetYComp(0); SetSize( rPos.x, rPos.y, rSize.x, rSize.y ); SetRange(nMin, nMax); SetValue(nInitial); // // For OS/2 we'll just set our handle into our long data // wxAssociateWinWithHandle( m_hWnd ,(wxWindowOS2*)this ); ::WinSetWindowULong(GetHwnd(), QWL_USER, (LONG)this); fnWndProcSpinCtrl = (WXFARPROC)::WinSubclassWindow(m_hWnd, (PFNWP)wxSpinCtrlWndProc); m_svAllSpins.Add(this); return true; } // end of wxSpinCtrl::Create
bool wxStaticText::Create( wxWindow* pParent , wxWindowID vId , const wxString& rsLabel , const wxPoint& rPos , const wxSize& rSize , long lStyle , const wxString& rsName ) { SetName(rsName); if (pParent) pParent->AddChild(this); SetBackgroundColour(pParent->GetBackgroundColour()) ; SetForegroundColour(pParent->GetForegroundColour()) ; if ( vId == -1 ) m_windowId = (int)NewControlId(); else m_windowId = vId; int nX = rPos.x; int nY = rPos.y; int nWidth = rSize.x; int nHeight = rSize.y; m_windowStyle = lStyle; long lSstyle = 0L; lSstyle = WS_VISIBLE | SS_TEXT | DT_VCENTER | DT_MNEMONIC; if (m_windowStyle & wxALIGN_CENTRE) lSstyle |= DT_CENTER; else if (m_windowStyle & wxALIGN_RIGHT) lSstyle |= DT_RIGHT; else lSstyle |= DT_LEFT; wxString sLabel = ::wxPMTextToLabel(rsLabel); m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle ,WC_STATIC // Window class ,(PSZ)sLabel.c_str() // Initial Text ,(ULONG)lSstyle // Style flags ,0L, 0L, 0L, 0L // Origin -- 0 size ,(HWND)GetHwndOf(pParent) // owner window handle (same as parent ,HWND_TOP // initial z position ,(ULONG)m_windowId // Window identifier ,NULL // no control data ,NULL // no Presentation parameters ); wxCHECK_MSG(m_hWnd, FALSE, wxT("Failed to create static ctrl")); wxColour vColour; vColour.Set(wxString(wxT("BLACK"))); LONG lColor = (LONG)vColour.GetPixel(); ::WinSetPresParam( m_hWnd ,PP_FOREGROUNDCOLOR ,sizeof(LONG) ,(PVOID)&lColor ); lColor = (LONG)m_backgroundColour.GetPixel(); ::WinSetPresParam( m_hWnd ,PP_BACKGROUNDCOLOR ,sizeof(LONG) ,(PVOID)&lColor ); SubclassWin(m_hWnd); SetFont(*wxSMALL_FONT); SetXComp(0); SetYComp(0); SetSize( nX ,nY ,nWidth ,nHeight ); return TRUE; } // end of wxStaticText::Create
bool wxTextCtrl::Create( wxWindow* pParent , wxWindowID vId , const wxString& rsValue , const wxPoint& rPos , const wxSize& rSize , long lStyle , const wxValidator& rValidator , const wxString& rsName ) { // // Base initialization // if ( !CreateBase( pParent ,vId ,rPos ,rSize ,lStyle ,rValidator ,rsName )) return false; wxPoint vPos = rPos; // The OS/2 position SWP vSwp; if (pParent ) { pParent->AddChild(this); } m_windowStyle = lStyle; m_bIsMLE = false; m_bSkipUpdate = false; long lSstyle = WS_VISIBLE | WS_TABSTOP; // // Single and multiline edit fields are two different controls in PM // if ( m_windowStyle & wxTE_MULTILINE ) { lSstyle |= MLS_BORDER | MLS_WORDWRAP; m_bIsMLE = true; if ((m_windowStyle & wxTE_NO_VSCROLL) == 0) lSstyle |= MLS_VSCROLL; if (m_windowStyle & wxHSCROLL) lSstyle |= MLS_HSCROLL; if (m_windowStyle & wxTE_READONLY) lSstyle |= MLS_READONLY; } else { lSstyle |= ES_LEFT | ES_AUTOSCROLL | ES_MARGIN; if (m_windowStyle & wxHSCROLL) lSstyle |= ES_AUTOSCROLL; if (m_windowStyle & wxTE_READONLY) lSstyle |= ES_READONLY; if (m_windowStyle & wxTE_PASSWORD) // hidden input lSstyle |= ES_UNREADABLE; } if (m_bIsMLE) { m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle ,WC_MLE // Window class ,(PSZ)rsValue.c_str() // Initial Text ,(ULONG)lSstyle // Style flags ,(LONG)0 // X pos of origin ,(LONG)0 // Y pos of origin ,(LONG)0 // field width ,(LONG)0 // field height ,(HWND)GetHwndOf(pParent) // owner window handle (same as parent ,HWND_TOP // initial z position ,(ULONG)vId // Window identifier ,NULL // no control data ,NULL // no Presentation parameters ); } else { m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle ,WC_ENTRYFIELD // Window class ,(PSZ)rsValue.c_str() // Initial Text ,(ULONG)lSstyle // Style flags ,(LONG)0 // X pos of origin ,(LONG)0 // Y pos of origin ,(LONG)0 // field width ,(LONG)0 // field height ,(HWND)GetHwndOf(pParent) // owner window handle (same as parent ,HWND_TOP // initial z position ,(ULONG)vId // Window identifier ,NULL // no control data ,NULL // no Presentation parameters ); } if (m_hWnd == 0) { return false; } SubclassWin(GetHWND()); // // Set font, position, size and initial value // wxFont* pTextFont = new wxFont( 8 ,wxMODERN ,wxNORMAL ,wxNORMAL ); SetFont(*pTextFont); if (!rsValue.empty()) { SetValue(rsValue); } SetupColours(); // // If X and/or Y are not zero the difference is the compensation value // for margins for OS/2 controls. // ::WinQueryWindowPos(m_hWnd, &vSwp); SetXComp(vSwp.x); SetYComp(vSwp.y); SetSize( vPos.x - GetXComp() ,vPos.y - GetYComp() ,rSize.x ,rSize.y ); delete pTextFont; return true; } // end of wxTextCtrl::Create
bool wxGauge::Create( wxWindowOS2* pParent, wxWindowID vId, int nRange, const wxPoint& rPos, const wxSize& rSize, long lStyle, const wxValidator& rValidator, const wxString& rsName ) { int nX = rPos.x; int nY = rPos.y; int nWidth = rSize.x; int nHeight = rSize.y; long lMsStyle = 0L; SWP vSwp; SetName(rsName); #if wxUSE_VALIDATORS SetValidator(rValidator); #endif if (pParent) pParent->AddChild(this); m_backgroundColour.Set(wxString(wxT("LIGHT GREY"))); m_foregroundColour.Set(wxString(wxT("NAVY"))); m_nRangeMax = nRange; m_nGaugePos = 0; m_windowStyle = lStyle; if (vId == wxID_ANY) m_windowId = (int)NewControlId(); else m_windowId = vId; if (m_windowStyle & wxCLIP_SIBLINGS ) lMsStyle |= WS_CLIPSIBLINGS; // // OS/2 will use an edit control for this, since there is not a native gauge // Other choices include using an armless slider but they are more difficult // to control and manipulate // lMsStyle = WS_VISIBLE | ES_MARGIN | ES_LEFT | ES_READONLY; if (m_windowStyle & wxCLIP_SIBLINGS) lMsStyle |= WS_CLIPSIBLINGS; m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle ,WC_ENTRYFIELD // Window class ,(PSZ)NULL // Initial Text ,(ULONG)lMsStyle // Style flags ,0L, 0L, 0L, 0L // Origin -- 0 size ,(HWND)GetHwndOf(pParent) // owner window handle (same as parent ,HWND_TOP // initial z position ,(HMENU)m_windowId // Window identifier ,NULL // Slider control data ,NULL // no Presentation parameters ); wxAssociateWinWithHandle( m_hWnd ,(wxWindowOS2*)this ); ::WinSetWindowULong(GetHwnd(), QWL_USER, (LONG)this); fnWndProcGauge = (WXFARPROC)::WinSubclassWindow(m_hWnd, (PFNWP)wxGaugeWndProc); ::WinQueryWindowPos(m_hWnd, &vSwp); SetXComp(vSwp.x); SetYComp(vSwp.y); wxFont* pTextFont = new wxFont( 10 ,wxMODERN ,wxNORMAL ,wxNORMAL ); SetFont(*pTextFont); if (nWidth == -1L) nWidth = 50L; if (nHeight == -1L) nHeight = 28L; SetSize( nX ,nY ,nWidth ,nHeight ); m_nWidth = nWidth; // Save for GetBestSize m_nHeight = nHeight; ::WinShowWindow((HWND)GetHWND(), TRUE); delete pTextFont; return true; } // end of wxGauge::Create
bool wxStaticText::Create( wxWindow* pParent, wxWindowID vId, const wxString& rsLabel, const wxPoint& rPos, const wxSize& rSize, long lStyle, const wxString& rsName ) { SetName(rsName); if (pParent) pParent->AddChild(this); SetBackgroundColour(pParent->GetBackgroundColour()) ; SetForegroundColour(pParent->GetForegroundColour()) ; if ( vId == wxID_ANY ) m_windowId = (int)NewControlId(); else m_windowId = vId; int nX = rPos.x; int nY = rPos.y; int nWidth = rSize.x; int nHeight = rSize.y; m_windowStyle = lStyle; long lSstyle = 0L; // Used to have DT_VCENTER but that doesn't work correctly with // multiline strings and DT_WORDBREAK. Accept a reasonable // compromise for now lSstyle = WS_VISIBLE | SS_TEXT | DT_WORDBREAK | DT_MNEMONIC; if (m_windowStyle & wxALIGN_CENTRE) lSstyle |= DT_CENTER; else if (m_windowStyle & wxALIGN_RIGHT) lSstyle |= DT_RIGHT; else lSstyle |= DT_LEFT; m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle ,WC_STATIC // Window class ,NULL // Initial Text ,(ULONG)lSstyle // Style flags ,0L, 0L, 0L, 0L // Origin -- 0 size ,(HWND)GetHwndOf(pParent) // owner window handle (same as parent ,HWND_TOP // initial z position ,(ULONG)m_windowId // Window identifier ,NULL // no control data ,NULL // no Presentation parameters ); wxCHECK_MSG(m_hWnd, false, wxT("Failed to create static ctrl")); LONG lColor = (LONG)wxBLACK->GetPixel(); ::WinSetPresParam( m_hWnd ,PP_FOREGROUNDCOLOR ,sizeof(LONG) ,(PVOID)&lColor ); lColor = (LONG)m_backgroundColour.GetPixel(); ::WinSetPresParam( m_hWnd ,PP_BACKGROUNDCOLOR ,sizeof(LONG) ,(PVOID)&lColor ); SubclassWin(m_hWnd); SetFont(*wxSMALL_FONT); SetXComp(0); SetYComp(0); SetSize( nX, nY, nWidth, nHeight ); SetLabel(rsLabel); return true; } // end of wxStaticText::Create
bool wxRadioBox::Create( wxWindow* pParent, wxWindowID vId, const wxString& rsTitle, const wxPoint& rPos, const wxSize& rSize, int nNum, const wxString asChoices[], int nMajorDim, long lStyle, const wxValidator& rVal, const wxString& rsName ) { wxColour vColour(*wxBLACK); LONG lColor; HWND hWndParent = GetHwndOf(pParent); m_backgroundColour = pParent->GetBackgroundColour(); m_nSelectedButton = -1; m_nNoItems = 0; // // Common initialization // if (!CreateControl( pParent ,vId ,rPos ,rSize ,lStyle ,rVal ,rsName )) return false; if (!OS2CreateControl( wxT("STATIC") ,SS_GROUPBOX ,rPos ,rSize ,rsTitle )) return false; wxAssociateWinWithHandle(m_hWnd, this); // // Now we can set m_nNoItems and let SetMajorDim set m_numCols/m_numRows // m_nNoItems = (unsigned int)nNum; SetMajorDim(nMajorDim == 0 ? nNum : nMajorDim, lStyle); m_ahRadioButtons = new WXHWND[nNum]; m_pnRadioWidth = new int[nNum]; m_pnRadioHeight = new int[nNum]; for (int i = 0; i < nNum; i++) { m_pnRadioWidth[i] = m_pnRadioHeight[i] = -1; long lStyleBtn = BS_AUTORADIOBUTTON | WS_VISIBLE; int nNewId = NewControlId(); if (i == 0) lStyleBtn |= WS_GROUP | WS_TABSTOP; wxString sLabel = ::wxPMTextToLabel(asChoices[i]); HWND hWndBtn = (WXHWND)::WinCreateWindow ( hWndParent, WC_BUTTON, sLabel.c_str(), lStyleBtn, 0, 0, 0, 0, hWndParent, HWND_BOTTOM, (HMENU)nNewId, NULL, NULL ); if (!hWndBtn) { return false; } lColor = (LONG)vColour.GetPixel(); ::WinSetPresParam( hWndBtn ,PP_FOREGROUNDCOLOR ,sizeof(LONG) ,(PVOID)&lColor ); lColor = (LONG)m_backgroundColour.GetPixel(); ::WinSetPresParam( hWndBtn ,PP_BACKGROUNDCOLOR ,sizeof(LONG) ,(PVOID)&lColor ); m_ahRadioButtons[i] = (WXHWND)hWndBtn; SubclassRadioButton((WXHWND)hWndBtn); wxAssociateWinWithHandle(hWndBtn, this); wxOS2SetFont( hWndBtn ,*wxSMALL_FONT ); ::WinSetWindowULong(hWndBtn, QWL_USER, (ULONG)this); m_aSubControls.Add(nNewId); } // // Create a dummy control to end the group. // (void)::WinCreateWindow ( hWndParent, WC_BUTTON, "", WS_GROUP, 0, 0, 0, 0, hWndParent, HWND_TOP, (HMENU)NewControlId(), NULL, NULL ); fnWndProcRadioBox = (WXFARPROC)::WinSubclassWindow( GetHwnd() ,(PFNWP)wxRadioBoxWndProc ); ::WinSetWindowULong(GetHwnd(), QWL_USER, (ULONG)this); lColor = (LONG)vColour.GetPixel(); ::WinSetPresParam( m_hWnd ,PP_FOREGROUNDCOLOR ,sizeof(LONG) ,(PVOID)&lColor ); lColor = (LONG)m_backgroundColour.GetPixel(); ::WinSetPresParam( m_hWnd ,PP_BACKGROUNDCOLOR ,sizeof(LONG) ,(PVOID)&lColor ); SetXComp(0); SetYComp(0); SetSelection(0); SetSize( rPos.x ,rPos.y ,rSize.x ,rSize.y ); return true; } // end of wxRadioBox::Create
bool wxListBox::Create( wxWindow* pParent, wxWindowID vId, const wxPoint& rPos, const wxSize& rSize, int n, const wxString asChoices[], long lStyle, const wxValidator& rValidator, const wxString& rsName ) { m_nNumItems = 0; m_hWnd = 0; m_nSelected = 0; SetName(rsName); #if wxUSE_VALIDATORS SetValidator(rValidator); #endif if (pParent) pParent->AddChild(this); wxSystemSettings vSettings; SetBackgroundColour(vSettings.GetColour(wxSYS_COLOUR_WINDOW)); SetForegroundColour(pParent->GetForegroundColour()); m_windowId = (vId == -1) ? (int)NewControlId() : vId; int nX = rPos.x; int nY = rPos.y; int nWidth = rSize.x; int nHeight = rSize.y; m_windowStyle = lStyle; lStyle = WS_VISIBLE; if (m_windowStyle & wxCLIP_SIBLINGS ) lStyle |= WS_CLIPSIBLINGS; if (m_windowStyle & wxLB_MULTIPLE) lStyle |= LS_MULTIPLESEL; else if (m_windowStyle & wxLB_EXTENDED) lStyle |= LS_EXTENDEDSEL; if (m_windowStyle & wxLB_HSCROLL) lStyle |= LS_HORZSCROLL; if (m_windowStyle & wxLB_OWNERDRAW) lStyle |= LS_OWNERDRAW; // // Without this style, you get unexpected heights, so e.g. constraint layout // doesn't work properly // lStyle |= LS_NOADJUSTPOS; m_hWnd = (WXHWND)::WinCreateWindow( GetWinHwnd(pParent) // Parent ,WC_LISTBOX // Default Listbox class ,"LISTBOX" // Control's name ,lStyle // Initial Style ,0, 0, 0, 0 // Position and size ,GetWinHwnd(pParent) // Owner ,HWND_TOP // Z-Order ,(HMENU)m_windowId // Id ,NULL // Control Data ,NULL // Presentation Parameters ); if (m_hWnd == 0) { return false; } // // Subclass again for purposes of dialog editing mode // SubclassWin(m_hWnd); LONG lUi; for (lUi = 0; lUi < (LONG)n; lUi++) { Append(asChoices[lUi]); } wxFont* pTextFont = new wxFont( 10 ,wxMODERN ,wxNORMAL ,wxNORMAL ); SetFont(*pTextFont); // // Set OS/2 system colours for Listbox items and highlighting // wxColour vColour; vColour = wxSystemSettingsNative::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT); LONG lColor = (LONG)vColour.GetPixel(); ::WinSetPresParam( m_hWnd ,PP_HILITEFOREGROUNDCOLOR ,sizeof(LONG) ,(PVOID)&lColor ); vColour = wxSystemSettingsNative::GetColour(wxSYS_COLOUR_HIGHLIGHT); lColor = (LONG)vColour.GetPixel(); ::WinSetPresParam( m_hWnd ,PP_HILITEBACKGROUNDCOLOR ,sizeof(LONG) ,(PVOID)&lColor ); SetXComp(0); SetYComp(0); SetSize( nX ,nY ,nWidth ,nHeight ); delete pTextFont; return true; } // end of wxListBox::Create
bool wxControl::OS2CreateControl( const wxChar* zClassname, WXDWORD dwStyle, const wxPoint& rPos, const wxSize& rSize, const wxString& rsLabel, WXDWORD dwExstyle ) { // // Doesn't do anything at all under OS/2 // if (dwExstyle == (WXDWORD)-1) { dwExstyle = 0; (void) OS2GetStyle(GetWindowStyle(), &dwExstyle); } // // All controls should have these styles (wxWidgets creates all controls // visible by default) // if (m_isShown ) dwStyle |= WS_VISIBLE; wxWindow* pParent = GetParent(); PSZ zClass = ""; if (!pParent) return false; if ((wxStrcmp(zClassname, _T("COMBOBOX"))) == 0) zClass = WC_COMBOBOX; else if ((wxStrcmp(zClassname, _T("STATIC"))) == 0) zClass = WC_STATIC; else if ((wxStrcmp(zClassname, _T("BUTTON"))) == 0) zClass = WC_BUTTON; else if ((wxStrcmp(zClassname, _T("NOTEBOOK"))) == 0) zClass = WC_NOTEBOOK; else if ((wxStrcmp(zClassname, _T("CONTAINER"))) == 0) zClass = WC_CONTAINER; if ((zClass == WC_STATIC) || (zClass == WC_BUTTON)) dwStyle |= DT_MNEMONIC; m_dwStyle = dwStyle; m_label = rsLabel; wxString label; if (dwStyle & DT_MNEMONIC) label = ::wxPMTextToLabel(m_label); else label = m_label; // clipping siblings does not yet work dwStyle &= ~WS_CLIPSIBLINGS; m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle ,(PSZ)zClass // Window class ,(PSZ)label.c_str() // Initial Text ,(ULONG)dwStyle // Style flags ,(LONG)0 // X pos of origin ,(LONG)0 // Y pos of origin ,(LONG)0 // control width ,(LONG)0 // control height ,(HWND)GetHwndOf(pParent) // owner window handle (same as parent ,HWND_TOP // initial z position ,(ULONG)GetId() // Window identifier ,NULL // no control data ,NULL // no Presentation parameters ); if ( !m_hWnd ) { #ifdef __WXDEBUG__ wxLogError(wxT("Failed to create a control of class '%s'"), zClassname); #endif // DEBUG return false; } // // Subclass again for purposes of dialog editing mode // SubclassWin(m_hWnd); // // Controls use the same colours as their parent dialog by default // InheritAttributes(); // // All OS/2 ctrls use the small font // SetFont(*wxSMALL_FONT); SetXComp(0); SetYComp(0); SetSize( rPos.x, rPos.y, rSize.x, rSize.y ); return true; } // end of wxControl::OS2CreateControl