Fix client to screen translation in wxWindowMSW::PopupMenu().

Use wxWidgets ClientToScreen() function for computing the screen coordinates
of the popup menu instead of Windows ::ClientToScreen() as the latter doesn't
know about the toolbar which may be present in wxFrame and excluded from the
client area.

Closes #13223.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67758 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2011-05-17 13:35:04 +00:00
parent 352a7d6c46
commit 473d0f930e

View File

@@ -2213,18 +2213,16 @@ bool wxWindowMSW::DoPopupMenu(wxMenu *menu, int x, int y)
{ {
menu->UpdateUI(); menu->UpdateUI();
wxPoint pt;
if ( x == wxDefaultCoord && y == wxDefaultCoord ) if ( x == wxDefaultCoord && y == wxDefaultCoord )
{ {
wxPoint mouse = ScreenToClient(wxGetMousePosition()); pt = wxGetMousePosition();
x = mouse.x; y = mouse.y; }
else
{
pt = ClientToScreen(wxPoint(x, y));
} }
HWND hWnd = GetHwnd();
HMENU hMenu = GetHmenuOf(menu);
POINT point;
point.x = x;
point.y = y;
::ClientToScreen(hWnd, &point);
#if defined(__WXWINCE__) #if defined(__WXWINCE__)
static const UINT flags = 0; static const UINT flags = 0;
#else // !__WXWINCE__ #else // !__WXWINCE__
@@ -2242,7 +2240,7 @@ bool wxWindowMSW::DoPopupMenu(wxMenu *menu, int x, int y)
} }
#endif // __WXWINCE__/!__WXWINCE__ #endif // __WXWINCE__/!__WXWINCE__
::TrackPopupMenu(hMenu, flags, point.x, point.y, 0, hWnd, NULL); ::TrackPopupMenu(GetHmenuOf(menu), flags, pt.x, pt.y, 0, GetHwnd(), NULL);
// we need to do it right now as otherwise the events are never going to be // we need to do it right now as otherwise the events are never going to be
// sent to wxCurrentPopupMenu from HandleCommand() // sent to wxCurrentPopupMenu from HandleCommand()