OS/2 Updates
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6871 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -93,12 +93,6 @@ HICON wxDEFAULT_MDIPARENTFRAME_ICON = (HICON) NULL;
|
|||||||
|
|
||||||
HBRUSH wxDisableButtonBrush = (HBRUSH) 0;
|
HBRUSH wxDisableButtonBrush = (HBRUSH) 0;
|
||||||
|
|
||||||
MRESULT EXPENTRY wxWndProc( HWND
|
|
||||||
,ULONG
|
|
||||||
,MPARAM
|
|
||||||
,MPARAM
|
|
||||||
);
|
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
// implementation
|
// implementation
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
@@ -342,37 +342,21 @@ void wxFrame::DoShowWindow(
|
|||||||
int bShowCmd
|
int bShowCmd
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
HWND hClient;
|
HWND hClient = NULLHANDLE;
|
||||||
HWND hTitlebar = NULLHANDLE;
|
|
||||||
HWND hHScroll = NULLHANDLE;
|
|
||||||
HWND hVScroll = NULLHANDLE;
|
|
||||||
HWND hMenuBar = NULLHANDLE;
|
|
||||||
SWP vSwp;
|
SWP vSwp;
|
||||||
SWP vSwpTitlebar;
|
|
||||||
SWP vSwpVScroll;
|
|
||||||
SWP vSwpHScroll;
|
|
||||||
SWP vSwpMenu;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Send anything to initialize the frame
|
// Reset the window position
|
||||||
//
|
//
|
||||||
WinQueryWindowPos(GetHwnd(), &vSwp);
|
|
||||||
hClient = WinWindowFromID(GetHwnd(), FID_CLIENT);
|
hClient = WinWindowFromID(GetHwnd(), FID_CLIENT);
|
||||||
hTitlebar = WinWindowFromID(GetHwnd(), FID_TITLEBAR);
|
WinQueryWindowPos(GetHwnd(), &vSwp);
|
||||||
WinQueryWindowPos(hTitlebar, &vSwpTitlebar);
|
WinSetWindowPos( GetHwnd()
|
||||||
hHScroll = WinWindowFromID(GetHwnd(), FID_HORZSCROLL);
|
|
||||||
WinQueryWindowPos(hHScroll, &vSwpHScroll);
|
|
||||||
hVScroll = WinWindowFromID(GetHwnd(), FID_VERTSCROLL);
|
|
||||||
WinQueryWindowPos(hVScroll, &vSwpVScroll);
|
|
||||||
hMenuBar = WinWindowFromID(GetHwnd(), FID_MENU);
|
|
||||||
WinQueryWindowPos(hMenuBar, &vSwpMenu);
|
|
||||||
WinSetWindowPos( hClient
|
|
||||||
,HWND_TOP
|
,HWND_TOP
|
||||||
,SV_CXSIZEBORDER
|
,vSwp.x
|
||||||
,(SV_CYSIZEBORDER - 1) + vSwpHScroll.cy
|
,vSwp.y
|
||||||
,vSwp.cx - ((SV_CXSIZEBORDER * 2) + vSwpVScroll.cx)
|
,vSwp.cx
|
||||||
,vSwp.cy - ((SV_CYSIZEBORDER * 2) + 1 + vSwpTitlebar.cy + vSwpMenu.cy + vSwpHScroll.cy)
|
,vSwp.cy
|
||||||
,SWP_SIZE | SWP_MOVE
|
,SWP_SIZE | SWP_MOVE | SWP_ACTIVATE
|
||||||
);
|
);
|
||||||
::WinShowWindow(GetHwnd(), (BOOL)bShowCmd);
|
::WinShowWindow(GetHwnd(), (BOOL)bShowCmd);
|
||||||
::WinShowWindow(hClient, (BOOL)bShowCmd);
|
::WinShowWindow(hClient, (BOOL)bShowCmd);
|
||||||
@@ -554,6 +538,17 @@ void wxFrame::SetMenuBar(
|
|||||||
{
|
{
|
||||||
ERRORID vError;
|
ERRORID vError;
|
||||||
wxString sError;
|
wxString sError;
|
||||||
|
HWND hClient = NULLHANDLE;
|
||||||
|
HWND hFrame = NULLHANDLE;
|
||||||
|
HWND hTitlebar = NULLHANDLE;
|
||||||
|
HWND hHScroll = NULLHANDLE;
|
||||||
|
HWND hVScroll = NULLHANDLE;
|
||||||
|
HWND hMenuBar = NULLHANDLE;
|
||||||
|
SWP vSwp;
|
||||||
|
SWP vSwpTitlebar;
|
||||||
|
SWP vSwpVScroll;
|
||||||
|
SWP vSwpHScroll;
|
||||||
|
SWP vSwpMenu;
|
||||||
|
|
||||||
if (!pMenuBar)
|
if (!pMenuBar)
|
||||||
{
|
{
|
||||||
@@ -601,6 +596,28 @@ void wxFrame::SetMenuBar(
|
|||||||
|
|
||||||
m_frameMenuBar = pMenuBar;
|
m_frameMenuBar = pMenuBar;
|
||||||
pMenuBar->Attach(this);
|
pMenuBar->Attach(this);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Now resize the client to fit the new frame
|
||||||
|
//
|
||||||
|
WinQueryWindowPos(GetHwnd(), &vSwp);
|
||||||
|
hClient = WinWindowFromID(GetHwnd(), FID_CLIENT);
|
||||||
|
hTitlebar = WinWindowFromID(GetHwnd(), FID_TITLEBAR);
|
||||||
|
WinQueryWindowPos(hTitlebar, &vSwpTitlebar);
|
||||||
|
hHScroll = WinWindowFromID(GetHwnd(), FID_HORZSCROLL);
|
||||||
|
WinQueryWindowPos(hHScroll, &vSwpHScroll);
|
||||||
|
hVScroll = WinWindowFromID(GetHwnd(), FID_VERTSCROLL);
|
||||||
|
WinQueryWindowPos(hVScroll, &vSwpVScroll);
|
||||||
|
hMenuBar = WinWindowFromID(GetHwnd(), FID_MENU);
|
||||||
|
WinQueryWindowPos(hMenuBar, &vSwpMenu);
|
||||||
|
WinSetWindowPos( hClient
|
||||||
|
,HWND_TOP
|
||||||
|
,SV_CXSIZEBORDER/2
|
||||||
|
,(SV_CYSIZEBORDER/2) + vSwpHScroll.cy/2
|
||||||
|
,vSwp.cx - ((SV_CXSIZEBORDER + 1) + vSwpVScroll.cx)
|
||||||
|
,vSwp.cy - ((SV_CYSIZEBORDER + 1) + vSwpTitlebar.cy + vSwpMenu.cy + vSwpHScroll.cy/2)
|
||||||
|
,SWP_SIZE | SWP_MOVE
|
||||||
|
);
|
||||||
} // end of wxFrame::SetMenuBar
|
} // end of wxFrame::SetMenuBar
|
||||||
|
|
||||||
void wxFrame::InternalSetMenuBar()
|
void wxFrame::InternalSetMenuBar()
|
||||||
@@ -778,25 +795,16 @@ bool wxFrame::OS2Create(
|
|||||||
FRAMECDATA vFrameCtlData;
|
FRAMECDATA vFrameCtlData;
|
||||||
HWND hParent = NULLHANDLE;
|
HWND hParent = NULLHANDLE;
|
||||||
HWND hClient = NULLHANDLE;
|
HWND hClient = NULLHANDLE;
|
||||||
|
HWND hFrame = NULLHANDLE;
|
||||||
HWND hTitlebar = NULLHANDLE;
|
HWND hTitlebar = NULLHANDLE;
|
||||||
HWND hHScroll = NULLHANDLE;
|
HWND hHScroll = NULLHANDLE;
|
||||||
HWND hVScroll = NULLHANDLE;
|
HWND hVScroll = NULLHANDLE;
|
||||||
HWND hMenuBar = NULLHANDLE;
|
|
||||||
HWND hMenu1 = NULLHANDLE;
|
|
||||||
HWND hMenu2 = NULLHANDLE;
|
|
||||||
HWND hFrame = NULLHANDLE;
|
|
||||||
SWP vSwp;
|
SWP vSwp;
|
||||||
SWP vSwpTitlebar;
|
SWP vSwpTitlebar;
|
||||||
SWP vSwpVScroll;
|
SWP vSwpVScroll;
|
||||||
SWP vSwpHScroll;
|
SWP vSwpHScroll;
|
||||||
SWP vSwpMenu;
|
|
||||||
RGB2 vRgb;
|
|
||||||
|
|
||||||
m_hDefaultIcon = (WXHICON) (wxSTD_FRAME_ICON ? wxSTD_FRAME_ICON : wxDEFAULT_FRAME_ICON);
|
m_hDefaultIcon = (WXHICON) (wxSTD_FRAME_ICON ? wxSTD_FRAME_ICON : wxDEFAULT_FRAME_ICON);
|
||||||
memset(&vSwp, '\0', sizeof(SWP));
|
|
||||||
memset(&vSwpTitlebar, '\0', sizeof(SWP));
|
|
||||||
memset(&vSwpVScroll, '\0', sizeof(SWP));
|
|
||||||
memset(&vSwpHScroll, '\0', sizeof(SWP));
|
|
||||||
|
|
||||||
if (pParent)
|
if (pParent)
|
||||||
hParent = GetWinHwnd(pParent);
|
hParent = GetWinHwnd(pParent);
|
||||||
@@ -881,6 +889,15 @@ bool wxFrame::OS2Create(
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hFrame = GetHwnd();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Since under PM the controling window proc is associated with the client window handle
|
||||||
|
// not the frame's we have to perform the hook here in order to associated the client handle,
|
||||||
|
// not the frame's with the window object !
|
||||||
|
//
|
||||||
|
|
||||||
|
wxWndHook = this;
|
||||||
//
|
//
|
||||||
// Create the client window. We must call the API from here rather than
|
// Create the client window. We must call the API from here rather than
|
||||||
// the static base class create because we need a separate handle
|
// the static base class create because we need a separate handle
|
||||||
@@ -899,6 +916,8 @@ bool wxFrame::OS2Create(
|
|||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxWndHook = NULL;
|
||||||
//
|
//
|
||||||
// Send anything to initialize the frame
|
// Send anything to initialize the frame
|
||||||
//
|
//
|
||||||
@@ -921,47 +940,26 @@ bool wxFrame::OS2Create(
|
|||||||
))
|
))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
WinQueryWindowPos(hFrame, &vSwp);
|
WinQueryWindowPos(GetHwnd(), &vSwp);
|
||||||
|
hClient = WinWindowFromID(GetHwnd(), FID_CLIENT);
|
||||||
|
hTitlebar = WinWindowFromID(GetHwnd(), FID_TITLEBAR);
|
||||||
|
WinQueryWindowPos(hTitlebar, &vSwpTitlebar);
|
||||||
|
hHScroll = WinWindowFromID(GetHwnd(), FID_HORZSCROLL);
|
||||||
|
WinQueryWindowPos(hHScroll, &vSwpHScroll);
|
||||||
|
hVScroll = WinWindowFromID(GetHwnd(), FID_VERTSCROLL);
|
||||||
|
WinQueryWindowPos(hVScroll, &vSwpVScroll);
|
||||||
|
WinSetWindowPos( hClient
|
||||||
|
,HWND_TOP
|
||||||
|
,SV_CXSIZEBORDER/2
|
||||||
|
,(SV_CYSIZEBORDER/2) + vSwpHScroll.cy/2
|
||||||
|
,vSwp.cx - ((SV_CXSIZEBORDER + 1) + vSwpVScroll.cx)
|
||||||
|
,vSwp.cy - ((SV_CYSIZEBORDER + 1) + vSwpTitlebar.cy + vSwpHScroll.cy/2)
|
||||||
|
,SWP_SIZE | SWP_MOVE
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Set the client window's background, otherwise it is transparent!
|
// Set the client window's background, otherwise it is transparent!
|
||||||
//
|
//
|
||||||
wxColour vColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW);
|
|
||||||
|
|
||||||
vRgb.bRed = (BYTE)vColour.Red();
|
|
||||||
vRgb.bGreen = (BYTE)vColour.Green();
|
|
||||||
vRgb.bBlue = (BYTE)vColour.Blue();
|
|
||||||
WinSetPresParam( hClient
|
|
||||||
,PP_BACKGROUNDCOLOR
|
|
||||||
,(ULONG)sizeof(RGB2)
|
|
||||||
,(PVOID)&vRgb
|
|
||||||
);
|
|
||||||
if (ulCreateFlags & FCF_TITLEBAR)
|
|
||||||
{
|
|
||||||
hTitlebar = WinWindowFromID(hFrame, FID_TITLEBAR);
|
|
||||||
WinQueryWindowPos(hTitlebar, &vSwpTitlebar);
|
|
||||||
}
|
|
||||||
if (ulCreateFlags & FCF_HORZSCROLL)
|
|
||||||
{
|
|
||||||
hHScroll = WinWindowFromID(hFrame, FID_HORZSCROLL);
|
|
||||||
WinQueryWindowPos(hHScroll, &vSwpHScroll);
|
|
||||||
}
|
|
||||||
if (ulCreateFlags & FCF_VERTSCROLL)
|
|
||||||
{
|
|
||||||
hVScroll = WinWindowFromID(hFrame, FID_VERTSCROLL);
|
|
||||||
WinQueryWindowPos(hVScroll, &vSwpVScroll);
|
|
||||||
}
|
|
||||||
if (!::WinSetWindowPos( hClient
|
|
||||||
,HWND_TOP
|
|
||||||
,SV_CXSIZEBORDER
|
|
||||||
,(SV_CYSIZEBORDER - 1) + vSwpHScroll.cy
|
|
||||||
,vSwp.cx - ((SV_CXSIZEBORDER * 2) + vSwpVScroll.cx)
|
|
||||||
,vSwp.cy - ((SV_CYSIZEBORDER * 2) + 1 + vSwpTitlebar.cy + vSwpHScroll.cy)
|
|
||||||
,SWP_SIZE | SWP_MOVE
|
|
||||||
))
|
|
||||||
return FALSE;
|
|
||||||
WinQueryWindowPos(hClient, &vSwp);
|
|
||||||
::WinShowWindow(hClient, TRUE);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
} // end of wxFrame::OS2Create
|
} // end of wxFrame::OS2Create
|
||||||
|
|
||||||
|
@@ -324,6 +324,7 @@ bool wxMenu::DoInsertOrAppend(
|
|||||||
//
|
//
|
||||||
// Menu is just a normal string (passed in data parameter)
|
// Menu is just a normal string (passed in data parameter)
|
||||||
//
|
//
|
||||||
|
wxSetShortCutKey((wxChar*)pItem->GetText().c_str());
|
||||||
vItem.afStyle |= MIS_TEXT;
|
vItem.afStyle |= MIS_TEXT;
|
||||||
pData = (char*)pItem->GetText().c_str();
|
pData = (char*)pItem->GetText().c_str();
|
||||||
}
|
}
|
||||||
@@ -730,6 +731,8 @@ WXHMENU wxMenuBar::Create()
|
|||||||
return NULLHANDLE;
|
return NULLHANDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_menus[i]->m_vMenuData.iPosition = i;
|
||||||
|
|
||||||
rc = (APIRET)::WinSendMsg(hMenuBar, MM_INSERTITEM, (MPARAM)&m_menus[i]->m_vMenuData, (MPARAM)m_titles[i].c_str());
|
rc = (APIRET)::WinSendMsg(hMenuBar, MM_INSERTITEM, (MPARAM)&m_menus[i]->m_vMenuData, (MPARAM)m_titles[i].c_str());
|
||||||
if (rc == MIT_MEMERROR || rc == MIT_ERROR)
|
if (rc == MIT_MEMERROR || rc == MIT_ERROR)
|
||||||
{
|
{
|
||||||
@@ -910,6 +913,8 @@ bool wxMenuBar::Append(
|
|||||||
|
|
||||||
wxCHECK_MSG(hSubmenu, FALSE, wxT("can't append invalid menu to menubar"));
|
wxCHECK_MSG(hSubmenu, FALSE, wxT("can't append invalid menu to menubar"));
|
||||||
|
|
||||||
|
wxSetShortCutKey((wxChar*)rTitle.c_str());
|
||||||
|
|
||||||
wxString Title = TextToLabel(rTitle);
|
wxString Title = TextToLabel(rTitle);
|
||||||
if (!wxMenuBarBase::Append(pMenu, Title))
|
if (!wxMenuBarBase::Append(pMenu, Title))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -1069,3 +1074,23 @@ wxMenuItem* wxMenuBar::FindItem(
|
|||||||
return pItem;
|
return pItem;
|
||||||
} // end of wxMenuBar::FindItem
|
} // end of wxMenuBar::FindItem
|
||||||
|
|
||||||
|
//
|
||||||
|
// wxWindows' default shortcut identifier is WIN32's "&" but
|
||||||
|
// OS2's is "~" so we have to change this and must watch for the
|
||||||
|
// sequence, "&&" converting only the first one
|
||||||
|
//
|
||||||
|
void wxSetShortCutKey(
|
||||||
|
wxChar* zText
|
||||||
|
)
|
||||||
|
{
|
||||||
|
for (int i = 0; zText[i] != '\0'; i++)
|
||||||
|
{
|
||||||
|
if (zText[i] == '&')
|
||||||
|
{
|
||||||
|
zText[i] = '~';
|
||||||
|
if (zText[i+1] == '&')
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1674,12 +1674,12 @@ bool wxWindow::OS2ProcessMessage(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
// Let Dialogs process
|
||||||
|
//
|
||||||
|
if (::WinSendMsg(pQMsg->hwnd, WM_QUERYDLGCODE, pQMsg, 0));
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// Let Dialogs process
|
|
||||||
//
|
|
||||||
if (::WinSendMsg(pQMsg->hwnd, WM_QUERYDLGCODE, pQMsg, 0));
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
#if wxUSE_TOOLTIPS
|
#if wxUSE_TOOLTIPS
|
||||||
if ( m_tooltip )
|
if ( m_tooltip )
|
||||||
|
Reference in New Issue
Block a user