Several updates for fixing the subclassing problems and accelerator processing
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8233 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -102,7 +102,6 @@ public:
|
|||||||
#endif // wxUSE_STATUSBAR
|
#endif // wxUSE_STATUSBAR
|
||||||
|
|
||||||
WXHMENU GetWinMenu() const { return m_hMenu; }
|
WXHMENU GetWinMenu() const { return m_hMenu; }
|
||||||
WXHWND GetFrame() const { return m_hFrame; }
|
|
||||||
|
|
||||||
// Returns the origin of client area (may be different from (0,0) if the
|
// Returns the origin of client area (may be different from (0,0) if the
|
||||||
// frame has a toolbar)
|
// frame has a toolbar)
|
||||||
@@ -205,13 +204,6 @@ private:
|
|||||||
WXHWND m_hWndToolTip;
|
WXHWND m_hWndToolTip;
|
||||||
#endif // tooltips
|
#endif // tooltips
|
||||||
|
|
||||||
//
|
|
||||||
// The main handle of a frame window, that used for message processing
|
|
||||||
// is the client handle under PM. But we still need the frame handle
|
|
||||||
// as well
|
|
||||||
//
|
|
||||||
WXHWND m_hFrame;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Handles to child windows of the Frame that we don't have child objects for
|
// Handles to child windows of the Frame that we don't have child objects for
|
||||||
//
|
//
|
||||||
|
@@ -90,7 +90,7 @@ wxAcceleratorTable::wxAcceleratorTable(
|
|||||||
|
|
||||||
::WinSetAccelTable( vHabmain
|
::WinSetAccelTable( vHabmain
|
||||||
,hAccel
|
,hAccel
|
||||||
,(HWND)pFrame->GetFrame()
|
,(HWND)pFrame->GetHWND()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
M_ACCELDATA->m_hAccel = hAccel;
|
M_ACCELDATA->m_hAccel = hAccel;
|
||||||
@@ -153,7 +153,7 @@ wxAcceleratorTable::wxAcceleratorTable(
|
|||||||
|
|
||||||
::WinSetAccelTable( vHabmain
|
::WinSetAccelTable( vHabmain
|
||||||
,M_ACCELDATA->m_hAccel
|
,M_ACCELDATA->m_hAccel
|
||||||
,(HWND)pFrame->GetFrame()
|
,(HWND)pFrame->GetHWND()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -184,7 +184,7 @@ bool wxApp::RegisterWindowClasses(
|
|||||||
if (!::WinRegisterClass( vHab
|
if (!::WinRegisterClass( vHab
|
||||||
,wxFrameClassName
|
,wxFrameClassName
|
||||||
,(PFNWP)wxWndProc
|
,(PFNWP)wxWndProc
|
||||||
,CS_SIZEREDRAW | CS_MOVENOTIFY | CS_SYNCPAINT
|
,CS_SIZEREDRAW | CS_MOVENOTIFY | CS_SYNCPAINT | CS_FRAME
|
||||||
,sizeof(ULONG)
|
,sizeof(ULONG)
|
||||||
))
|
))
|
||||||
{
|
{
|
||||||
@@ -651,11 +651,11 @@ int wxApp::MainLoop()
|
|||||||
#if wxUSE_THREADS
|
#if wxUSE_THREADS
|
||||||
wxMutexGuiLeaveOrEnter();
|
wxMutexGuiLeaveOrEnter();
|
||||||
#endif // wxUSE_THREADS
|
#endif // wxUSE_THREADS
|
||||||
while (!Pending() && ProcessIdle())
|
while (!Pending() && ProcessIdle())
|
||||||
{
|
{
|
||||||
// wxUsleep(10000);
|
// wxUsleep(10000);
|
||||||
}
|
}
|
||||||
DoMessage();
|
DoMessage();
|
||||||
}
|
}
|
||||||
return (int)svCurrentMsg.mp1;
|
return (int)svCurrentMsg.mp1;
|
||||||
} // end of wxApp::MainLoop
|
} // end of wxApp::MainLoop
|
||||||
@@ -761,11 +761,11 @@ bool wxApp::ProcessMessage(
|
|||||||
//
|
//
|
||||||
// Anyone for a non-translation message? Try youngest descendants first.
|
// Anyone for a non-translation message? Try youngest descendants first.
|
||||||
//
|
//
|
||||||
for (pWnd = pWndThis; pWnd; pWnd = pWnd->GetParent())
|
// for (pWnd = pWndThis; pWnd; pWnd = pWnd->GetParent())
|
||||||
{
|
// {
|
||||||
if (pWnd->OS2ProcessMessage(pWxmsg))
|
// if (pWnd->OS2ProcessMessage(pWxmsg))
|
||||||
return TRUE;
|
// return TRUE;
|
||||||
}
|
// }
|
||||||
return FALSE;
|
return FALSE;
|
||||||
} // end of wxApp::ProcessMessage
|
} // end of wxApp::ProcessMessage
|
||||||
|
|
||||||
|
@@ -164,6 +164,7 @@ bool wxFrame::Create(
|
|||||||
wxFrame::~wxFrame()
|
wxFrame::~wxFrame()
|
||||||
{
|
{
|
||||||
m_isBeingDeleted = TRUE;
|
m_isBeingDeleted = TRUE;
|
||||||
|
|
||||||
wxTopLevelWindows.DeleteObject(this);
|
wxTopLevelWindows.DeleteObject(this);
|
||||||
|
|
||||||
DeleteAllBars();
|
DeleteAllBars();
|
||||||
@@ -174,7 +175,7 @@ wxFrame::~wxFrame()
|
|||||||
|
|
||||||
if (wxTheApp->GetExitOnFrameDelete())
|
if (wxTheApp->GetExitOnFrameDelete())
|
||||||
{
|
{
|
||||||
::WinPostMsg(m_hFrame, WM_QUIT, 0, 0);
|
::WinPostMsg(GetHWND(), WM_QUIT, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
wxModelessWindows.DeleteObject(this);
|
wxModelessWindows.DeleteObject(this);
|
||||||
@@ -262,7 +263,7 @@ void wxFrame::DoSetClientSize(
|
|||||||
|
|
||||||
::WinQueryWindowRect(GetHwnd(), &vRect);
|
::WinQueryWindowRect(GetHwnd(), &vRect);
|
||||||
|
|
||||||
::WinQueryWindowRect(m_hFrame, &vRect2);
|
::WinQueryWindowRect(GetHWND(), &vRect2);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Find the difference between the entire window (title bar and all)
|
// Find the difference between the entire window (title bar and all)
|
||||||
@@ -319,7 +320,7 @@ void wxFrame::DoGetSize(
|
|||||||
{
|
{
|
||||||
RECTL vRect;
|
RECTL vRect;
|
||||||
|
|
||||||
::WinQueryWindowRect(m_hFrame, &vRect);
|
::WinQueryWindowRect(GetHWND(), &vRect);
|
||||||
*pWidth = vRect.xRight - vRect.xLeft;
|
*pWidth = vRect.xRight - vRect.xLeft;
|
||||||
*pHeight = vRect.yTop - vRect.yBottom;
|
*pHeight = vRect.yTop - vRect.yBottom;
|
||||||
} // end of wxFrame::DoGetSize
|
} // end of wxFrame::DoGetSize
|
||||||
@@ -332,7 +333,7 @@ void wxFrame::DoGetPosition(
|
|||||||
RECTL vRect;
|
RECTL vRect;
|
||||||
POINTL vPoint;
|
POINTL vPoint;
|
||||||
|
|
||||||
::WinQueryWindowRect(m_hFrame, &vRect);
|
::WinQueryWindowRect(GetHWND(), &vRect);
|
||||||
vPoint.x = vRect.xLeft;
|
vPoint.x = vRect.xLeft;
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -352,7 +353,7 @@ void wxFrame::DoShowWindow(
|
|||||||
int bShowCmd
|
int bShowCmd
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
::WinShowWindow(m_hFrame, (BOOL)bShowCmd);
|
::WinShowWindow(GetHWND(), (BOOL)bShowCmd);
|
||||||
m_bIconized = bShowCmd == SWP_MINIMIZE;
|
m_bIconized = bShowCmd == SWP_MINIMIZE;
|
||||||
} // end of wxFrame::DoShowWindow
|
} // end of wxFrame::DoShowWindow
|
||||||
|
|
||||||
@@ -368,9 +369,9 @@ bool wxFrame::Show(
|
|||||||
{
|
{
|
||||||
wxActivateEvent vEvent(wxEVT_ACTIVATE, TRUE, m_windowId);
|
wxActivateEvent vEvent(wxEVT_ACTIVATE, TRUE, m_windowId);
|
||||||
|
|
||||||
::WinQueryWindowPos(m_hFrame, &vSwp);
|
::WinQueryWindowPos(GetHWND(), &vSwp);
|
||||||
m_bIconized = vSwp.fl & SWP_MINIMIZE;
|
m_bIconized = vSwp.fl & SWP_MINIMIZE;
|
||||||
::WinEnableWindow(m_hFrame, TRUE);
|
::WinEnableWindow(GetHWND(), TRUE);
|
||||||
vEvent.SetEventObject(this);
|
vEvent.SetEventObject(this);
|
||||||
GetEventHandler()->ProcessEvent(vEvent);
|
GetEventHandler()->ProcessEvent(vEvent);
|
||||||
}
|
}
|
||||||
@@ -437,7 +438,7 @@ bool wxFrame::IsMaximized() const
|
|||||||
SWP vSwp;
|
SWP vSwp;
|
||||||
bool bIconic;
|
bool bIconic;
|
||||||
|
|
||||||
::WinQueryWindowPos(m_hFrame, &vSwp);
|
::WinQueryWindowPos(GetHWND(), &vSwp);
|
||||||
return (vSwp.fl & SWP_MAXIMIZE);
|
return (vSwp.fl & SWP_MAXIMIZE);
|
||||||
} // end of wxFrame::IsMaximized
|
} // end of wxFrame::IsMaximized
|
||||||
|
|
||||||
@@ -449,12 +450,12 @@ void wxFrame::SetIcon(
|
|||||||
|
|
||||||
if ((m_icon.GetHICON()) != NULLHANDLE)
|
if ((m_icon.GetHICON()) != NULLHANDLE)
|
||||||
{
|
{
|
||||||
::WinSendMsg( m_hFrame
|
::WinSendMsg( GetHWND()
|
||||||
,WM_SETICON
|
,WM_SETICON
|
||||||
,(MPARAM)((HPOINTER)m_icon.GetHICON())
|
,(MPARAM)((HPOINTER)m_icon.GetHICON())
|
||||||
,NULL
|
,NULL
|
||||||
);
|
);
|
||||||
::WinSendMsg( m_hFrame
|
::WinSendMsg( GetHWND()
|
||||||
,WM_UPDATEFRAME
|
,WM_UPDATEFRAME
|
||||||
,(MPARAM)FCF_ICON
|
,(MPARAM)FCF_ICON
|
||||||
,(MPARAM)0
|
,(MPARAM)0
|
||||||
@@ -487,7 +488,7 @@ wxStatusBar* wxFrame::OnCreateStatusBar(
|
|||||||
// so we have to set the parent to actually be the Frame.
|
// so we have to set the parent to actually be the Frame.
|
||||||
//
|
//
|
||||||
hWnd = pStatusBar->GetHWND();
|
hWnd = pStatusBar->GetHWND();
|
||||||
if (!::WinSetParent(hWnd, m_hFrame, FALSE))
|
if (!::WinSetParent(hWnd, GetHWND(), FALSE))
|
||||||
{
|
{
|
||||||
vError = ::WinGetLastError(vHabmain);
|
vError = ::WinGetLastError(vHabmain);
|
||||||
sError = wxPMErrorToStr(vError);
|
sError = wxPMErrorToStr(vError);
|
||||||
@@ -648,14 +649,14 @@ void wxFrame::SetMenuBar(
|
|||||||
//
|
//
|
||||||
// Now resize the client to fit the new frame
|
// Now resize the client to fit the new frame
|
||||||
//
|
//
|
||||||
WinQueryWindowPos(m_hFrame, &vSwp);
|
WinQueryWindowPos(GetHWND(), &vSwp);
|
||||||
hTitlebar = WinWindowFromID(m_hFrame, FID_TITLEBAR);
|
hTitlebar = WinWindowFromID(GetHWND(), FID_TITLEBAR);
|
||||||
WinQueryWindowPos(hTitlebar, &vSwpTitlebar);
|
WinQueryWindowPos(hTitlebar, &vSwpTitlebar);
|
||||||
hHScroll = WinWindowFromID(m_hFrame, FID_HORZSCROLL);
|
hHScroll = WinWindowFromID(GetHWND(), FID_HORZSCROLL);
|
||||||
WinQueryWindowPos(hHScroll, &vSwpHScroll);
|
WinQueryWindowPos(hHScroll, &vSwpHScroll);
|
||||||
hVScroll = WinWindowFromID(m_hFrame, FID_VERTSCROLL);
|
hVScroll = WinWindowFromID(GetHWND(), FID_VERTSCROLL);
|
||||||
WinQueryWindowPos(hVScroll, &vSwpVScroll);
|
WinQueryWindowPos(hVScroll, &vSwpVScroll);
|
||||||
hMenuBar = WinWindowFromID(m_hFrame, FID_MENU);
|
hMenuBar = WinWindowFromID(GetHWND(), FID_MENU);
|
||||||
WinQueryWindowPos(hMenuBar, &vSwpMenu);
|
WinQueryWindowPos(hMenuBar, &vSwpMenu);
|
||||||
WinSetWindowPos( GetHwnd()
|
WinSetWindowPos( GetHwnd()
|
||||||
,HWND_TOP
|
,HWND_TOP
|
||||||
@@ -674,20 +675,20 @@ void wxFrame::InternalSetMenuBar()
|
|||||||
//
|
//
|
||||||
// Set the parent and owner of the menubar to be the frame
|
// Set the parent and owner of the menubar to be the frame
|
||||||
//
|
//
|
||||||
if (!::WinSetParent(m_hMenu, m_hFrame, FALSE))
|
if (!::WinSetParent(m_hMenu, GetHWND(), FALSE))
|
||||||
{
|
{
|
||||||
vError = ::WinGetLastError(vHabmain);
|
vError = ::WinGetLastError(vHabmain);
|
||||||
sError = wxPMErrorToStr(vError);
|
sError = wxPMErrorToStr(vError);
|
||||||
wxLogError("Error setting parent for submenu. Error: %s\n", sError);
|
wxLogError("Error setting parent for submenu. Error: %s\n", sError);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!::WinSetOwner(m_hMenu, m_hFrame))
|
if (!::WinSetOwner(m_hMenu, GetHWND()))
|
||||||
{
|
{
|
||||||
vError = ::WinGetLastError(vHabmain);
|
vError = ::WinGetLastError(vHabmain);
|
||||||
sError = wxPMErrorToStr(vError);
|
sError = wxPMErrorToStr(vError);
|
||||||
wxLogError("Error setting parent for submenu. Error: %s\n", sError);
|
wxLogError("Error setting parent for submenu. Error: %s\n", sError);
|
||||||
}
|
}
|
||||||
WinSendMsg((HWND)m_hFrame, WM_UPDATEFRAME, (MPARAM)FCF_MENU, (MPARAM)0);
|
WinSendMsg((HWND)GetHWND(), WM_UPDATEFRAME, (MPARAM)FCF_MENU, (MPARAM)0);
|
||||||
} // end of wxFrame::InternalSetMenuBar
|
} // end of wxFrame::InternalSetMenuBar
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -749,9 +750,9 @@ bool wxFrame::ShowFullScreen(
|
|||||||
|
|
||||||
if (lStyle & wxFULLSCREEN_NOMENUBAR)
|
if (lStyle & wxFULLSCREEN_NOMENUBAR)
|
||||||
{
|
{
|
||||||
::WinSetParent(m_hMenu, m_hFrame, FALSE);
|
::WinSetParent(m_hMenu, GetHWND(), FALSE);
|
||||||
::WinSetOwner(m_hMenu, m_hFrame);
|
::WinSetOwner(m_hMenu, GetHWND());
|
||||||
::WinSendMsg((HWND)m_hFrame, WM_UPDATEFRAME, (MPARAM)FCF_MENU, (MPARAM)0);
|
::WinSendMsg((HWND)GetHWND(), WM_UPDATEFRAME, (MPARAM)FCF_MENU, (MPARAM)0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -864,9 +865,9 @@ bool wxFrame::ShowFullScreen(
|
|||||||
|
|
||||||
if ((m_lFsStyle & wxFULLSCREEN_NOMENUBAR) && (m_hMenu != 0))
|
if ((m_lFsStyle & wxFULLSCREEN_NOMENUBAR) && (m_hMenu != 0))
|
||||||
{
|
{
|
||||||
::WinSetParent(m_hMenu, m_hFrame, FALSE);
|
::WinSetParent(m_hMenu, GetHWND(), FALSE);
|
||||||
::WinSetOwner(m_hMenu, m_hFrame);
|
::WinSetOwner(m_hMenu, GetHWND());
|
||||||
::WinSendMsg((HWND)m_hFrame, WM_UPDATEFRAME, (MPARAM)FCF_MENU, (MPARAM)0);
|
::WinSendMsg((HWND)GetHWND(), WM_UPDATEFRAME, (MPARAM)FCF_MENU, (MPARAM)0);
|
||||||
}
|
}
|
||||||
Maximize(m_bFsIsMaximized);
|
Maximize(m_bFsIsMaximized);
|
||||||
|
|
||||||
@@ -987,33 +988,16 @@ bool wxFrame::OS2Create(
|
|||||||
//
|
//
|
||||||
// Create the frame window
|
// Create the frame window
|
||||||
//
|
//
|
||||||
if ((m_hFrame = ::WinCreateWindow( hParent // Frame is parent
|
|
||||||
,WC_FRAME // standard frame class
|
|
||||||
,(PSZ)zTitle // Window title
|
|
||||||
,0 // No styles
|
|
||||||
,0, 0, 0, 0 // Window position
|
|
||||||
,NULLHANDLE // Owner
|
|
||||||
,HWND_TOP // Sibling
|
|
||||||
,(ULONG)nId // ID
|
|
||||||
,(PVOID)&vFrameCtlData // Creation data
|
|
||||||
,NULL // Window Pres Params
|
|
||||||
)) == 0L)
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!wxWindow::OS2Create( m_hFrame
|
if (!wxWindow::OS2Create( hParent
|
||||||
,wxFrameClassName
|
,WC_FRAME
|
||||||
,NULL
|
,(PSZ)zTitle
|
||||||
,0L
|
,0
|
||||||
,0L
|
,0, 0, 0, 0
|
||||||
,0L
|
,NULLHANDLE
|
||||||
,0L
|
|
||||||
,0L
|
|
||||||
,m_hFrame
|
|
||||||
,HWND_TOP
|
,HWND_TOP
|
||||||
,(unsigned long)FID_CLIENT
|
,(ULONG)nId
|
||||||
,NULL
|
,(PVOID)&vFrameCtlData
|
||||||
,NULL
|
,NULL
|
||||||
))
|
))
|
||||||
{
|
{
|
||||||
@@ -1023,7 +1007,8 @@ bool wxFrame::OS2Create(
|
|||||||
//
|
//
|
||||||
// Now size everything. If adding a menu the client will need to be resized.
|
// Now size everything. If adding a menu the client will need to be resized.
|
||||||
//
|
//
|
||||||
if (!::WinSetWindowPos( m_hFrame
|
|
||||||
|
if (!::WinSetWindowPos( GetHWND()
|
||||||
,HWND_TOP
|
,HWND_TOP
|
||||||
,nX
|
,nX
|
||||||
,nY
|
,nY
|
||||||
@@ -1033,10 +1018,10 @@ bool wxFrame::OS2Create(
|
|||||||
))
|
))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
uCtlCount = SHORT1FROMMP(::WinSendMsg(m_hFrame, WM_FORMATFRAME, (MPARAM)vSwp, (MPARAM)vRect));
|
uCtlCount = SHORT1FROMMP(::WinSendMsg(GetHWND(), WM_FORMATFRAME, (MPARAM)vSwp, (MPARAM)vRect));
|
||||||
for (int i = 0; i < uCtlCount; i++)
|
for (int i = 0; i < uCtlCount; i++)
|
||||||
{
|
{
|
||||||
if (vSwp[i].hwnd == m_hFrame)
|
if (vSwp[i].hwnd == GetHWND())
|
||||||
memcpy(&m_vSwp, &vSwp[i], sizeof(SWP));
|
memcpy(&m_vSwp, &vSwp[i], sizeof(SWP));
|
||||||
else if (vSwp[i].hwnd == m_hVScroll)
|
else if (vSwp[i].hwnd == m_hVScroll)
|
||||||
memcpy(&m_vSwpVScroll, &vSwp[i], sizeof(SWP));
|
memcpy(&m_vSwpVScroll, &vSwp[i], sizeof(SWP));
|
||||||
@@ -1234,7 +1219,7 @@ bool wxFrame::OS2TranslateMessage(
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
const wxAcceleratorTable& rAcceleratorTable = pMenuBar->GetAccelTable();
|
const wxAcceleratorTable& rAcceleratorTable = pMenuBar->GetAccelTable();
|
||||||
return rAcceleratorTable.Translate(m_hFrame, pMsg);
|
return rAcceleratorTable.Translate(GetHWND(), pMsg);
|
||||||
} // end of wxFrame::OS2TranslateMessage
|
} // end of wxFrame::OS2TranslateMessage
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -1244,7 +1229,7 @@ bool wxFrame::HandlePaint()
|
|||||||
{
|
{
|
||||||
RECTL vRect;
|
RECTL vRect;
|
||||||
|
|
||||||
if (::WinQueryUpdateRect(GetHwnd(), &vRect))
|
if (::WinQueryUpdateRect(GetHWND(), &vRect))
|
||||||
{
|
{
|
||||||
if (m_bIconized)
|
if (m_bIconized)
|
||||||
{
|
{
|
||||||
@@ -1254,7 +1239,7 @@ bool wxFrame::HandlePaint()
|
|||||||
HPOINTER hIcon;
|
HPOINTER hIcon;
|
||||||
|
|
||||||
if (m_icon.Ok())
|
if (m_icon.Ok())
|
||||||
hIcon = (HPOINTER)::WinSendMsg(m_hFrame, WM_QUERYICON, 0L, 0L);
|
hIcon = (HPOINTER)::WinSendMsg(GetHWND(), WM_QUERYICON, 0L, 0L);
|
||||||
else
|
else
|
||||||
hIcon = (HPOINTER)m_hDefaultIcon;
|
hIcon = (HPOINTER)m_hDefaultIcon;
|
||||||
|
|
||||||
@@ -1289,12 +1274,13 @@ bool wxFrame::HandlePaint()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
/* DosBeep(500,500);
|
||||||
HPS hPS;
|
HPS hPS;
|
||||||
RECTL vRect;
|
RECTL vRect;
|
||||||
|
|
||||||
hPS = WinBeginPaint(GetHwnd(), 0L, &vRect);
|
hPS = WinBeginPaint(GetHwnd(), 0L, &vRect);
|
||||||
WinFillRect(hPS, &vRect, SYSCLR_WINDOW);
|
WinFillRect(hPS, &vRect, SYSCLR_WINDOW);
|
||||||
WinEndPaint(hPS);
|
WinEndPaint(hPS);*/
|
||||||
|
|
||||||
return wxWindow::HandlePaint();
|
return wxWindow::HandlePaint();
|
||||||
}
|
}
|
||||||
@@ -1429,8 +1415,9 @@ bool wxFrame::HandleMenuSelect(
|
|||||||
, WXHMENU hMenu
|
, WXHMENU hMenu
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
int nMenuItem;
|
// int nMenuItem;
|
||||||
|
|
||||||
|
/* This is wrong section according to IBM's documentation
|
||||||
if (nFlags == 0xFFFF && hMenu == 0)
|
if (nFlags == 0xFFFF && hMenu == 0)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1450,10 +1437,24 @@ bool wxFrame::HandleMenuSelect(
|
|||||||
//
|
//
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
wxMenuEvent vEvent(wxEVT_MENU_HIGHLIGHT, nMenuItem);
|
*/
|
||||||
|
|
||||||
vEvent.SetEventObject(this);
|
if( !nFlags )
|
||||||
return GetEventHandler()->ProcessEvent(vEvent);
|
{
|
||||||
|
MENUITEM mItem;
|
||||||
|
MRESULT rc;
|
||||||
|
|
||||||
|
rc = WinSendMsg(hMenu, MM_QUERYITEM, MPFROM2SHORT(nItem, TRUE), (MPARAM)&mItem);
|
||||||
|
|
||||||
|
if(rc && !(mItem.afStyle & (MIS_SUBMENU | MIS_SEPARATOR)))
|
||||||
|
{
|
||||||
|
wxMenuEvent vEvent(wxEVT_MENU_HIGHLIGHT, nItem);
|
||||||
|
|
||||||
|
vEvent.SetEventObject(this);
|
||||||
|
GetEventHandler()->ProcessEvent(vEvent); // return value would be ignored by PM
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
} // end of wxFrame::HandleMenuSelect
|
} // end of wxFrame::HandleMenuSelect
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -1514,6 +1515,7 @@ MRESULT wxFrame::OS2WindowProc(
|
|||||||
,wFlags
|
,wFlags
|
||||||
,hMenu
|
,hMenu
|
||||||
);
|
);
|
||||||
|
mRc = (MRESULT)TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1535,7 +1537,7 @@ MRESULT wxFrame::OS2WindowProc(
|
|||||||
HPOINTER hIcon;
|
HPOINTER hIcon;
|
||||||
|
|
||||||
if (m_icon.Ok())
|
if (m_icon.Ok())
|
||||||
hIcon = (HPOINTER)::WinSendMsg(m_hFrame, WM_QUERYICON, 0L, 0L);
|
hIcon = (HPOINTER)::WinSendMsg(GetHWND(), WM_QUERYICON, 0L, 0L);
|
||||||
else
|
else
|
||||||
hIcon = (HPOINTER)m_hDefaultIcon;
|
hIcon = (HPOINTER)m_hDefaultIcon;
|
||||||
mRc = (MRESULT)hIcon;
|
mRc = (MRESULT)hIcon;
|
||||||
@@ -1553,6 +1555,6 @@ MRESULT wxFrame::OS2WindowProc(
|
|||||||
,wParam
|
,wParam
|
||||||
,lParam
|
,lParam
|
||||||
);
|
);
|
||||||
return (MRESULT)0;
|
return (MRESULT)mRc;
|
||||||
} // wxFrame::OS2WindowProc
|
} // wxFrame::OS2WindowProc
|
||||||
|
|
||||||
|
@@ -1031,7 +1031,7 @@ void wxMenuBar::Attach(
|
|||||||
// Ensure the accelerator table is set to the frame (not the client!)
|
// Ensure the accelerator table is set to the frame (not the client!)
|
||||||
//
|
//
|
||||||
if (!::WinSetAccelTable( vHabmain
|
if (!::WinSetAccelTable( vHabmain
|
||||||
,(HWND)pFrame->GetFrame()
|
,(HWND)pFrame->GetHWND()
|
||||||
,m_vAccelTable.GetHACCEL()
|
,m_vAccelTable.GetHACCEL()
|
||||||
))
|
))
|
||||||
wxLogLastError("WinSetAccelTable");
|
wxLogLastError("WinSetAccelTable");
|
||||||
|
@@ -306,8 +306,11 @@ wxWindow::~wxWindow()
|
|||||||
if (m_parent)
|
if (m_parent)
|
||||||
m_parent->RemoveChild(this);
|
m_parent->RemoveChild(this);
|
||||||
DestroyChildren();
|
DestroyChildren();
|
||||||
|
|
||||||
if (m_hWnd)
|
if (m_hWnd)
|
||||||
{
|
{
|
||||||
|
// UnsubclassWin();
|
||||||
|
|
||||||
if(!::WinDestroyWindow(GetHWND()))
|
if(!::WinDestroyWindow(GetHWND()))
|
||||||
wxLogLastError(wxT("DestroyWindow"));
|
wxLogLastError(wxT("DestroyWindow"));
|
||||||
//
|
//
|
||||||
@@ -382,6 +385,7 @@ bool wxWindow::Create(
|
|||||||
,NULLHANDLE
|
,NULLHANDLE
|
||||||
,m_windowId
|
,m_windowId
|
||||||
);
|
);
|
||||||
|
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
} // end of wxWindow::Create
|
} // end of wxWindow::Create
|
||||||
|
|
||||||
@@ -714,28 +718,28 @@ void wxWindow::SubclassWin(
|
|||||||
|
|
||||||
wxCHECK_RET(::WinIsWindow(vHabmain, hwnd), wxT("invalid HWND in SubclassWin") );
|
wxCHECK_RET(::WinIsWindow(vHabmain, hwnd), wxT("invalid HWND in SubclassWin") );
|
||||||
|
|
||||||
wxAssociateWinWithHandle(hwnd, this);
|
// wxAssociateWinWithHandle(hwnd, this);
|
||||||
|
|
||||||
m_fnOldWndProc = (WXFARPROC) ::WinSubclassWindow(hwnd, (PFNWP)wxWndProc);
|
m_fnOldWndProc = (WXFARPROC) ::WinSubclassWindow(hwnd, (PFNWP)wxWndProc);
|
||||||
::WinSetWindowULong(hwnd, QWS_USER, (ULONG)wxWndProc);
|
// ::WinSetWindowULong(hwnd, QWL_USER, (ULONG)wxWndProc);
|
||||||
} // end of wxWindow::SubclassWin
|
} // end of wxWindow::SubclassWin
|
||||||
|
|
||||||
void wxWindow::UnsubclassWin()
|
void wxWindow::UnsubclassWin()
|
||||||
{
|
{
|
||||||
wxRemoveHandleAssociation(this);
|
// wxRemoveHandleAssociation(this);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Restore old Window proc
|
// Restore old Window proc
|
||||||
//
|
//
|
||||||
HWND hwnd = GetHwnd();
|
HWND hwnd = GetHWND();
|
||||||
|
|
||||||
if (hwnd)
|
if (m_hWnd)
|
||||||
{
|
{
|
||||||
m_hWnd = 0;
|
// m_hWnd = 0;
|
||||||
|
|
||||||
wxCHECK_RET( ::WinIsWindow(vHabmain, hwnd), wxT("invalid HWND in UnsubclassWin") );
|
wxCHECK_RET( ::WinIsWindow(vHabmain, hwnd), wxT("invalid HWND in UnsubclassWin") );
|
||||||
|
|
||||||
PFNWP fnProc = (PFNWP)::WinQueryWindowULong(hwnd, QWS_USER);
|
PFNWP fnProc = (PFNWP)::WinQueryWindowPtr(hwnd, QWP_PFNWP);
|
||||||
if ( (m_fnOldWndProc != 0) && (fnProc != (PFNWP) m_fnOldWndProc))
|
if ( (m_fnOldWndProc != 0) && (fnProc != (PFNWP) m_fnOldWndProc))
|
||||||
{
|
{
|
||||||
WinSubclassWindow(hwnd, (PFNWP)m_fnOldWndProc);
|
WinSubclassWindow(hwnd, (PFNWP)m_fnOldWndProc);
|
||||||
@@ -1502,9 +1506,9 @@ MRESULT wxWindow::OS2DefWindowProc(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (m_fnOldWndProc)
|
if (m_fnOldWndProc)
|
||||||
return ((MRESULT)m_fnOldWndProc());
|
return (MRESULT)m_fnOldWndProc(GetHWND(), (ULONG)uMsg, (MPARAM)wParam, (MPARAM)lParam);
|
||||||
else
|
else
|
||||||
return (::WinDefWindowProc(GetHwnd(), (ULONG)uMsg, (MPARAM)wParam, (MPARAM)lParam));
|
return ::WinDefWindowProc(GetHWND(), (ULONG)uMsg, (MPARAM)wParam, (MPARAM)lParam);
|
||||||
} // end of wxWindow::OS2DefWindowProc
|
} // end of wxWindow::OS2DefWindowProc
|
||||||
|
|
||||||
bool wxWindow::OS2ProcessMessage(
|
bool wxWindow::OS2ProcessMessage(
|
||||||
@@ -1798,7 +1802,8 @@ MRESULT EXPENTRY wxWndProc(
|
|||||||
pWnd->SetHWND((WXHWND)hWnd);
|
pWnd->SetHWND((WXHWND)hWnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
MRESULT rc;
|
MRESULT rc = (MRESULT)FALSE;
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Stop right here if we don't have a valid handle in our wxWindow object.
|
// Stop right here if we don't have a valid handle in our wxWindow object.
|
||||||
@@ -1813,7 +1818,7 @@ MRESULT EXPENTRY wxWndProc(
|
|||||||
{
|
{
|
||||||
if (pWnd)
|
if (pWnd)
|
||||||
rc = pWnd->OS2WindowProc(ulMsg, wParam, lParam);
|
rc = pWnd->OS2WindowProc(ulMsg, wParam, lParam);
|
||||||
if (!rc)
|
else
|
||||||
rc = ::WinDefWindowProc(hWnd, ulMsg, wParam, lParam);
|
rc = ::WinDefWindowProc(hWnd, ulMsg, wParam, lParam);
|
||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
@@ -1833,22 +1838,26 @@ MRESULT wxWindow::OS2WindowProc(
|
|||||||
// Did we process the uMsg?
|
// Did we process the uMsg?
|
||||||
//
|
//
|
||||||
bool bProcessed = FALSE;
|
bool bProcessed = FALSE;
|
||||||
|
bool bAllow;
|
||||||
|
MRESULT mResult;
|
||||||
|
WXHICON hIcon;
|
||||||
|
WXHBRUSH hBrush;
|
||||||
|
|
||||||
//
|
//
|
||||||
// The return value
|
// The return value
|
||||||
//
|
//
|
||||||
union
|
// union
|
||||||
{
|
// {
|
||||||
bool bAllow;
|
// bool bAllow;
|
||||||
MRESULT mResult;
|
// MRESULT mResult;
|
||||||
WXHICON hIcon;
|
// WXHICON hIcon;
|
||||||
WXHBRUSH hBrush;
|
// WXHBRUSH hBrush;
|
||||||
} vRc;
|
// } vRc;
|
||||||
|
|
||||||
//
|
//
|
||||||
// For most messages we should return 0 when we do process the message
|
// For most messages we should return 0 when we do process the message
|
||||||
//
|
//
|
||||||
vRc.mResult = (MRESULT)0;
|
mResult = (MRESULT)0;
|
||||||
|
|
||||||
switch (uMsg)
|
switch (uMsg)
|
||||||
{
|
{
|
||||||
@@ -1864,14 +1873,16 @@ MRESULT wxWindow::OS2WindowProc(
|
|||||||
//
|
//
|
||||||
// Return 0 to bAllow window creation
|
// Return 0 to bAllow window creation
|
||||||
//
|
//
|
||||||
vRc.mResult = (MRESULT)(bMayCreate ? 0 : -1);
|
mResult = (MRESULT)(bMayCreate ? 0 : -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
bProcessed = HandleDestroy();
|
HandleDestroy();
|
||||||
break;
|
bProcessed = TRUE;
|
||||||
|
delete this;
|
||||||
|
break;
|
||||||
|
|
||||||
case WM_MOVE:
|
case WM_MOVE:
|
||||||
bProcessed = HandleMove( LOWORD(lParam)
|
bProcessed = HandleMove( LOWORD(lParam)
|
||||||
@@ -1900,6 +1911,7 @@ MRESULT wxWindow::OS2WindowProc(
|
|||||||
bProcessed = HandleActivate( wState
|
bProcessed = HandleActivate( wState
|
||||||
,(WXHWND)hWnd
|
,(WXHWND)hWnd
|
||||||
);
|
);
|
||||||
|
bProcessed = FALSE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1920,7 +1932,7 @@ MRESULT wxWindow::OS2WindowProc(
|
|||||||
// ourselves in ~wxWindow
|
// ourselves in ~wxWindow
|
||||||
//
|
//
|
||||||
bProcessed = TRUE;
|
bProcessed = TRUE;
|
||||||
vRc.mResult = (MRESULT)TRUE;
|
mResult = (MRESULT)TRUE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_SHOW:
|
case WM_SHOW:
|
||||||
@@ -1987,14 +1999,14 @@ MRESULT wxWindow::OS2WindowProc(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( bProcessed )
|
if ( bProcessed )
|
||||||
vRc.mResult = (MRESULT)TRUE;
|
mResult = (MRESULT)TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_QUERYDLGCODE:
|
case WM_QUERYDLGCODE:
|
||||||
if ( m_lDlgCode )
|
if ( m_lDlgCode )
|
||||||
{
|
{
|
||||||
vRc.mResult = (MRESULT)m_lDlgCode;
|
mResult = (MRESULT)m_lDlgCode;
|
||||||
bProcessed = TRUE;
|
bProcessed = TRUE;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
@@ -2093,7 +2105,7 @@ MRESULT wxWindow::OS2WindowProc(
|
|||||||
#if defined(__VISAGECPP__) && (__IBMCPP__ >= 400)
|
#if defined(__VISAGECPP__) && (__IBMCPP__ >= 400)
|
||||||
case WM_CTLCOLORCHANGE:
|
case WM_CTLCOLORCHANGE:
|
||||||
{
|
{
|
||||||
bProcessed = HandleCtlColor(&vRc.hBrush);
|
bProcessed = HandleCtlColor(&hBrush);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
@@ -2132,7 +2144,7 @@ MRESULT wxWindow::OS2WindowProc(
|
|||||||
//
|
//
|
||||||
// We processed the message, i.e. erased the background
|
// We processed the message, i.e. erased the background
|
||||||
//
|
//
|
||||||
vRc.mResult = (MRESULT)TRUE;
|
mResult = (MRESULT)TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -2147,7 +2159,7 @@ MRESULT wxWindow::OS2WindowProc(
|
|||||||
if ( bProcessed )
|
if ( bProcessed )
|
||||||
{
|
{
|
||||||
// we never set focus from here
|
// we never set focus from here
|
||||||
vRc.mResult = FALSE;
|
mResult = FALSE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -2158,7 +2170,7 @@ MRESULT wxWindow::OS2WindowProc(
|
|||||||
|
|
||||||
case WM_SYSVALUECHANGED:
|
case WM_SYSVALUECHANGED:
|
||||||
// TODO: do something
|
// TODO: do something
|
||||||
vRc.mResult = (MRESULT)TRUE;
|
mResult = (MRESULT)TRUE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -2175,7 +2187,7 @@ MRESULT wxWindow::OS2WindowProc(
|
|||||||
// processing this message - exactly what we need because we've
|
// processing this message - exactly what we need because we've
|
||||||
// just set the cursor.
|
// just set the cursor.
|
||||||
//
|
//
|
||||||
vRc.mResult = (MRESULT)TRUE;
|
mResult = (MRESULT)TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -2186,9 +2198,9 @@ MRESULT wxWindow::OS2WindowProc(
|
|||||||
wxLogTrace(wxTraceMessages, wxT("Forwarding %s to DefWindowProc."),
|
wxLogTrace(wxTraceMessages, wxT("Forwarding %s to DefWindowProc."),
|
||||||
wxGetMessageName(uMsg));
|
wxGetMessageName(uMsg));
|
||||||
#endif // __WXDEBUG__
|
#endif // __WXDEBUG__
|
||||||
vRc.mResult = OS2DefWindowProc(uMsg, wParam, lParam);
|
mResult = OS2DefWindowProc(uMsg, wParam, lParam);
|
||||||
}
|
}
|
||||||
return vRc.mResult;
|
return mResult;
|
||||||
} // end of wxWindow::OS2WindowProc
|
} // end of wxWindow::OS2WindowProc
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -2414,6 +2426,12 @@ bool wxWindow::OS2Create(
|
|||||||
wxAssociateWinWithHandle((HWND)m_hWnd
|
wxAssociateWinWithHandle((HWND)m_hWnd
|
||||||
,this
|
,this
|
||||||
);
|
);
|
||||||
|
//
|
||||||
|
// Now need to subclass window.
|
||||||
|
//
|
||||||
|
|
||||||
|
SubclassWin(GetHWND());
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
} // end of wxWindow::OS2Create
|
} // end of wxWindow::OS2Create
|
||||||
|
|
||||||
@@ -2806,11 +2824,11 @@ bool wxWindow::HandlePaint()
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
m_updateRegion = wxRegion(hRgn);
|
m_updateRegion = wxRegion(hRgn);
|
||||||
|
/*
|
||||||
hPS = WinBeginPaint(GetHwnd(), 0L, &vRect);
|
hPS = WinBeginPaint(GetHWND(), 0L, &vRect);
|
||||||
WinFillRect(hPS, &vRect, SYSCLR_WINDOW);
|
WinFillRect(hPS, &vRect, SYSCLR_WINDOW);
|
||||||
WinEndPaint(hPS);
|
WinEndPaint(hPS);
|
||||||
|
*/
|
||||||
vEvent.SetEventObject(this);
|
vEvent.SetEventObject(this);
|
||||||
return (GetEventHandler()->ProcessEvent(vEvent));
|
return (GetEventHandler()->ProcessEvent(vEvent));
|
||||||
} // end of wxWindow::HandlePaint
|
} // end of wxWindow::HandlePaint
|
||||||
|
Reference in New Issue
Block a user