From: David Webster Date: Mon, 7 Jan 2002 00:49:10 +0000 (+0000) Subject: OS/2 scrolling support for controls X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/5d44b24ee63543390aa28e1eb4ff162da4264838?hp=bdb2ce96bbccfe70bf8d5570619b00195db7663b OS/2 scrolling support for controls git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13430 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/os2/button.cpp b/src/os2/button.cpp index 3c1331876b..f77b45338a 100644 --- a/src/os2/button.cpp +++ b/src/os2/button.cpp @@ -70,6 +70,15 @@ bool wxButton::Create( // if (m_windowStyle & wxCLIP_SIBLINGS ) lStyle |= WS_CLIPSIBLINGS; + // + // If the parent is a scrolled window the controls must + // have this style or they will overlap the scrollbars + // + if (pParent) + if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) || + pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow))) + lStyle |= WS_CLIPSIBLINGS; + m_hWnd = (WXHWND)::WinCreateWindow( GetHwndOf(pParent) // Parent handle ,WC_BUTTON // A Button class window ,(PSZ)rsLabel.c_str() // Button text diff --git a/src/os2/checkbox.cpp b/src/os2/checkbox.cpp index 9f5c9663b8..0101e79a0c 100644 --- a/src/os2/checkbox.cpp +++ b/src/os2/checkbox.cpp @@ -34,52 +34,90 @@ IMPLEMENT_DYNAMIC_CLASS(wxBitmapCheckBox, wxCheckBox) // wxCheckBox // ---------------------------------------------------------------------------- -bool wxCheckBox::OS2Command(WXUINT WXUNUSED(param), WXWORD WXUNUSED(id)) +bool wxCheckBox::OS2Command( + WXUINT WXUNUSED(uParam) +, WXWORD WXUNUSED(wId) +) { - wxCommandEvent event(wxEVT_COMMAND_CHECKBOX_CLICKED, m_windowId); - event.SetInt(GetValue()); - event.SetEventObject(this); - ProcessCommand(event); + wxCommandEvent rEvent( wxEVT_COMMAND_CHECKBOX_CLICKED + ,m_windowId + ); + rEvent.SetInt(GetValue()); + rEvent.SetEventObject(this); + ProcessCommand(rEvent); return TRUE; -} - -// Single check box item -bool wxCheckBox::Create(wxWindow *parent, wxWindowID id, const wxString& label, - const wxPoint& pos, - const wxSize& size, long style, +} // end of wxCheckBox::OS2Command + +bool wxCheckBox::Create( + wxWindow* pParent +, wxWindowID vId +, const wxString& rsLabel +, const wxPoint& rPos +, const wxSize& rSize +, long lStyle #if wxUSE_VALIDATORS - const wxValidator& validator, +, const wxValidator& rValidator #endif - const wxString& name) +, const wxString& rsName +) { - SetName(name); + SetName(rsName); #if wxUSE_VALIDATORS - SetValidator(validator); + SetValidator(rValidator); #endif - if (parent) parent->AddChild(this); + if (pParent) + pParent->AddChild(this); - SetBackgroundColour(parent->GetBackgroundColour()) ; - SetForegroundColour(parent->GetForegroundColour()) ; + SetBackgroundColour(pParent->GetBackgroundColour()); + SetForegroundColour(pParent->GetForegroundColour()); + m_windowStyle = lStyle; - m_windowStyle = style; + wxString sLabel = rsLabel; - wxString Label = label; - if (Label == wxT("")) - Label = wxT(" "); // Apparently needed or checkbox won't show + if (sLabel == wxT("")) + sLabel = wxT(" "); // Apparently needed or checkbox won't show - if ( id == -1 ) + if (vId == -1 ) m_windowId = NewControlId(); else - m_windowId = id; - - int x = pos.x; - int y = pos.y; - int width = size.x; - int height = size.y; - - // TODO: create checkbox - + m_windowId = vId; + + int nX = rPos.x; + int nY = rPos.y; + int nWidth = rSize.x; + int nHeight = rSize.y; + long lSstyle = 0L; + + lSstyle = BS_AUTOCHECKBOX | + WS_TABSTOP | + WS_VISIBLE; + if (lStyle & wxCLIP_SIBLINGS ) + lSstyle |= WS_CLIPSIBLINGS; + + // + // If the parent is a scrolled window the controls must + // have this style or they will overlap the scrollbars + // + if (pParent) + if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) || + pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow))) + lSstyle |= WS_CLIPSIBLINGS; + + m_hWnd = (WXHWND)::WinCreateWindow ( GetHwndOf(pParent) + ,WC_BUTTON + ,rsLabel.c_str() + ,lSstyle + ,0, 0, 0, 0 + ,GetWinHwnd(pParent) + ,HWND_TOP + ,(HMENU)m_windowId + ,NULL + ,NULL + ); + + // // Subclass again for purposes of dialog editing mode + // SubclassWin(m_hWnd); LONG lColor = (LONG)m_backgroundColour.GetPixel(); @@ -90,45 +128,73 @@ bool wxCheckBox::Create(wxWindow *parent, wxWindowID id, const wxString& label, ,(PVOID)&lColor ); - SetFont(parent->GetFont()); - - SetSize(x, y, width, height); + SetFont(pParent->GetFont()); - return FALSE; -} + SetSize( nX + ,nY + ,nWidth + ,nHeight + ); + return TRUE; +} // end of wxCheckBox::Create -void wxCheckBox::SetLabel(const wxString& label) +void wxCheckBox::SetLabel( + const wxString& rsLabel +) { - // TODO -} + ::WinSetWindowText(GetHwnd(), rsLabel.c_str()); +} // end of wxCheckBox::SetLabel wxSize wxCheckBox::DoGetBestSize() const { - int wCheckbox, hCheckbox; + static int nCheckSize = 0; + + if (!nCheckSize) + { + wxScreenDC vDc; + + vDc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT)); + + // + // The height of a standard button in the dialog units is 8, + // translate this to pixels (as one dialog unit is precisely equal to + // 8 character heights, it's just the char height) + // + nCheckSize = vDc.GetCharHeight(); + } - wxString str = wxGetWindowText(GetHWND()); + int nWidthCheckbox; + int nHeightCheckbox; + wxString sStr = wxGetWindowText(GetHWND()); - if ( !str.IsEmpty() ) + if (!sStr.IsEmpty()) { - GetTextExtent(str, &wCheckbox, &hCheckbox); - wCheckbox += RADIO_SIZE; + GetTextExtent( sStr + ,&nWidthCheckbox + ,&nHeightCheckbox + ); + nWidthCheckbox += nCheckSize + GetCharWidth(); - if ( hCheckbox < RADIO_SIZE ) - hCheckbox = RADIO_SIZE; + if (nHeightCheckbox < nCheckSize) + nHeightCheckbox = nCheckSize; } else { - wCheckbox = RADIO_SIZE; - hCheckbox = RADIO_SIZE; + nWidthCheckbox = nCheckSize; + nHeightCheckbox = nCheckSize; } - return wxSize(wCheckbox, hCheckbox); -} + return wxSize( nWidthCheckbox + ,nHeightCheckbox + ); +} // end of wxCheckBox::DoGetBestSize -void wxCheckBox::SetValue(bool val) +void wxCheckBox::SetValue( + bool bValue +) { - // TODO -} + ::WinSendMsg(GetHwnd(), BM_SETCHECK, (MPARAM)bValue, 0); +} // end of wxCheckBox::SetValue #ifndef BST_CHECKED #define BST_CHECKED 0x0001 @@ -136,101 +202,82 @@ void wxCheckBox::SetValue(bool val) bool wxCheckBox::GetValue() const { - // TODO - return FALSE; -} + return((LONGFROMMR(::WinSendMsg(GetHwnd(), BM_QUERYCHECK, (MPARAM)0, (MPARAM)0)) == 1L)); +} // end of wxCheckBox::GetValue -WXHBRUSH wxCheckBox::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, - WXUINT message, WXWPARAM wParam, WXLPARAM lParam) +void wxCheckBox::Command ( + wxCommandEvent& rEvent +) { - // TODO: - /* -#if wxUSE_CTL3D - if ( m_useCtl3D ) - { - HBRUSH hbrush = Ctl3dCtlColorEx(message, wParam, lParam); - - return (WXHBRUSH) hbrush; - } -#endif - - if (GetParent()->GetTransparentBackground()) - SetBkMode((HDC) pDC, TRANSPARENT); - else - SetBkMode((HDC) pDC, OPAQUE); - - ::SetBkColor((HDC) pDC, RGB(GetBackgroundColour().Red(), GetBackgroundColour().Green(), GetBackgroundColour().Blue())); - ::SetTextColor((HDC) pDC, RGB(GetForegroundColour().Red(), GetForegroundColour().Green(), GetForegroundColour().Blue())); - -*/ - - wxBrush *backgroundBrush = wxTheBrushList->FindOrCreateBrush(GetBackgroundColour(), wxSOLID); - - - // Note that this will be cleaned up in wxApp::OnIdle, if backgroundBrush - // has a zero usage count. -// backgroundBrush->RealizeResource(); - return (WXHBRUSH) backgroundBrush->GetResourceHandle(); -} - -void wxCheckBox::Command (wxCommandEvent & event) -{ - SetValue ((event.GetInt() != 0)); - ProcessCommand (event); -} + SetValue((rEvent.GetInt() != 0)); + ProcessCommand(rEvent); +} // end of wxCheckBox:: Command // ---------------------------------------------------------------------------- // wxBitmapCheckBox // ---------------------------------------------------------------------------- -bool wxBitmapCheckBox::Create(wxWindow *parent, wxWindowID id, const wxBitmap *label, - const wxPoint& pos, - const wxSize& size, long style, +bool wxBitmapCheckBox::Create( + wxWindow* pParent +, wxWindowID vId +, const wxBitmap* pLabel +, const wxPoint& rPos +, const wxSize& rSize +, long lStyle #if wxUSE_VALIDATORS - const wxValidator& validator, +, const wxValidator& rValidator #endif - const wxString& name) +, const wxString& rsName +) { - SetName(name); + SetName(rsName); #if wxUSE_VALIDATORS - SetValidator(validator); + SetValidator(rValidator); #endif - if (parent) parent->AddChild(this); + if (pParent) + pParent->AddChild(this); - SetBackgroundColour(parent->GetBackgroundColour()) ; - SetForegroundColour(parent->GetForegroundColour()) ; - m_windowStyle = style; + SetBackgroundColour(pParent->GetBackgroundColour()) ; + SetForegroundColour(pParent->GetForegroundColour()) ; + m_windowStyle = lStyle; - if ( id == -1 ) + if (vId == -1) m_windowId = NewControlId(); else - m_windowId = id; + m_windowId = vId; - int x = pos.x; - int y = pos.y; - int width = size.x; - int height = size.y; + int nX = rPos.x; + int nY = rPos.y; + int nWidth = rSize.x; + int nHeight = rSize.y; - checkWidth = -1 ; - checkHeight = -1 ; + m_nCheckWidth = -1 ; + m_nCheckHeight = -1 ; // long msStyle = CHECK_FLAGS; - HWND wx_button = 0; // TODO: Create the bitmap checkbox + HWND hButton = 0; // TODO: Create the bitmap checkbox - m_hWnd = (WXHWND)wx_button; + m_hWnd = (WXHWND)hButton; + // // Subclass again for purposes of dialog editing mode - SubclassWin((WXHWND)wx_button); - - SetSize(x, y, width, height); + // + SubclassWin((WXHWND)hButton); -// TODO: ShowWindow(wx_button, SW_SHOW); + SetSize( nX + ,nY + ,nWidth + ,nHeight + ); + ::WinShowWindow(hButton, TRUE); return TRUE; -} +} // end of wxBitmapCheckBox::Create -void wxBitmapCheckBox::SetLabel(const wxBitmap& bitmap) +void wxBitmapCheckBox::SetLabel( + const wxBitmap& rBitmap +) { wxFAIL_MSG(wxT("not implemented")); -} +} // end of wxBitmapCheckBox::SetLabel diff --git a/src/os2/choice.cpp b/src/os2/choice.cpp index 0597080b72..079295ab77 100644 --- a/src/os2/choice.cpp +++ b/src/os2/choice.cpp @@ -50,8 +50,8 @@ bool wxChoice::Create( )) return FALSE; lSstyle = CBS_DROPDOWNLIST | - WS_TABSTOP | - WS_VISIBLE; + WS_TABSTOP | + WS_VISIBLE; if (lStyle & wxCLIP_SIBLINGS ) lSstyle |= WS_CLIPSIBLINGS; diff --git a/src/os2/combobox.cpp b/src/os2/combobox.cpp index e062a2f24a..bf7feb6860 100644 --- a/src/os2/combobox.cpp +++ b/src/os2/combobox.cpp @@ -163,6 +163,7 @@ bool wxComboBox::Create( gfnWndprocEdit = (WXFARPROC)::WinSubclassWindow( (HWND)GetHwnd() ,(PFNWP)wxComboEditWndProc ); + ::WinSetWindowULong(GetHwnd(), QWL_USER, (ULONG)this); return TRUE; } // end of wxComboBox::Create diff --git a/src/os2/control.cpp b/src/os2/control.cpp index acf4cecf2c..f1168950f8 100644 --- a/src/os2/control.cpp +++ b/src/os2/control.cpp @@ -113,6 +113,10 @@ bool wxControl::OS2CreateControl( , WXDWORD dwExstyle ) { + int nX = rPos.x == -1 ? 0 : rPos.x; + int nY = rPos.y == -1 ? 0 : rPos.y; + int nW = rSize.x == -1 ? 0 : rSize.x; + int nH = rSize.y == -1 ? 0 : rSize.y; // // Doesn't do anything at all under OS/2 // @@ -121,37 +125,50 @@ bool wxControl::OS2CreateControl( dwExstyle = GetExStyle(dwStyle); } - if ( !m_hWnd ) - { -#ifdef __WXDEBUG__ - wxLogError(wxT("Failed to create a control of class '%s'"), zClassname); -#endif // DEBUG + wxWindow* pParent = GetParent(); + PSZ zClass; + if (!pParent) return FALSE; - } - - PSZ zClass; if ((strcmp(zClassname, "COMBOBOX")) == 0) zClass = WC_COMBOBOX; else if ((strcmp(zClassname, "STATIC")) == 0) zClass = WC_STATIC; dwStyle |= WS_VISIBLE; - m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(GetParent()) // Parent window handle - ,(PSZ)zClassname // Window class - ,(PSZ)rsLabel.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(GetParent()) // owner window handle (same as parent - ,HWND_TOP // initial z position - ,(ULONG)GetId() // Window identifier - ,NULL // no control data - ,NULL // no Presentation parameters + + // + // If the parent is a scrolled window the controls must + // have this style or they will overlap the scrollbars + // + if (pParent) + if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) || + pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow))) + dwStyle |= WS_CLIPSIBLINGS; + + m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle + ,(PSZ)zClass // Window class + ,(PSZ)rsLabel.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 // @@ -161,6 +178,8 @@ bool wxControl::OS2CreateControl( // Controls use the same font and colours as their parent dialog by default // InheritAttributes(); + if (nW == 0 || nH == 0) + SetBestSize(rSize); return TRUE; } // end of wxControl::OS2CreateControl diff --git a/src/os2/dialog.cpp b/src/os2/dialog.cpp index aff9dac015..c73062da3c 100644 --- a/src/os2/dialog.cpp +++ b/src/os2/dialog.cpp @@ -31,23 +31,18 @@ #define wxDIALOG_DEFAULT_WIDTH 500 #define wxDIALOG_DEFAULT_HEIGHT 500 -// Lists to keep track of windows, so we can disable/enable them -// for modal dialogs wxWindowList wxModalDialogs; -wxWindowList wxModelessWindows; // Frames and modeless dialogs -extern wxList WXDLLEXPORT wxPendingDelete; - IMPLEMENT_DYNAMIC_CLASS(wxDialog, wxPanel) +IMPLEMENT_DYNAMIC_CLASS(wxDialog, wxTopLevelWindow) - BEGIN_EVENT_TABLE(wxDialog, wxPanel) - EVT_SIZE(wxDialog::OnSize) - EVT_BUTTON(wxID_OK, wxDialog::OnOK) - EVT_BUTTON(wxID_APPLY, wxDialog::OnApply) - EVT_BUTTON(wxID_CANCEL, wxDialog::OnCancel) - EVT_CHAR_HOOK(wxDialog::OnCharHook) - EVT_SYS_COLOUR_CHANGED(wxDialog::OnSysColourChanged) - EVT_CLOSE(wxDialog::OnCloseWindow) - END_EVENT_TABLE() +BEGIN_EVENT_TABLE(wxDialog, wxTopLevelWindow) + EVT_BUTTON(wxID_OK, wxDialog::OnOK) + EVT_BUTTON(wxID_APPLY, wxDialog::OnApply) + EVT_BUTTON(wxID_CANCEL, wxDialog::OnCancel) + EVT_CHAR_HOOK(wxDialog::OnCharHook) + EVT_SYS_COLOUR_CHANGED(wxDialog::OnSysColourChanged) + EVT_CLOSE(wxDialog::OnCloseWindow) +END_EVENT_TABLE() void wxDialog::Init() { @@ -76,64 +71,27 @@ bool wxDialog::Create( HWND hWnd; Init(); - m_pOldFocus = (wxWindow*)FindFocus(); - SetName(rsName); - wxTopLevelWindows.Append(this); - if (pParent) - pParent->AddChild(this); - if (vId == -1) - m_windowId = NewControlId(); - else - m_windowId = vId; - if (lX < 0) - lX = wxDIALOG_DEFAULT_X; - if (lY < 0) - lY = wxDIALOG_DEFAULT_Y; - m_windowStyle = lStyle; - if (lWidth < 0) - lWidth = wxDIALOG_DEFAULT_WIDTH; - if (lHeight < 0) - lHeight = wxDIALOG_DEFAULT_HEIGHT; + SetExtraStyle(GetExtraStyle() | wxTOPLEVEL_EX_DIALOG); // - // All dialogs should really have this style + // Save focus before doing anything which can potentially change it // - m_windowStyle |= wxTAB_TRAVERSAL; + m_pOldFocus = FindFocus(); // - // Allows creation of dialogs with & without captions under MSWindows, - // resizeable or not (but a resizeable dialog always has caption - - // otherwise it would look too strange) + // All dialogs should really have this style // - if (lStyle & wxRESIZE_BORDER ) - zDlg = "wxResizeableDialog"; - else if (lStyle & wxCAPTION ) - zDlg = "wxCaptionDialog"; - else - zDlg = "wxNoCaptionDialog"; - OS2Create( GetWinHwnd(pParent) - ,NULL - ,rsTitle.c_str() - ,0L - ,lX - ,lY - ,lWidth - ,lHeight - ,GetWinHwnd(pParent) - ,HWND_TOP - ,(long)m_windowId - ,NULL - ,NULL - ); - hWnd = (HWND)GetHWND(); - if (!hWnd) - { + lStyle |= wxTAB_TRAVERSAL; + + if (!wxTopLevelWindow::Create( pParent + ,vId + ,rsTitle + ,rPos + ,rSize + ,lStyle + ,rsName + )) return FALSE; - } - SubclassWin(GetHWND()); - ::WinSetWindowText( hWnd - ,(PSZ)rsTitle.c_str() - ); SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT)); return TRUE; } // end of wxDialog::Create @@ -143,35 +101,21 @@ void wxDialog::SetModal( ) { if (bFlag) + { m_windowStyle |= wxDIALOG_MODAL ; - else if ( m_windowStyle & wxDIALOG_MODAL ) - m_windowStyle -= wxDIALOG_MODAL ; - - wxModelessWindows.DeleteObject(this); - if (!bFlag) - wxModelessWindows.Append(this); + wxModelessWindows.DeleteObject(this); + } + else + { + m_windowStyle &= ~wxDIALOG_MODAL ; + wxModelessWindows.Append(this); + } } // end of wxDialog::SetModal wxDialog::~wxDialog() { m_isBeingDeleted = TRUE; - wxTopLevelWindows.DeleteObject(this); Show(FALSE); - if (!IsModal()) - wxModelessWindows.DeleteObject(this); - - // - // If this is the last top-level window, exit. - // - if (wxTheApp && (wxTopLevelWindows.Number() == 0)) - { - wxTheApp->SetTopWindow(NULL); - - if (wxTheApp->GetExitOnFrameDelete()) - { - ::WinPostMsg(GetHwnd(), WM_QUIT, 0, 0); - } - } } // end of wxDialog::~wxDialog // @@ -208,64 +152,9 @@ void wxDialog::OnCharHook( rEvent.Skip(); } -void wxDialog::Iconize( - bool WXUNUSED(bIconize) -) -{ -} // end of wxDialog::Iconize - -bool wxDialog::IsIconized() const -{ - return FALSE; -} // end of wxDialog::IsIconized - -void wxDialog::DoSetClientSize( - int nWidth -, int nHeight -) -{ - HWND hWnd = (HWND) GetHWND(); - RECTL vRect; - RECTL vRect2; - - ::WinQueryWindowRect(hWnd, &vRect); - ::WinQueryWindowRect(hWnd, &vRect2); - - LONG lActualWidth = vRect2.xRight - vRect2.xLeft - vRect.xRight + nWidth; - LONG lActualHeight = vRect2.yTop + vRect2.yTop - vRect.yTop + nHeight; - - ::WinSetWindowPos( GetHwnd() - ,HWND_TOP - ,(LONG)vRect2.xLeft - ,(LONG)vRect2.yTop - ,(LONG)lActualWidth - ,(LONG)lActualHeight - ,SWP_SIZE | SWP_MOVE - ); - - wxSizeEvent vEvent( wxSize( lActualWidth - ,lActualHeight - ) - ,m_windowId - ); - - vEvent.SetEventObject( this ); - GetEventHandler()->ProcessEvent(vEvent); -} // end of wxDialog::DoSetClientSize - -void wxDialog::DoGetPosition( - int* pnX -, int* pnY -) const -{ - RECTL vRect; - - ::WinQueryWindowRect(GetHwnd(), &vRect); - if (pnX) - *pnX = vRect.xLeft; - if (pnY) - *pnY = vRect.yBottom; // OS/2's bottom is windows' top??? -} // end of wxDialog::DoGetPosition +// ---------------------------------------------------------------------------- +// showing the dialogs +// ---------------------------------------------------------------------------- bool wxDialog::IsModal() const { @@ -407,7 +296,7 @@ bool wxDialog::Show( wxModalDialogs.DeleteObject(this); } } - return FALSE; + return TRUE; } // end of wxDialog::Show // @@ -431,6 +320,10 @@ void wxDialog::EndModal( Show(FALSE); } // end of wxDialog::EndModal +// ---------------------------------------------------------------------------- +// wxWin event handlers +// ---------------------------------------------------------------------------- + void wxDialog::OnApply( wxCommandEvent& rEvent ) @@ -495,17 +388,6 @@ void wxDialog::OnCloseWindow( closing.DeleteObject(this); } // end of wxDialog::OnCloseWindow -// -// Destroy the window (delayed, if a managed window) -// -bool wxDialog::Destroy() -{ - wxCHECK_MSG( !wxPendingDelete.Member(this), FALSE, - _T("wxDialog destroyed twice") ); - wxPendingDelete.Append(this); - return TRUE; -} // end of wxDialog::Destroy - void wxDialog::OnSysColourChanged( wxSysColourChangedEvent& rEvent ) diff --git a/src/os2/frame.cpp b/src/os2/frame.cpp index bc13037ef5..261c01de4c 100644 --- a/src/os2/frame.cpp +++ b/src/os2/frame.cpp @@ -52,7 +52,7 @@ extern wxWindowList wxModelessWindows; extern wxList WXDLLEXPORT wxPendingDelete; -extern wxChar wxFrameClassName[]; +extern const wxChar* wxFrameClassName; #if wxUSE_MENUS_NATIVE extern wxMenu *wxCurrentPopupMenu; @@ -96,39 +96,33 @@ IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow) void wxFrame::Init() { - m_bIconized = FALSE; - -#if wxUSE_TOOLTIPS - m_hWndToolTip = 0; -#endif - // Data to save/restore when calling ShowFullScreen - m_lFsStyle = 0L; - m_lFsOldWindowStyle = 0L; m_nFsStatusBarFields = 0; m_nFsStatusBarHeight = 0; m_nFsToolBarHeight = 0; - m_bFsIsMaximized = FALSE; + m_hWndToolTip = 0L; m_bWasMinimized = FALSE; - m_bFsIsShowing = FALSE; - m_bIsShown = FALSE; - m_pWinLastFocused = (wxWindow *)NULL; + m_pWinLastFocused = NULL; + + + m_frameMenuBar = NULL; + m_frameToolBar = NULL; + m_frameStatusBar = NULL; - m_hFrame = NULL; - m_hTitleBar = NULL; - m_hHScroll = NULL; - m_hVScroll = NULL; + m_hTitleBar = NULLHANDLE; + m_hHScroll = NULLHANDLE; + m_hVScroll = NULLHANDLE; // // Initialize SWP's // - memset(&m_vSwp, 0, sizeof(SWP)); - memset(&m_vSwpClient, 0, sizeof(SWP)); memset(&m_vSwpTitleBar, 0, sizeof(SWP)); memset(&m_vSwpMenuBar, 0, sizeof(SWP)); memset(&m_vSwpHScroll, 0, sizeof(SWP)); memset(&m_vSwpVScroll, 0, sizeof(SWP)); memset(&m_vSwpStatusBar, 0, sizeof(SWP)); memset(&m_vSwpToolBar, 0, sizeof(SWP)); + m_bIconized = FALSE; + } // end of wxFrame::Init bool wxFrame::Create( @@ -137,153 +131,30 @@ bool wxFrame::Create( , const wxString& rsTitle , const wxPoint& rPos , const wxSize& rSize -, long lulStyle +, long lStyle , const wxString& rsName ) { - int nX = rPos.x; - int nY = rPos.y; - int nWidth = rSize.x; - int nHeight = rSize.y; - bool bOk = FALSE; - - SetName(rsName); - m_windowStyle = lulStyle; - m_frameMenuBar = NULL; -#if wxUSE_TOOLBAR - m_frameToolBar = NULL; -#endif //wxUSE_TOOLBAR - -#if wxUSE_STATUSBAR - m_frameStatusBar = NULL; -#endif //wxUSE_STATUSBAR - + if (!wxTopLevelWindow::Create( pParent + ,vId + ,rsTitle + ,rPos + ,rSize + ,lStyle + ,rsName + )) + return FALSE; SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE)); - - if (vId > -1 ) - m_windowId = vId; - else - m_windowId = (int)NewControlId(); - - if (pParent) - pParent->AddChild(this); - - m_bIconized = FALSE; - - if ((m_windowStyle & wxFRAME_FLOAT_ON_PARENT) == 0) - pParent = NULL; - - bOk = OS2Create( m_windowId - ,pParent - ,wxFrameClassName - ,this - ,rsTitle - ,nX - ,nY - ,nWidth - ,nHeight - ,lulStyle - ); - if (bOk) - { - if (!pParent) - wxTopLevelWindows.Append(this); - wxModelessWindows.Append(this); - } - return(bOk); + wxModelessWindows.Append(this); + return TRUE; } // end of wxFrame::Create wxFrame::~wxFrame() { m_isBeingDeleted = TRUE; - - wxTopLevelWindows.DeleteObject(this); - DeleteAllBars(); - - if (wxTheApp && (wxTopLevelWindows.Number() == 0)) - { - wxTheApp->SetTopWindow(NULL); - - if (wxTheApp->GetExitOnFrameDelete()) - { - ::WinPostMsg(NULL, WM_QUIT, 0, 0); - } - } - - wxModelessWindows.DeleteObject(this); - - // - // For some reason, wxWindows can activate another task altogether - // when a frame is destroyed after a modal dialog has been invoked. - // Try to bring the parent to the top. - // - // MT:Only do this if this frame is currently the active window, else weird - // things start to happen. - // - if (wxGetActiveWindow() == this) - { - if (GetParent() && GetParent()->GetHWND()) - { - ::WinSetWindowPos( (HWND) GetParent()->GetHWND() - ,HWND_TOP - ,0 - ,0 - ,0 - ,0 - ,SWP_ZORDER - ); - } - } } // end of wxFrame::~wxFrame -// -// IF we have child controls in the Frame's client we need to alter -// the y position, because, OS/2 controls are positioned relative to -// wxWindows orgin (top left) not the OS/2 origin (bottom left) -void wxFrame::AlterChildPos() -{ - // - // OS/2 is the only OS concerned about this - // - wxWindow* pChild = NULL; - wxControl* pCtrl = NULL; - RECTL vRect; - SWP vSwp; - - ::WinQueryWindowRect(GetHwnd(), &vRect); - for (wxWindowList::Node* pNode = GetChildren().GetFirst(); - pNode; - pNode = pNode->GetNext()) - { - wxWindow* pChild = pNode->GetData(); - - ::WinQueryWindowPos(pChild->GetHWND(), &vSwp); - vSwp.y += (vRect.yTop - m_vSwpClient.cy); - if (pChild->IsKindOf(CLASSINFO(wxControl))) - { - pCtrl = wxDynamicCast(pChild, wxControl); - // - // Must deal with controls that have margins like ENTRYFIELD. The SWP - // struct of such a control will have and origin offset from its intended - // position by the width of the margins. - // - vSwp.y -= pCtrl->GetYComp(); - vSwp.x -= pCtrl->GetXComp(); - } - ::WinSetWindowPos( pChild->GetHWND() - ,HWND_TOP - ,vSwp.x - ,vSwp.y - ,vSwp.cx - ,vSwp.cy - ,SWP_MOVE - ); - ::WinQueryWindowPos(pChild->GetHWND(), &vSwp); - pChild = NULL; - } -} // end of wxFrame::AlterChildPos - // // Get size *available for subwindows* i.e. excluding menu bar, toolbar etc. // @@ -292,19 +163,15 @@ void wxFrame::DoGetClientSize( , int* pY ) const { - RECTL vRect; - ::WinQueryWindowRect(GetHwnd(), &vRect); - + wxTopLevelWindow::DoGetClientSize( pX + ,pY + ); // // No need to use statusbar code as in WIN32 as the FORMATFRAME // window procedure ensures PM knows about the new frame client - // size internally. A ::WinQueryWindowRect is all that is needed! + // size internally. A ::WinQueryWindowRect (that is called in + // wxWindow's GetClient size from above) is all that is needed! // - - if (pX) - *pX = vRect.xRight - vRect.xLeft; - if (pY) - *pY = vRect.yTop - vRect.yBottom; } // end of wxFrame::DoGetClientSize // @@ -316,214 +183,48 @@ void wxFrame::DoSetClientSize( , int nHeight ) { - HWND hWnd = GetHwnd(); - RECTL vRect; - RECTL vRect2; - - ::WinQueryWindowRect(GetHwnd(), &vRect); - ::WinQueryWindowRect(GetHwnd(), &vRect2); + wxStatusBar* pStatusBar = GetStatusBar(); // - // Find the difference between the entire window (title bar and all) - // and the client area; add this to the new client size to move the - // window. Remember OS/2's backwards y coord system! + // Statusbars are not part of the OS/2 Client but parent frame + // so no statusbar consideration // - int nActualWidth = vRect2.xRight - vRect2.xLeft - vRect.xRight; - int nActualHeight = vRect2.yTop + vRect2.yTop - vRect.yTop; - -#if wxUSE_STATUSBAR - wxStatusBar* pStatusBar = GetStatusBar(); - - if (pStatusBar && pStatusBar->IsShown()) - { - nActualHeight += pStatusBar->GetSize().y; - } - -#endif // wxUSE_STATUSBAR - - wxPoint vPoint(GetClientAreaOrigin()); - - nActualWidth += vPoint.x; - nActualHeight += vPoint.y; - - POINTL vPointl; - - vPointl.x = vRect2.xLeft; - vPointl.y = vRect2.yTop; - - ::WinSetWindowPos( hWnd - ,HWND_TOP - ,vPointl.x - ,vPointl.y - ,nActualWidth - ,nActualHeight - ,SWP_MOVE | SWP_SIZE | SWP_SHOW - ); - - wxSizeEvent vEvent( wxSize( nWidth - ,nHeight - ) - ,m_windowId - ); - vEvent.SetEventObject(this); - GetEventHandler()->ProcessEvent(vEvent); + wxTopLevelWindow::DoSetClientSize( nWidth + ,nHeight + ); } // end of wxFrame::DoSetClientSize -void wxFrame::DoGetSize( - int* pWidth -, int* pHeight -) const -{ - RECTL vRect; - - ::WinQueryWindowRect(m_hFrame, &vRect); - *pWidth = vRect.xRight - vRect.xLeft; - *pHeight = vRect.yTop - vRect.yBottom; -} // end of wxFrame::DoGetSize - -void wxFrame::DoGetPosition( - int* pX -, int* pY -) const -{ - RECTL vRect; - POINTL vPoint; - - ::WinQueryWindowRect(m_hFrame, &vRect); - - *pX = vRect.xRight - vRect.xLeft; - *pY = vRect.yTop - vRect.yBottom; -} // end of wxFrame::DoGetPosition - // ---------------------------------------------------------------------------- -// variations around ::ShowWindow() +// wxFrame: various geometry-related functions // ---------------------------------------------------------------------------- -void wxFrame::DoShowWindow( - int bShowCmd -) +void wxFrame::Raise() { - ::WinShowWindow(m_hFrame, (BOOL)bShowCmd); - m_bIconized = bShowCmd == SWP_MINIMIZE; -} // end of wxFrame::DoShowWindow + wxFrameBase::Raise(); + ::WinSetWindowPos( (HWND) GetParent()->GetHWND() + ,HWND_TOP + ,0 + ,0 + ,0 + ,0 + ,SWP_ZORDER + ); +} -bool wxFrame::Show( - bool bShow -) +// generate an artificial resize event +void wxFrame::SendSizeEvent() { - int nShowCmd; - SWP vSwp; - - if (bShow) - { - nShowCmd = SWP_SHOW; - } - else // hide - { - nShowCmd = SWP_HIDE; - } - - DoShowWindow(nShowCmd); - - if (bShow) - { - wxActivateEvent vEvent(wxEVT_ACTIVATE, TRUE, m_windowId); - - ::WinQueryWindowPos(m_hFrame, &vSwp); - m_bIconized = vSwp.fl & SWP_MINIMIZE; - ::WinQueryWindowPos(m_hWnd, &m_vSwpClient); - ::WinSendMsg(m_hFrame, WM_UPDATEFRAME, (MPARAM)~0, 0); - ::WinEnableWindow(m_hFrame, TRUE); - vEvent.SetEventObject(this); - GetEventHandler()->ProcessEvent(vEvent); - } - else + if (!m_bIconized) { - // - // Try to highlight the correct window (the parent) - // - if (GetParent()) - { - HWND hWndParent = GetHwndOf(GetParent()); - - ::WinQueryWindowPos(hWndParent, &vSwp); - m_bIconized = vSwp.fl & SWP_MINIMIZE; - if (hWndParent) - ::WinSetWindowPos( hWndParent - ,HWND_TOP - ,vSwp.x - ,vSwp.y - ,vSwp.cx - ,vSwp.cy - ,SWP_ZORDER | SWP_ACTIVATE | SWP_SHOW | SWP_MOVE - ); - ::WinEnableWindow(hWndParent, TRUE); - } - } - return TRUE; -} // end of wxFrame::Show - -void wxFrame::Iconize( - bool bIconize -) -{ - DoShowWindow(bIconize ? SWP_MINIMIZE : SWP_RESTORE); -} // end of wxFrame::Iconize - -void wxFrame::Maximize( - bool bMaximize) -{ - DoShowWindow(bMaximize ? SWP_MAXIMIZE : SWP_RESTORE); -} // end of wxFrame::Maximize - -void wxFrame::Restore() -{ - DoShowWindow(SWP_RESTORE); -} // end of wxFrame::Restore - -bool wxFrame::IsIconized() const -{ - SWP vSwp; - - ::WinQueryWindowPos(m_hFrame, &vSwp); - - if (vSwp.fl & SWP_MINIMIZE) - ((wxFrame*)this)->m_bIconized = TRUE; - else - ((wxFrame*)this)->m_bIconized = FALSE; - return m_bIconized; -} // end of wxFrame::IsIconized - -// Is it maximized? -bool wxFrame::IsMaximized() const -{ - SWP vSwp; - bool bIconic; - - ::WinQueryWindowPos(m_hFrame, &vSwp); - return (vSwp.fl & SWP_MAXIMIZE); -} // end of wxFrame::IsMaximized - -void wxFrame::SetIcon( - const wxIcon& rIcon -) -{ - wxFrameBase::SetIcon(rIcon); + RECTL vRect = wxGetWindowRect(GetHwnd()); - if ((m_icon.GetHICON()) != NULLHANDLE) - { - ::WinSendMsg( m_hFrame - ,WM_SETICON - ,(MPARAM)((HPOINTER)m_icon.GetHICON()) - ,NULL - ); - ::WinSendMsg( m_hFrame - ,WM_UPDATEFRAME - ,(MPARAM)FCF_ICON - ,(MPARAM)0 - ); + (void)::WinPostMsg( m_hFrame + ,WM_SIZE + ,MPFROM2SHORT(vRect.xRight - vRect.xLeft, vRect.yTop - vRect.yBottom) + ,MPFROM2SHORT(vRect.xRight - vRect.xLeft, vRect.yTop - vRect.yBottom) + ); } -} // end of wxFrame::SetIcon +} #if wxUSE_STATUSBAR wxStatusBar* wxFrame::OnCreateStatusBar( @@ -960,191 +661,6 @@ bool wxFrame::ShowFullScreen( // // Frame window // -bool wxFrame::OS2Create( - int nId -, wxWindow* pParent -, const wxChar* zWclass -, wxWindow* pWxWin -, const wxChar* zTitle -, int nX -, int nY -, int nWidth -, int nHeight -, long ulStyle -) -{ - ULONG ulCreateFlags = 0L; - ULONG ulStyleFlags = 0L; - ULONG ulExtraFlags = 0L; - FRAMECDATA vFrameCtlData; - HWND hParent = NULLHANDLE; - HWND hTitlebar = NULLHANDLE; - HWND hHScroll = NULLHANDLE; - HWND hVScroll = NULLHANDLE; - HWND hFrame = NULLHANDLE; - HWND hClient = NULLHANDLE; - SWP vSwp[10]; - RECTL vRect[10]; - USHORT uCtlCount; - ERRORID vError; - wxString sError; - - m_hDefaultIcon = (WXHICON) (wxSTD_FRAME_ICON ? wxSTD_FRAME_ICON : wxDEFAULT_FRAME_ICON); - - if (pParent) - hParent = GetWinHwnd(pParent); - else - hParent = HWND_DESKTOP; - - if (ulStyle == wxDEFAULT_FRAME_STYLE) - ulCreateFlags = FCF_SIZEBORDER | FCF_TITLEBAR | FCF_SYSMENU | - FCF_MINMAX | FCF_TASKLIST; - else - { - if ((ulStyle & wxCAPTION) == wxCAPTION) - ulCreateFlags = FCF_TASKLIST; - else - ulCreateFlags = FCF_NOMOVEWITHOWNER; - - if ((ulStyle & wxVSCROLL) == wxVSCROLL) - ulCreateFlags |= FCF_VERTSCROLL; - if ((ulStyle & wxHSCROLL) == wxHSCROLL) - ulCreateFlags |= FCF_HORZSCROLL; - if (ulStyle & wxMINIMIZE_BOX) - ulCreateFlags |= FCF_MINBUTTON; - if (ulStyle & wxMAXIMIZE_BOX) - ulCreateFlags |= FCF_MAXBUTTON; - if (ulStyle & wxTHICK_FRAME) - ulCreateFlags |= FCF_DLGBORDER; - if (ulStyle & wxSYSTEM_MENU) - ulCreateFlags |= FCF_SYSMENU; - if (ulStyle & wxCAPTION) - ulCreateFlags |= FCF_TASKLIST; - if (ulStyle & wxCLIP_CHILDREN) - { - // Invalid for frame windows under PM - } - - if (ulStyle & wxTINY_CAPTION_VERT) - ulCreateFlags |= FCF_TASKLIST; - if (ulStyle & wxTINY_CAPTION_HORIZ) - ulCreateFlags |= FCF_TASKLIST; - - if ((ulStyle & wxTHICK_FRAME) == 0) - ulCreateFlags |= FCF_BORDER; - if (ulStyle & wxFRAME_TOOL_WINDOW) - ulExtraFlags = kFrameToolWindow; - - if (ulStyle & wxSTAY_ON_TOP) - ulCreateFlags |= FCF_SYSMODAL; - } - if ((ulStyle & wxMINIMIZE) || (ulStyle & wxICONIZE)) - ulStyleFlags |= WS_MINIMIZED; - if (ulStyle & wxMAXIMIZE) - ulStyleFlags |= WS_MAXIMIZED; - - // - // Clear the visible flag, we always call show - // - ulStyleFlags &= (unsigned long)~WS_VISIBLE; - m_bIconized = FALSE; - - // - // Set the frame control block - // - vFrameCtlData.cb = sizeof(vFrameCtlData); - vFrameCtlData.flCreateFlags = ulCreateFlags; - vFrameCtlData.hmodResources = 0L; - vFrameCtlData.idResources = 0; - - // - // Create the frame window: We break ranks with other ports now - // and instead of calling down into the base wxWindow class' OS2Create - // we do all our own stuff here. We will set the needed pieces - // of wxWindow manually, here. - // - - hFrame = ::WinCreateStdWindow( hParent - ,ulStyleFlags // frame-window style - ,&ulCreateFlags // window style - ,(PSZ)zWclass // class name - ,(PSZ)zTitle // window title - ,0L // default client style - ,NULLHANDLE // resource in executable file - ,0 // resource id - ,&hClient // receives client window handle - ); - if (!hFrame) - { - vError = ::WinGetLastError(vHabmain); - sError = wxPMErrorToStr(vError); - wxLogError("Error creating frame. Error: %s\n", sError); - return FALSE; - } - - // - // wxWindow class' m_hWnd set here and needed associations - // - m_hFrame = hFrame; - m_hWnd = hClient; - wxAssociateWinWithHandle(m_hWnd, this); - wxAssociateWinWithHandle(m_hFrame, this); - - m_backgroundColour.Set(wxString("GREY")); - - LONG lColor = (LONG)m_backgroundColour.GetPixel(); - - if (!::WinSetPresParam( m_hWnd - ,PP_BACKGROUNDCOLOR - ,sizeof(LONG) - ,(PVOID)&lColor - )) - { - vError = ::WinGetLastError(vHabmain); - sError = wxPMErrorToStr(vError); - wxLogError("Error creating frame. Error: %s\n", sError); - return FALSE; - } - - // - // Now need to subclass window. Instead of calling the SubClassWin in wxWindow - // we manually subclass here because we don't want to use the main wxWndProc - // by default - // - m_fnOldWndProc = (WXFARPROC) ::WinSubclassWindow(m_hFrame, (PFNWP)wxFrameMainWndProc); - - // - // Now size everything. If adding a menu the client will need to be resized. - // - - if (pParent) - { - nY = pParent->GetSize().y - (nY + nHeight); - } - else - { - RECTL vRect; - - ::WinQueryWindowRect(HWND_DESKTOP, &vRect); - nY = vRect.yTop - (nY + nHeight); - } - if (!::WinSetWindowPos( m_hFrame - ,HWND_TOP - ,nX - ,nY - ,nWidth - ,nHeight - ,SWP_SIZE | SWP_MOVE | SWP_ACTIVATE | SWP_ZORDER - )) - { - vError = ::WinGetLastError(vHabmain); - sError = wxPMErrorToStr(vError); - wxLogError("Error sizing frame. Error: %s\n", sError); - return FALSE; - } - return TRUE; -} // end of wxFrame::OS2Create - // // Default activation behaviour - set the focus for the first child // subwindow found. @@ -1357,6 +873,11 @@ void wxFrame::IconizeChildFrames( } } // end of wxFrame::IconizeChildFrames +WXHICON wxFrame::GetDefaultIcon() const +{ + return (WXHICON)(wxSTD_FRAME_ICON ? wxSTD_FRAME_ICON + : wxDEFAULT_FRAME_ICON); +} // =========================================================================== // message processing // =========================================================================== diff --git a/src/os2/gauge.cpp b/src/os2/gauge.cpp index c1fe612f6c..449788d6a3 100644 --- a/src/os2/gauge.cpp +++ b/src/os2/gauge.cpp @@ -155,7 +155,14 @@ bool wxGauge::Create( if (m_windowStyle & wxCLIP_SIBLINGS) lMsStyle |= WS_CLIPSIBLINGS; - + // + // If the parent is a scrolled window the controls must + // have this style or they will overlap the scrollbars + // + if (pParent) + if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) || + pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow))) + lMsStyle |= WS_CLIPSIBLINGS; m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle ,WC_ENTRYFIELD // Window class diff --git a/src/os2/listbox.cpp b/src/os2/listbox.cpp index 04dffe2b68..9fe882a4fb 100644 --- a/src/os2/listbox.cpp +++ b/src/os2/listbox.cpp @@ -142,6 +142,15 @@ bool wxListBox::Create( // lStyle |= LS_NOADJUSTPOS; + // + // If the parent is a scrolled window the controls must + // have this style or they will overlap the scrollbars + // + if (pParent) + if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) || + pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow))) + lStyle |= WS_CLIPSIBLINGS; + m_hWnd = (WXHWND)::WinCreateWindow( GetWinHwnd(pParent) // Parent ,WC_LISTBOX // Default Listbox class ,"LISTBOX" // Control's name @@ -170,6 +179,29 @@ bool wxListBox::Create( Append(asChoices[lUi]); } SetFont(pParent->GetFont()); + + // + // Set standard wxWindows colors for Listbox items and highlighting + // + wxColour vColour; + + vColour.Set(wxString("WHITE")); + + LONG lColor = (LONG)vColour.GetPixel(); + + ::WinSetPresParam( m_hWnd + ,PP_HILITEFOREGROUNDCOLOR + ,sizeof(LONG) + ,(PVOID)&lColor + ); + vColour.Set(wxString("NAVY")); + lColor = (LONG)vColour.GetPixel(); + ::WinSetPresParam( m_hWnd + ,PP_HILITEBACKGROUNDCOLOR + ,sizeof(LONG) + ,(PVOID)&lColor + ); + SetSize( nX ,nY ,nWidth diff --git a/src/os2/makefile.va b/src/os2/makefile.va index 66bf9f8ae0..ca3af59645 100644 --- a/src/os2/makefile.va +++ b/src/os2/makefile.va @@ -526,6 +526,7 @@ OS2OBJS = \ ..\os2\$D\timer.obj \ ..\os2\$D\toolbar.obj \ ..\os2\$D\tooltip.obj \ + ..\os2\$D\toplevel.obj \ ..\os2\$D\utils.obj \ ..\os2\$D\utilsexc.obj \ ..\os2\$D\wave.obj \ @@ -610,6 +611,7 @@ OS2LIBOBJS2 = \ timer.obj \ toolbar.obj \ tooltip.obj \ + toplevel.obj \ utils.obj \ utilsexc.obj \ wave.obj \ @@ -958,6 +960,7 @@ $(OS2LIBOBJS2): copy ..\os2\$D\timer.obj copy ..\os2\$D\toolbar.obj copy ..\os2\$D\tooltip.obj + copy ..\os2\$D\toplevel.obj copy ..\os2\$D\utils.obj copy ..\os2\$D\utilsexc.obj copy ..\os2\$D\wave.obj diff --git a/src/os2/radiobox.cpp b/src/os2/radiobox.cpp index fa32d2ccad..70a9a050e4 100644 --- a/src/os2/radiobox.cpp +++ b/src/os2/radiobox.cpp @@ -294,7 +294,11 @@ bool wxRadioBox::Create( if (!OS2CreateControl( "STATIC" - ,SS_GROUPBOX | WS_GROUP +#if RADIOBTN_PARENT_IS_RADIOBOX + ,SS_GROUPBOX | WS_GROUP | WS_CLIPCHILDREN +#else + ,SS_GROUPBOX | WS_GROUP | WS_CLIPSIBLINGS +#endif ,rPos ,rSize ,rsTitle @@ -341,11 +345,19 @@ bool wxRadioBox::Create( ,NULL ,NULL ); + 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 + ); if (!hWndBtn) { return FALSE; @@ -374,11 +386,19 @@ bool wxRadioBox::Create( ,NULL ); SetFont(*wxSMALL_FONT); + 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 + ); SetSelection(0); SetSize( rPos.x ,rPos.y diff --git a/src/os2/radiobut.cpp b/src/os2/radiobut.cpp index 8878abed12..83444cd1f0 100644 --- a/src/os2/radiobut.cpp +++ b/src/os2/radiobut.cpp @@ -81,6 +81,15 @@ bool wxRadioButton::Create( if (m_windowStyle & wxCLIP_SIBLINGS ) lsStyle |= WS_CLIPSIBLINGS; + // + // If the parent is a scrolled window the controls must + // have this style or they will overlap the scrollbars + // + if (pParent) + if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) || + pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow))) + lsStyle |= WS_CLIPSIBLINGS; + m_hWnd = (WXHWND)::WinCreateWindow ( GetHwndOf(pParent) ,WC_BUTTON ,rsLabel.c_str() diff --git a/src/os2/slider.cpp b/src/os2/slider.cpp index ecb5f09f45..7f2ba24e7f 100644 --- a/src/os2/slider.cpp +++ b/src/os2/slider.cpp @@ -200,6 +200,15 @@ bool wxSlider::Create( { lMsStyle |= WS_VISIBLE | SS_TEXT | DT_VCENTER; + // + // If the parent is a scrolled window the controls must + // have this style or they will overlap the scrollbars + // + if (pParent) + if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) || + pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow))) + lMsStyle |= WS_CLIPSIBLINGS; + m_hStaticValue = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle ,WC_STATIC // Window class ,(PSZ)NULL // Initial Text @@ -219,6 +228,15 @@ bool wxSlider::Create( lWstyle = SS_TEXT|DT_LEFT|WS_VISIBLE; if (m_windowStyle & wxCLIP_SIBLINGS) lWstyle |= WS_CLIPSIBLINGS; + // + // If the parent is a scrolled window the controls must + // have this style or they will overlap the scrollbars + // + if (pParent) + if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) || + pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow))) + lWstyle |= WS_CLIPSIBLINGS; + m_hStaticMin = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle ,WC_STATIC // Window class ,(PSZ)wxBuffer // Initial Text @@ -263,6 +281,15 @@ bool wxSlider::Create( else lMsStyle |= SLS_PRIMARYSCALE2; + // + // If the parent is a scrolled window the controls must + // have this style or they will overlap the scrollbars + // + if (pParent) + if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) || + pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow))) + lMsStyle |= WS_CLIPSIBLINGS; + m_nPageSize = ((nMaxValue - nMinValue)/10); vSlData.usScale1Increments = m_nPageSize; vSlData.usScale2Increments = m_nPageSize; @@ -311,6 +338,15 @@ bool wxSlider::Create( lWstyle = SS_TEXT|DT_LEFT|WS_VISIBLE; if (m_windowStyle & wxCLIP_SIBLINGS) lMsStyle |= WS_CLIPSIBLINGS; + // + // If the parent is a scrolled window the controls must + // have this style or they will overlap the scrollbars + // + if (pParent) + if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) || + pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow))) + lWstyle |= WS_CLIPSIBLINGS; + m_hStaticMax = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle ,WC_STATIC // Window class ,(PSZ)wxBuffer // Initial Text diff --git a/src/os2/spinbutt.cpp b/src/os2/spinbutt.cpp index 7c9774ede3..55e9b2c6a3 100644 --- a/src/os2/spinbutt.cpp +++ b/src/os2/spinbutt.cpp @@ -102,6 +102,15 @@ bool wxSpinButton::Create( if (m_windowStyle & wxCLIP_SIBLINGS ) lSstyle |= WS_CLIPSIBLINGS; + // + // If the parent is a scrolled window the controls must + // have this style or they will overlap the scrollbars + // + if (pParent) + if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) || + pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow))) + lSstyle |= WS_CLIPSIBLINGS; + SPBCDATA vCtrlData; vCtrlData.cbSize = sizeof(SPBCDATA); diff --git a/src/os2/spinctrl.cpp b/src/os2/spinctrl.cpp index 516ee8f9cb..6804a3ab94 100644 --- a/src/os2/spinctrl.cpp +++ b/src/os2/spinctrl.cpp @@ -151,6 +151,15 @@ bool wxSpinCtrl::Create( if (m_windowStyle & wxCLIP_SIBLINGS ) lSstyle |= WS_CLIPSIBLINGS; + // + // If the parent is a scrolled window the controls must + // have this style or they will overlap the scrollbars + // + if (pParent) + if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) || + pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow))) + lSstyle |= WS_CLIPSIBLINGS; + SPBCDATA vCtrlData; vCtrlData.cbSize = sizeof(SPBCDATA); diff --git a/src/os2/stattext.cpp b/src/os2/stattext.cpp index fbeefc707f..5b214b0987 100644 --- a/src/os2/stattext.cpp +++ b/src/os2/stattext.cpp @@ -66,6 +66,15 @@ bool wxStaticText::Create( lSstyle |= DT_RIGHT; else lSstyle |= DT_LEFT; + // + // If the parent is a scrolled window the controls must + // have this style or they will overlap the scrollbars + // + if (pParent) + if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) || + pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow))) + lSstyle |= WS_CLIPSIBLINGS; + m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle ,WC_STATIC // Window class ,(PSZ)rsLabel.c_str() // Initial Text diff --git a/src/os2/textctrl.cpp b/src/os2/textctrl.cpp index 0e4b7a4461..32bc0f69d8 100644 --- a/src/os2/textctrl.cpp +++ b/src/os2/textctrl.cpp @@ -117,37 +117,11 @@ bool wxTextCtrl::Create( return FALSE; wxPoint vPos = rPos; // The OS/2 position + SWP vSwp; if (pParent ) { pParent->AddChild(this); - hParent = GetWinHwnd(pParent); - // - // OS2 uses normal coordinates, no bassackwards Windows ones - // - if (pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow)) || - pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) - ) - { - wxWindow* pGrandParent = NULL; - - pGrandParent = pParent->GetParent(); - if (pGrandParent) - nTempy = pGrandParent->GetSize().y - (vPos.y + rSize.y); - else - nTempy = pParent->GetSize().y - (vPos.y + rSize.y); - } - else - nTempy = pParent->GetSize().y - (vPos.y + rSize.y); - vPos.y = nTempy; - } - else - { - RECTL vRect; - - ::WinQueryWindowRect(HWND_DESKTOP, &vRect); - hParent = HWND_DESKTOP; - vPos.y = vRect.yTop - (vPos.y + rSize.y); } m_windowStyle = lStyle; @@ -180,10 +154,15 @@ bool wxTextCtrl::Create( if (m_windowStyle & wxTE_PASSWORD) // hidden input lSstyle |= ES_UNREADABLE; } - if ( pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow)) || - pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) - ) - lSstyle |= WS_CLIPSIBLINGS; + // + // If the parent is a scrolled window the controls must + // have this style or they will overlap the scrollbars + // + if (pParent) + if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) || + pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow))) + lSstyle |= WS_CLIPSIBLINGS; + if (m_bIsMLE) { m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle @@ -244,6 +223,13 @@ bool wxTextCtrl::Create( 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 ,vPos.y ,rSize.x diff --git a/src/os2/window.cpp b/src/os2/window.cpp index e06c94650c..f6e3e6082e 100644 --- a/src/os2/window.cpp +++ b/src/os2/window.cpp @@ -369,7 +369,6 @@ bool wxWindowOS2::Create( ) { HWND hParent = NULLHANDLE; - wxPoint vPos = rPos; // The OS/2 position ULONG ulCreateFlags = 0; WXDWORD dwExStyle = 0; @@ -442,23 +441,17 @@ bool wxWindowOS2::Create( } // - // Generic OS/2 Windows are created with no owner, no Z Order, no Control data, - // and no presentation parameters + // Generic OS/2 Windows have no Control Data but other classes + // that call OS2Create may have some. // - OS2Create( hParent - ,(PSZ)wxCanvasClassName + OS2Create( (PSZ)wxCanvasClassName ,rName.c_str() ,ulCreateFlags - ,vPos.x - ,vPos.y - ,WidthDefault(rSize.x) - ,HeightDefault(rSize.y) - ,NULLHANDLE - ,NULLHANDLE - ,m_windowId - ,NULL - ,NULL + ,rPos + ,rSize + ,NULL // Control Data ,dwExStyle + ,TRUE // Child ); return(TRUE); @@ -1084,6 +1077,19 @@ void wxWindowOS2::UnsubclassWin() } } // end of wxWindowOS2::UnsubclassWin +bool wxCheckWindowWndProc( + WXHWND hWnd +, WXFARPROC fnWndProc +) +{ + static char zBuffer[512]; + CLASSINFO vCls; + + ::WinQueryClassName((HWND)hWnd, (LONG)512, (PCH)zBuffer); + ::WinQueryClassInfo(wxGetInstance(), (PSZ)zBuffer, &vCls); + return(fnWndProc == (WXFARPROC)vCls.pfnWindowProc); +} // end of WinGuiBase_CheckWindowWndProc + // // Make a Windows extended style from the given wxWindows window style // @@ -1416,9 +1422,17 @@ void wxWindowOS2::DoGetSize( , int* pHeight ) const { - HWND hWnd = GetHwnd(); + HWND hWnd; RECTL vRect; + if (IsKindOf(CLASSINFO(wxFrame))) + { + wxFrame* pFrame = wxDynamicCast(this, wxFrame); + hWnd = pFrame->GetFrame(); + } + else + hWnd = GetHwnd(); + ::WinQueryWindowRect(hWnd, &vRect); if (pWidth) @@ -1514,18 +1528,9 @@ void wxWindowOS2::DoGetClientSize( ) const { HWND hWnd = GetHwnd(); - HWND hWndClient; RECTL vRect; - if (IsKindOf(CLASSINFO(wxFrame))) - hWndClient = ::WinWindowFromID(GetHwnd(), FID_CLIENT); - else - hWndClient = NULLHANDLE; - if( hWndClient == NULLHANDLE) - ::WinQueryWindowRect(GetHwnd(), &vRect); - else - ::WinQueryWindowRect(hWndClient, &vRect); - + ::WinQueryWindowRect(hWnd, &vRect); if (pWidth) *pWidth = vRect.xRight; if (pHeight) @@ -1596,8 +1601,29 @@ void wxWindowOS2::DoSetSize( GetPosition(&nCurrentX, &nCurrentY); GetSize(&nCurrentWidth, &nCurrentHeight); + // // ... and don't do anything (avoiding flicker) if it's already ok - if (nX == nCurrentX && nY == nCurrentY && + // + // + // Must convert Y coords to test for equality under OS/2 + // + int nY2 = nY; + wxWindow* pParent = (wxWindow*)GetParent(); + + if (pParent) + { + int nOS2Height = GetOS2ParentHeight(pParent); + + nY2 = nOS2Height - (nY2 + nHeight); + } + else + { + RECTL vRect; + + ::WinQueryWindowRect(HWND_DESKTOP, &vRect); + nY2 = vRect.yTop - (nY2 + nHeight); + } + if (nX == nCurrentX && nY2 == nCurrentY && nWidth == nCurrentWidth && nHeight == nCurrentHeight) { return; @@ -2860,148 +2886,134 @@ bool wxWindowOS2::OS2GetCreateWindowCoords( } // end of wxWindowOS2::OS2GetCreateWindowCoords bool wxWindowOS2::OS2Create( - WXHWND hParent -, PSZ zClass -, const wxChar* zTitle + PSZ zClass +, const char* zTitle , WXDWORD dwStyle -, long lX -, long lY -, long lWidth -, long lHeight -, WXHWND hOwner -, WXHWND WXUNUSED(hZOrder) -, unsigned long ulId +, const wxPoint& rPos +, const wxSize& rSize , void* pCtlData -, void* pPresParams , WXDWORD dwExStyle +, bool bIsChild ) { ERRORID vError; wxString sError; - long lX1 = 0L; - long lY1 = 0L; - long lWidth1 = 20L; - long lHeight1 = 20L; - int nControlId = 0; - int nNeedsubclass = 0; - PCSZ pszClass = zClass; - - // - // Find parent's size, if it exists, to set up a possible default - // panel size the size of the parent window - // - lX1 = lX; - lY1 = lY; - if (lWidth > -1L) - lWidth1 = lWidth; - if (lHeight > -1L) - lHeight1 = lHeight; - - wxWndHook = this; + int nX = 0L; + int nY = 0L; + int nWidth = 0L; + int nHeight = 0L; + wxWindow* pParent = GetParent(); + HWND hWnd = NULLHANDLE; + HWND hParent; + long lControlId = 0L; + wxWindowCreationHook vHook(this); + wxString sClassName((wxChar*)zClass); + + OS2GetCreateWindowCoords( rPos + ,rSize + ,nX + ,nY + ,nWidth + ,nHeight + ); - // - // 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_FRAME || - (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 - ) - { - nControlId = ulId; - } + if (GetWindowStyleFlag() & wxPOPUP_WINDOW) + hParent = HWND_DESKTOP; else { - // no standard controls - if(wxString (wxT("wxFrameClass")) == wxString(zClass) ) + if ((bIsChild || HasFlag(wxFRAME_TOOL_WINDOW)) && pParent ) { - pszClass = WC_FRAME; - nNeedsubclass = 1; + // + // This is either a normal child window or a top level window with + // wxFRAME_TOOL_WINDOW style (see below) + // + hParent = GetHwndOf(pParent); } else { - nControlId = ulId; - if(nControlId < 0) - nControlId = FID_CLIENT; + // + // This is either a window for which no parent was specified (not + // much we can do then) or a frame without wxFRAME_TOOL_WINDOW + // style: we should use NULL parent HWND for it or it would be + // always on top of its parent which is not what we usually want + // (in fact, we only want it for frames with the special + // wxFRAME_TOOL_WINDOW as above) + // + hParent = NULL; + } + } + if (bIsChild) + { + lControlId = GetId(); + if (GetWindowStyleFlag() & wxCLIP_SIBLINGS) + { + dwStyle |= WS_CLIPSIBLINGS; } } - - HWND parent; - if ( GetWindowStyleFlag() & wxPOPUP_WINDOW ) - { - // popup windows should have desktop as parent because they shouldn't - // be limited to the parents client area as child windows usually are - parent = HWND_DESKTOP; - } - else if ( hParent ) - { - parent = hParent; - } - else - { - // top level window - parent = NULL; - } - // - // We will either have a registered class via string name or a standard PM Class via a long + // For each class "Foo" we have we also have "FooNR" ("no repaint") class + // which is the same but without CS_[HV]REDRAW class styles so using it + // ensures that the window is not fully repainted on each resize // - m_hWnd = (WXHWND)::WinCreateWindow(parent, zClass, - (PSZ)zTitle ? zTitle : wxT(""), - dwStyle, lX1, lY1, lWidth, lHeight, - hOwner, HWND_TOP, (ULONG)nControlId, - pCtlData, pPresParams); - - if (!m_hWnd) + if (GetWindowStyleFlag() & wxNO_FULL_REPAINT_ON_RESIZE) { - vError = ::WinGetLastError(vHabmain); - sError = wxPMErrorToStr(vError); - wxLogError("Can't create window of class %s!. Error: %s\n", zClass, sError); - return FALSE; + sClassName += wxT("NR"); } - m_dwExStyle = dwExStyle; - ::WinSetWindowULong(m_hWnd, QWL_USER, (ULONG) this); - wxWndHook = NULL; -#ifdef __WXDEBUG__ - wxNode* pNode = wxWinHandleList->Member(this); - - if (pNode) + // + // If the window being created is a Frame's Statusbar we need to use + // the actual Frame's size, not its client + // + if (pParent) { - HWND hWnd = (HWND)pNode->GetKeyInteger(); - - if (hWnd != (HWND)m_hWnd) - + if (IsKindOf(CLASSINFO(wxStatusBar)) && + pParent->IsKindOf(CLASSINFO(wxFrame))) { - wxLogError("A second HWND association is being added for the same window!"); + RECTL vRect; + wxFrame* pFrame = wxDynamicCast(pParent, wxFrame); + + ::WinQueryWindowRect((HWND)pFrame->GetFrame(), &vRect); + nY = vRect.yTop - (nY + nHeight); } + else + nY = pParent->GetSize().y - (nY + nHeight); } -#endif - wxAssociateWinWithHandle((HWND)m_hWnd - ,this - ); - // - // Now need to subclass window. - // - if(!nNeedsubclass) + else { - wxAssociateWinWithHandle((HWND)m_hWnd,this); + RECTL vRect; + + ::WinQueryWindowRect(HWND_DESKTOP, &vRect); + nY = vRect.yTop - (nY + nHeight); } - else + m_hWnd = (WXHWND)::WinCreateWindow( (HWND)hParent + ,(PSZ)sClassName.c_str() + ,(PSZ)zTitle ? zTitle : "" + ,(ULONG)dwStyle + ,(LONG)0L + ,(LONG)0L + ,(LONG)0L + ,(LONG)0L + ,NULLHANDLE + ,HWND_TOP + ,(ULONG)lControlId + ,pCtlData + ,NULL + ); + if (!m_hWnd) { - SubclassWin(GetHWND()); + vError = ::WinGetLastError(wxGetInstance()); + sError = wxPMErrorToStr(vError); + return FALSE; } + SubclassWin(m_hWnd); + SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT)); + SetSize( nX + ,nY + ,nWidth + ,nHeight + ); return TRUE; -} // end of wxWindowOS2::OS2Create +} // end of WinGuiBase_Window::OS2Create // =========================================================================== // OS2 PM message handlers diff --git a/src/os2/wx23.def b/src/os2/wx23.def index 453575a012..0e3afd203b 100644 --- a/src/os2/wx23.def +++ b/src/os2/wx23.def @@ -4,7 +4,7 @@ DATA MULTIPLE NONSHARED READWRITE LOADONCALL CODE LOADONCALL EXPORTS -;From library: F:\DEV\WX2\WXWINDOWS\LIB\WX.lib +;From library: F:\DEV\WX2\WXWINDOWS\LIB\wx.lib ;From object file: dummy.cpp ;PUBDEFs (Symbols available from object file): wxDummyChar @@ -888,8 +888,29 @@ EXPORTS CreateButtonSizer__12wxDialogBaseFl ;wxDialogBase::Init() Init__12wxDialogBaseFv + ;wxDialogBase::GetDefaultItem() const + GetDefaultItem__12wxDialogBaseCFv + ;wxDialogBase::SetDefaultItem(wxWindow*) + SetDefaultItem__12wxDialogBaseFP8wxWindow ;wxDialogBase::CreateTextSizer(const wxString&) CreateTextSizer__12wxDialogBaseFRC8wxString + ;wxDialogBase::OnFocus(wxFocusEvent&) + OnFocus__12wxDialogBaseFR12wxFocusEvent + ;wxDialogBase::sm_eventTableEntries + sm_eventTableEntries__12wxDialogBase + ;wxDialogBase::SetFocus() + SetFocus__12wxDialogBaseFv + ;wxDialogBase::OnChildFocus(wxChildFocusEvent&) + OnChildFocus__12wxDialogBaseFR17wxChildFocusEvent + __vft12wxDialogBase8wxObject + ;wxDialogBase::sm_eventTable + sm_eventTable__12wxDialogBase + ;wxDialogBase::OnNavigationKey(wxNavigationKeyEvent&) + OnNavigationKey__12wxDialogBaseFR20wxNavigationKeyEvent + ;wxDialogBase::RemoveChild(wxWindowBase*) + RemoveChild__12wxDialogBaseFP12wxWindowBase + ;wxDialogBase::GetEventTable() const + GetEventTable__12wxDialogBaseCFv ;From object file: ..\common\dobjcmn.cpp ;PUBDEFs (Symbols available from object file): ;wxDataObjectComposite::GetDataSize(const wxDataFormat&) const @@ -2018,6 +2039,8 @@ EXPORTS ;PUBDEFs (Symbols available from object file): ;wxFileName::Assign(const wxString&,wxPathFormat) Assign__10wxFileNameFRC8wxString12wxPathFormat + ;wxFileName::SetPath(const wxString&,wxPathFormat) + SetPath__10wxFileNameFRC8wxString12wxPathFormat ;wxFileName::Normalize(wxPathNormalize,const wxString&,wxPathFormat) Normalize__10wxFileNameF15wxPathNormalizeRC8wxString12wxPathFormat ;wxFileName::IsWild(wxPathFormat) @@ -2166,16 +2189,26 @@ EXPORTS OpenFile__12wxFileSystemFRC8wxString ;From object file: ..\common\fontcmn.cpp ;PUBDEFs (Symbols available from object file): + ;wxNativeFontInfo::SetUnderlined(unsigned long) + SetUnderlined__16wxNativeFontInfoFUl ;wxFontBase::GetNativeFontInfo() const GetNativeFontInfo__10wxFontBaseCFv + ;wxNativeFontInfo::GetUnderlined() const + GetUnderlined__16wxNativeFontInfoCFv ;wxFontBase::New(const wxNativeFontInfo&) New__10wxFontBaseFRC16wxNativeFontInfo ;wxFontBase::New(const wxString&) New__10wxFontBaseFRC8wxString + ;wxNativeFontInfo::FromString(const wxString&) + FromString__16wxNativeFontInfoFRC8wxString ;wxFont::operator=(const wxFont&) __as__6wxFontFRC6wxFont + ;wxNativeFontInfo::SetFamily(wxFontFamily) + SetFamily__16wxNativeFontInfoF12wxFontFamily ;wxFontBase::GetNativeFontInfoDesc() const GetNativeFontInfoDesc__10wxFontBaseCFv + ;wxNativeFontInfo::ToUserString() const + ToUserString__16wxNativeFontInfoCFv ;wxFontBase::GetWeightString() const GetWeightString__10wxFontBaseCFv ;wxFontBase::GetStyleString() const @@ -2186,19 +2219,47 @@ EXPORTS SetNativeFontInfo__10wxFontBaseFRC16wxNativeFontInfo ;wxFontBase::SetNativeFontInfoUserDesc(const wxString&) SetNativeFontInfoUserDesc__10wxFontBaseFRC8wxString + ;wxNativeFontInfo::SetStyle(wxFontStyle) + SetStyle__16wxNativeFontInfoF11wxFontStyle ;wxFontBase::ms_encodingDefault ms_encodingDefault__10wxFontBase + ;wxNativeFontInfo::GetPointSize() const + GetPointSize__16wxNativeFontInfoCFv + ;wxNativeFontInfo::GetStyle() const + GetStyle__16wxNativeFontInfoCFv + ;wxNativeFontInfo::GetFamily() const + GetFamily__16wxNativeFontInfoCFv + ;wxNativeFontInfo::GetFaceName() const + GetFaceName__16wxNativeFontInfoCFv + ;wxNativeFontInfo::SetEncoding(wxFontEncoding) + SetEncoding__16wxNativeFontInfoF14wxFontEncoding ;wxFontBase::SetNativeFontInfo(const wxString&) SetNativeFontInfo__10wxFontBaseFRC8wxString - ;wxFontBase::operator==(const wxFont&) const - __eq__10wxFontBaseCFRC6wxFont + ;wxNativeFontInfo::SetWeight(wxFontWeight) + SetWeight__16wxNativeFontInfoF12wxFontWeight __vft10wxFontBase8wxObject ;wxFontBase::operator!=(const wxFont&) const __ne__10wxFontBaseCFRC6wxFont + ;wxFontBase::operator==(const wxFont&) const + __eq__10wxFontBaseCFRC6wxFont + ;wxNativeFontInfo::SetPointSize(int) + SetPointSize__16wxNativeFontInfoFi + ;wxNativeFontInfo::ToString() const + ToString__16wxNativeFontInfoCFv ;wxFontBase::GetFamilyString() const GetFamilyString__10wxFontBaseCFv + ;wxNativeFontInfo::GetEncoding() const + GetEncoding__16wxNativeFontInfoCFv + ;wxNativeFontInfo::Init() + Init__16wxNativeFontInfoFv + ;wxNativeFontInfo::GetWeight() const + GetWeight__16wxNativeFontInfoCFv ;wxFontBase::New(int,int,int,int,unsigned long,const wxString&,wxFontEncoding) New__10wxFontBaseFiN31UlRC8wxString14wxFontEncoding + ;wxNativeFontInfo::SetFaceName(wxString) + SetFaceName__16wxNativeFontInfoF8wxString + ;wxNativeFontInfo::FromUserString(const wxString&) + FromUserString__16wxNativeFontInfoFRC8wxString ;From object file: ..\common\fontmap.cpp ;PUBDEFs (Symbols available from object file): ;wxFontMapper::GetConfig() @@ -5086,6 +5147,8 @@ EXPORTS Upper__8wxStringCFv ;wxString::IsNumber() const IsNumber__8wxStringCFv + ;wxArrayString::GetStringArray() const + GetStringArray__13wxArrayStringCFv ;wxArrayString::Empty() Empty__13wxArrayStringFv ;wxArrayString::Copy(const wxArrayString&) @@ -5457,12 +5520,14 @@ EXPORTS SendIconizeEvent__20wxTopLevelWindowBaseFUl ;wxTopLevelWindowBase::sm_eventTable sm_eventTable__20wxTopLevelWindowBase + ;wxConstructorForwxTopLevelWindow() + wxConstructorForwxTopLevelWindow__Fv ;wxTopLevelWindowBase::DoClientToScreen(int*,int*) const DoClientToScreen__20wxTopLevelWindowBaseCFPiT1 - ;wxTopLevelWindowBase::GetEventTable() const - GetEventTable__20wxTopLevelWindowBaseCFv ;wxTopLevelWindowBase::wxTopLevelWindowBase() __ct__20wxTopLevelWindowBaseFv + ;wxTopLevelWindowBase::GetEventTable() const + GetEventTable__20wxTopLevelWindowBaseCFv ;wxTopLevelWindowBase::OnSize(wxSizeEvent&) OnSize__20wxTopLevelWindowBaseFR11wxSizeEvent __vft20wxTopLevelWindowBase8wxObject @@ -5474,6 +5539,8 @@ EXPORTS DoScreenToClient__20wxTopLevelWindowBaseCFPiT1 ;wxTopLevelWindowBase::Destroy() Destroy__20wxTopLevelWindowBaseFv + ;wxTopLevelWindow::sm_classwxTopLevelWindow + sm_classwxTopLevelWindow__16wxTopLevelWindow ;From object file: ..\common\treebase.cpp ;PUBDEFs (Symbols available from object file): wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT @@ -11132,8 +11199,6 @@ EXPORTS ;wxCheckBox::SetValue(unsigned long) SetValue__10wxCheckBoxFUl __vft16wxBitmapCheckBox8wxObject - ;wxCheckBox::OnCtlColor(unsigned long,unsigned long,unsigned int,unsigned int,void*,void*) - OnCtlColor__10wxCheckBoxFUlT1UiT3PvT5 ;wxCheckBox::DoGetBestSize() const DoGetBestSize__10wxCheckBoxCFv ;wxCheckBox::GetValue() const @@ -11142,8 +11207,6 @@ EXPORTS Create__16wxBitmapCheckBoxFP8wxWindowiPC8wxBitmapRC7wxPointRC6wxSizelRC11wxValidatorRC8wxString ;wxCheckBox::SetLabel(const wxString&) SetLabel__10wxCheckBoxFRC8wxString - ;wxCheckBox::Command(wxCommandEvent&) - Command__10wxCheckBoxFR14wxCommandEvent ;wxBitmapCheckBox::sm_classwxBitmapCheckBox sm_classwxBitmapCheckBox__16wxBitmapCheckBox ;From object file: ..\os2\checklst.cpp @@ -11815,10 +11878,6 @@ EXPORTS SetModal__8wxDialogFUl ;wxDialog::OnCancel(wxCommandEvent&) OnCancel__8wxDialogFR14wxCommandEvent - ;wxDialog::DoGetPosition(int*,int*) const - DoGetPosition__8wxDialogCFPiT1 - ;wxDialog::IsIconized() const - IsIconized__8wxDialogCFv ;wxDialog::IsModal() const IsModal__8wxDialogCFv ;wxDialog::Create(wxWindow*,int,const wxString&,const wxPoint&,const wxSize&,long,const wxString&) @@ -11832,8 +11891,6 @@ EXPORTS OnOK__8wxDialogFR14wxCommandEvent ;wxDialog::OnCloseWindow(wxCloseEvent&) OnCloseWindow__8wxDialogFR12wxCloseEvent - ;wxDialog::DoSetClientSize(int,int) - DoSetClientSize__8wxDialogFiT1 ;wxDialog::Init() Init__8wxDialogFv ;wxDialog::ShowModal() @@ -11847,10 +11904,6 @@ EXPORTS OnSysColourChanged__8wxDialogFR23wxSysColourChangedEvent ;wxDialog::DoShowModal() DoShowModal__8wxDialogFv - ;wxDialog::Destroy() - Destroy__8wxDialogFv - ;wxDialog::Iconize(unsigned long) - Iconize__8wxDialogFUl ;wxDialog::Show(unsigned long) Show__8wxDialogFUl ;wxDialog::OnApply(wxCommandEvent&) @@ -11865,7 +11918,6 @@ EXPORTS OS2WindowProc__8wxDialogFUiPvT2 ;wxDialog::GetEventTable() const GetEventTable__8wxDialogCFv - wxModelessWindows ;wxDialog::sm_eventTable sm_eventTable__8wxDialog ;From object file: ..\os2\dir.cpp @@ -12072,12 +12124,10 @@ EXPORTS FromString__20wxNativeEncodingInfoFRC8wxString ;From object file: ..\os2\frame.cpp ;PUBDEFs (Symbols available from object file): - ;wxFrame::Show(unsigned long) - Show__7wxFrameFUl - ;wxFrame::Iconize(unsigned long) - Iconize__7wxFrameFUl ;wxFrame::HandleMenuSelect(unsigned short,unsigned short,unsigned long) HandleMenuSelect__7wxFrameFUsT1Ul + ;wxFrame::SendSizeEvent() + SendSizeEvent__7wxFrameFv ;wxFrame::OS2TranslateMessage(void**) OS2TranslateMessage__7wxFrameFPPv ;wxFrame::HandlePaint() @@ -12093,14 +12143,8 @@ EXPORTS HandleSize__7wxFrameFiT1Ui ;wxConstructorForwxFrame() wxConstructorForwxFrame__Fv - ;wxFrame::SetIcon(const wxIcon&) - SetIcon__7wxFrameFRC6wxIcon - ;wxFrame::Restore() - Restore__7wxFrameFv - ;wxFrame::IsMaximized() const - IsMaximized__7wxFrameCFv - ;wxFrame::IsIconized() const - IsIconized__7wxFrameCFv + ;wxFrame::Raise() + Raise__7wxFrameFv ;wxFrame::GetClientAreaOrigin() const GetClientAreaOrigin__7wxFrameCFv ;wxFrame::AttachMenuBar(wxMenuBar*) @@ -12111,28 +12155,20 @@ EXPORTS OnSysColourChanged__7wxFrameFR23wxSysColourChangedEvent ;wxFrame::ShowFullScreen(unsigned long,long) ShowFullScreen__7wxFrameFUll - ;wxFrame::DoShowWindow(int) - DoShowWindow__7wxFrameFi + ;wxFrame::m_bUseNativeStatusBar + m_bUseNativeStatusBar__7wxFrame ;wxFrame::sm_eventTable sm_eventTable__7wxFrame ;wxFrame::sm_eventTableEntries sm_eventTableEntries__7wxFrame ;wxFrame::sm_classwxFrame sm_classwxFrame__7wxFrame - ;wxFrame::m_bUseNativeStatusBar - m_bUseNativeStatusBar__7wxFrame ;wxFrame::~wxFrame() __dt__7wxFrameFv ;wxFrame::GetClient() GetClient__7wxFrameFv - ;wxFrame::OS2Create(int,wxWindow*,const char*,wxWindow*,const char*,int,int,int,int,long) - OS2Create__7wxFrameFiP8wxWindowPCcT2T3N41l ;wxFrame::HandleCommand(unsigned short,unsigned short,unsigned long) HandleCommand__7wxFrameFUsT1Ul - ;wxFrame::DoGetSize(int*,int*) const - DoGetSize__7wxFrameCFPiT1 - ;wxFrame::DoGetPosition(int*,int*) const - DoGetPosition__7wxFrameCFPiT1 ;wxFrame::PositionStatusBar() PositionStatusBar__7wxFrameFv ;wxFrame::PositionToolBar() @@ -12141,14 +12177,14 @@ EXPORTS OS2WindowProc__7wxFrameFUiPvT2 ;wxFrame::InternalSetMenuBar() InternalSetMenuBar__7wxFrameFv + ;wxFrame::GetDefaultIcon() const + GetDefaultIcon__7wxFrameCFv ;wxFrame::CreateToolBar(long,int,const wxString&) CreateToolBar__7wxFrameFliRC8wxString - ;wxFrame::Maximize(unsigned long) - Maximize__7wxFrameFUl - ;wxFrame::SetClient(unsigned long) - SetClient__7wxFrameFUl ;wxFrame::IconizeChildFrames(unsigned long) IconizeChildFrames__7wxFrameFUl + ;wxFrame::SetClient(unsigned long) + SetClient__7wxFrameFUl ;wxFrame::DoGetClientSize(int*,int*) const DoGetClientSize__7wxFrameCFPiT1 ;wxFrame::Init() @@ -12159,8 +12195,6 @@ EXPORTS GetEventTable__7wxFrameCFv ;wxFrame::DetachMenuBar() DetachMenuBar__7wxFrameFv - ;wxFrame::AlterChildPos() - AlterChildPos__7wxFrameFv wxFrameMainWndProc wxFrameWndProc ;wxFrame::SetClient(wxWindow*) @@ -14036,6 +14070,49 @@ EXPORTS Remove__9wxToolTipFv ;wxToolTip::hwndTT hwndTT__9wxToolTip + ;From object file: ..\os2\toplevel.cpp + ;PUBDEFs (Symbols available from object file): + __vft19wxTopLevelWindowOS28wxObject + ;wxTopLevelWindowOS2::CreateFrame(const wxString&,const wxPoint&,const wxSize&) + CreateFrame__19wxTopLevelWindowOS2FRC8wxStringRC7wxPointRC6wxSize + ;wxTopLevelWindowOS2::~wxTopLevelWindowOS2() + __dt__19wxTopLevelWindowOS2Fv + ;wxTopLevelWindowOS2::ShowFullScreen(unsigned long,long) + ShowFullScreen__19wxTopLevelWindowOS2FUll + ;wxTopLevelWindowOS2::CreateDialog(unsigned long,const wxString&,const wxPoint&,const wxSize&) + CreateDialog__19wxTopLevelWindowOS2FUlRC8wxStringRC7wxPointRC6wxSize + ;wxTopLevelWindowOS2::DoShowWindow(int) + DoShowWindow__19wxTopLevelWindowOS2Fi + ;wxTopLevelWindowOS2::Init() + Init__19wxTopLevelWindowOS2Fv + ;wxTopLevelWindowOS2::OS2GetCreateWindowFlags(long*) const + OS2GetCreateWindowFlags__19wxTopLevelWindowOS2CFPl + ;wxTopLevelWindowOS2::Iconize(unsigned long) + Iconize__19wxTopLevelWindowOS2FUl + ;wxTopLevelWindowOS2::DoSetClientSize(int,int) + DoSetClientSize__19wxTopLevelWindowOS2FiT1 + ;wxTopLevelWindowOS2::AlterChildPos() + AlterChildPos__19wxTopLevelWindowOS2Fv + ;wxTopLevelWindowOS2::SetIcon(const wxIcon&) + SetIcon__19wxTopLevelWindowOS2FRC6wxIcon + ;wxTopLevelWindowOS2::Restore() + Restore__19wxTopLevelWindowOS2Fv + ;wxTopLevelWindowOS2::IsMaximized() const + IsMaximized__19wxTopLevelWindowOS2CFv + ;wxTopLevelWindowOS2::Maximize(unsigned long) + Maximize__19wxTopLevelWindowOS2FUl + ;wxTopLevelWindowOS2::EnableCloseButton(unsigned long) + EnableCloseButton__19wxTopLevelWindowOS2FUl + ;wxTopLevelWindowOS2::DoGetClientSize(int*,int*) const + DoGetClientSize__19wxTopLevelWindowOS2CFPiT1 + ;wxTopLevelWindowOS2::Create(wxWindow*,int,const wxString&,const wxPoint&,const wxSize&,long,const wxString&) + Create__19wxTopLevelWindowOS2FP8wxWindowiRC8wxStringRC7wxPointRC6wxSizelT3 + ;wxTopLevelWindowOS2::Show(unsigned long) + Show__19wxTopLevelWindowOS2FUl + ;wxTopLevelWindowOS2::IsIconized() const + IsIconized__19wxTopLevelWindowOS2CFv + wxDlgProc + wxModelessWindows ;From object file: ..\os2\utils.cpp ;PUBDEFs (Symbols available from object file): gs_wxBusyCursorOld @@ -14178,6 +14255,10 @@ EXPORTS HandleMouseMove__8wxWindowFiT1Ui ;wxWindow::Raise() Raise__8wxWindowFv + ;wxWindowCreationHook::~wxWindowCreationHook() + __dt__20wxWindowCreationHookFv + ;wxWindow::Update() + Update__8wxWindowFv ;wxWindow::UnsubclassWin() UnsubclassWin__8wxWindowFv ;wxWindow::Lower() @@ -14186,6 +14267,8 @@ EXPORTS HandleMaximize__8wxWindowFv ;wxWindow::HandleDestroy() HandleDestroy__8wxWindowFv + ;wxWindow::Freeze() + Freeze__8wxWindowFv ;wxWindow::DoPopupMenu(wxMenu*,int,int) DoPopupMenu__8wxWindowFP6wxMenuiT2 ;wxWindow::UnpackCommand(void*,void*,unsigned short*,unsigned long*,unsigned short*) @@ -14196,6 +14279,8 @@ EXPORTS sm_eventTable__8wxWindow ;wxWindow::sm_classwxWindow sm_classwxWindow__8wxWindow + ;wxWindowCreationHook::wxWindowCreationHook(wxWindow*) + __ct__20wxWindowCreationHookFP8wxWindow ;wxWindow::SetScrollPos(int,int,unsigned long) SetScrollPos__8wxWindowFiT1Ul ;wxCharCodeWXToOS2(int,unsigned long*) @@ -14228,6 +14313,8 @@ EXPORTS OS2OnMeasureItem__8wxWindowFiPPv ;wxWindow::OS2DestroyWindow() OS2DestroyWindow__8wxWindowFv + ;wxWindow::IsMouseInWindow() const + IsMouseInWindow__8wxWindowCFv ;wxWindow::HandleKeyUp(unsigned long,void*) HandleKeyUp__8wxWindowFUlPv ;wxWindow::HandleKeyDown(unsigned short,void*) @@ -14241,6 +14328,8 @@ EXPORTS wxWndHook ;wxWindow::Reparent(wxWindow*) Reparent__8wxWindowFP8wxWindow + ;wxWindow::OS2GetCreateWindowCoords(const wxPoint&,const wxSize&,int&,int&,int&,int&) const + OS2GetCreateWindowCoords__8wxWindowCFRC7wxPointRC6wxSizeRiN33 ;wxWindow::Enable(unsigned long) Enable__8wxWindowFUl wxWinHandleList @@ -14293,6 +14382,8 @@ EXPORTS ;wxAssociateWinWithHandle(unsigned long,wxWindow*) wxAssociateWinWithHandle__FUlP8wxWindow s_currentMsg + ;wxWindow::OS2Create(char*,const char*,unsigned long,const wxPoint&,const wxSize&,void*,unsigned long,unsigned long) + OS2Create__8wxWindowFPcPCcUlRC7wxPointRC6wxSizePvN23 ;wxWindow::GetOS2ParentHeight(wxWindow*) GetOS2ParentHeight__8wxWindowFP8wxWindow ;wxWindow::Refresh(unsigned long,const wxRect*) @@ -14340,6 +14431,10 @@ EXPORTS __dt__8wxWindowFv ;wxGetActiveWindow() wxGetActiveWindow__Fv + ;wxCheckWindowWndProc(unsigned long,void*(*)(unsigned long,unsigned long,void*,void*)) + wxCheckWindowWndProc__FUlPFUlT1PvT3_Pv + ;wxWindow::Thaw() + Thaw__8wxWindowFv ;wxWindow::OS2WindowProc(unsigned int,void*,void*) OS2WindowProc__8wxWindowFUiPvT2 ;wxWindow::OS2TranslateMessage(void**) @@ -14374,8 +14469,6 @@ EXPORTS HandleActivate__8wxWindowFiUl ;wxWindow::FindItemByHWND(unsigned long,unsigned long) const FindItemByHWND__8wxWindowCFUlT1 - ;wxWindow::OS2Create(unsigned long,char*,const char*,unsigned long,long,long,long,long,unsigned long,unsigned long,unsigned long,void*,void*,unsigned long) - OS2Create__8wxWindowFUlPcPCcT1lN35N31PvT12_T1 ;wxWindow::HandleChar(unsigned long,void*,unsigned long) HandleChar__8wxWindowFUlPvT1 ;wxWindow::DoMoveWindow(int,int,int,int)