wxMenu* wxCurrentPopupMenu = NULL;
#endif // wxUSE_MENUS_NATIVE
-#if !defined(__VISAGECPP__) || (__IBMCPP__ < 400)
-extern wxChar wxCanvasClassName[];
-#endif
wxList* wxWinHandleList = NULL;
// ---------------------------------------------------------------------------
{
m_isBeingDeleted = TRUE;
- OS2DetachWindowMenu();
for (wxWindow* pWin = GetParent(); pWin; pWin = pWin->GetParent())
{
wxFrame* pFrame = wxDynamicCast(pWin, wxFrame);
return wxGetWindowText(GetHWND());
} // end of wxWindowOS2::GetTitle
-void wxWindowOS2::CaptureMouse()
+void wxWindowOS2::DoCaptureMouse()
{
HWND hWnd = GetHwnd();
}
} // end of wxWindowOS2::GetTitle
-void wxWindowOS2::ReleaseMouse()
+void wxWindowOS2::DoReleaseMouse()
{
if (m_bWinCaptured)
{
RECTL vRect;
::WinQueryWindowRect(hWnd, &vRect);
+ if (IsKindOf(CLASSINFO(wxDialog)))
+ {
+ RECTL vTitle;
+ HWND hWndTitle;
+ //
+ // For a Dialog we have to explicitly request the client portion.
+ // For a Frame the hWnd IS the client window
+ //
+ hWndTitle = ::WinWindowFromID(hWnd, FID_TITLEBAR);
+ if (::WinQueryWindowRect(hWndTitle, &vTitle))
+ {
+ if (vTitle.yTop - vTitle.yBottom == 0)
+ {
+ //
+ // Dialog has not been created yet, use a default
+ //
+ vTitle.yTop = 20;
+ }
+ vRect.yTop -= (vTitle.yTop - vTitle.yBottom);
+ }
+
+ ULONG uStyle = ::WinQueryWindowULong(hWnd, QWL_STYLE);
+
+ //
+ // Deal with borders
+ //
+ if (uStyle & FCF_DLGBORDER)
+ {
+ vRect.xLeft += 4;
+ vRect.xRight -= 4;
+ vRect.yTop -= 4;
+ vRect.yBottom += 4;
+ }
+ else if (uStyle & FCF_SIZEBORDER)
+ {
+ vRect.xLeft += 4;
+ vRect.xRight -= 4;
+ vRect.yTop -= 4;
+ vRect.yBottom += 4;
+ }
+ else if (uStyle & FCF_BORDER)
+ {
+ vRect.xLeft += 2;
+ vRect.xRight -= 2;
+ vRect.yTop -= 2;
+ vRect.yBottom += 2;
+ }
+ else // make some kind of adjustment or top sizers ram into the titlebar!
+ {
+ vRect.xLeft += 3;
+ vRect.xRight -= 3;
+ vRect.yTop -= 3;
+ vRect.yBottom += 3;
+ }
+ }
if (pWidth)
- *pWidth = vRect.xRight;
+ *pWidth = vRect.xRight - vRect.xLeft;
if (pHeight)
- *pHeight = vRect.yTop;
+ *pHeight = vRect.yTop - vRect.yBottom;
} // end of wxWindowOS2::DoGetClientSize
void wxWindowOS2::DoMoveWindow(
HWND hParent;
wxWindow* pParent = GetParent();
- if (pParent)
+ if (pParent && !IsKindOf(CLASSINFO(wxDialog)))
{
int nOS2Height = GetOS2ParentHeight(pParent);
int nY2 = nY;
wxWindow* pParent = (wxWindow*)GetParent();
- if (pParent)
+ if (pParent && !IsKindOf(CLASSINFO(wxDialog)))
{
int nOS2Height = GetOS2ParentHeight(pParent);
);
break;
+ case WM_WINDOWPOSCHANGED:
+
+ //
+ // Dialogs under OS/2 do not get WM_SIZE events at all.
+ // Instead they get this, which can function much like WM_SIZE
+ // PSWP contains the new sizes and positioning, PSWP+1 the old
+ // We use this because ADJUSTWINDOWPOS comes BEFORE the new
+ // position is added and our auto layout does a WinQueryWindowRect
+ // to get the CURRENT client size. That is the size used to position
+ // child controls, so we need to already be sized
+ // in order to get the child controls positoned properly.
+ //
+ if (IsKindOf(CLASSINFO(wxDialog)))
+ {
+ PSWP pSwp = (PSWP)PVOIDFROMMP(wParam);
+
+ bProcessed = HandleSize( pSwp->cx
+ ,pSwp->cy
+ ,(WXUINT)lParam
+ );
+ }
+ break;
+
case WM_ACTIVATE:
{
WXWORD wState;
#endif // __WXDEBUG__
if (IsKindOf(CLASSINFO(wxFrame)))
mResult = ::WinDefWindowProc(m_hWnd, uMsg, wParam, lParam);
+ else if (IsKindOf(CLASSINFO(wxDialog)))
+ mResult = ::WinDefDlgProc( m_hWnd, uMsg, wParam, lParam);
else
mResult = OS2DefWindowProc(uMsg, wParam, lParam);
}
{
}
-void wxWindowOS2::OS2DetachWindowMenu()
-{
-#ifndef __WXUNIVERSAL__
- if (m_hMenu)
- {
- HMENU hMenu = (HMENU)m_hMenu;
-
- int nN = (int)::WinSendMsg(hMenu, MM_QUERYITEMCOUNT, 0, 0);
- int i;
-
- for (i = 0; i < nN; i++)
- {
- wxChar zBuf[100];
- int nChars = (int)::WinSendMsg( hMenu
- ,MM_QUERYITEMTEXT
- ,MPFROM2SHORT(i, nN)
- ,zBuf
- );
- if (!nChars)
- {
- wxLogLastError(wxT("GetMenuString"));
- continue;
- }
-
- if (wxStrcmp(zBuf, wxT("&Window")) == 0)
- {
- ::WinSendMsg(hMenu, MM_DELETEITEM, MPFROM2SHORT(i, TRUE), 0);
- break;
- }
- }
- }
-#endif // __WXUNIVERSAL__
-} // end of wxWindowOS2::OS2DetachWindowMenu
-
bool wxWindowOS2::OS2GetCreateWindowCoords(
const wxPoint& rPos
, const wxSize& rSize
// Case 1
//
if (pParent->IsKindOf(CLASSINFO(wxDialog)))
- return(pParent->GetSize().y);
+ return(pParent->GetClientSize().y);
//
// Case 2 -- if we are one of the separately built standard Frame