[PATCH 3/3] user32: Don't depend on HMENU for drawing menus
Andrew Eikum
aeikum at codeweavers.com
Fri May 9 14:13:07 CDT 2014
---
dlls/user32/menu.c | 31 +++++++++++++++----------------
1 file changed, 15 insertions(+), 16 deletions(-)
diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c
index 739e818..d6e44d6 100644
--- a/dlls/user32/menu.c
+++ b/dlls/user32/menu.c
@@ -192,7 +192,7 @@ const struct builtin_class_descr MENU_builtin_class =
(LPCWSTR)POPUPMENU_CLASS_ATOM, /* name */
CS_DROPSHADOW | CS_SAVEBITS | CS_DBLCLKS, /* style */
WINPROC_MENU, /* proc */
- sizeof(HMENU), /* extra */
+ sizeof(POPUPMENU *), /* extra */
IDC_ARROW, /* cursor */
(HBRUSH)(COLOR_MENU+1) /* brush */
};
@@ -1731,12 +1731,12 @@ static void MENU_DrawMenuItem( HWND hwnd, POPUPMENU *menu, HWND hwndOwner, HDC h
*
* Paint a popup menu.
*/
-static void MENU_DrawPopupMenu( HWND hwnd, HDC hdc, HMENU hmenu )
+static void MENU_DrawPopupMenu( HWND hwnd, HDC hdc, POPUPMENU *menu )
{
HBRUSH hPrevBrush = 0;
RECT rect;
- TRACE("wnd=%p dc=%p menu=%p\n", hwnd, hdc, hmenu);
+ TRACE("wnd=%p dc=%p menu=%p\n", hwnd, hdc, menu);
GetClientRect( hwnd, &rect );
@@ -1750,7 +1750,6 @@ static void MENU_DrawPopupMenu( HWND hwnd, HDC hdc, HMENU hmenu )
hPrevPen = SelectObject( hdc, GetStockObject( NULL_PEN ) );
if( hPrevPen )
{
- POPUPMENU *menu;
BOOL flat_menu = FALSE;
SystemParametersInfoW (SPI_GETFLATMENU, 0, &flat_menu, 0);
@@ -1759,9 +1758,9 @@ static void MENU_DrawPopupMenu( HWND hwnd, HDC hdc, HMENU hmenu )
else
DrawEdge (hdc, &rect, EDGE_RAISED, BF_RECT);
- if( (menu = MENU_GetMenu( hmenu )))
+ if( menu )
{
- TRACE("hmenu %p Style %08x\n", hmenu, menu->dwStyle);
+ TRACE("menu %p Style %08x\n", menu, menu->dwStyle);
/* draw menu items */
if( menu->nItems)
{
@@ -1833,7 +1832,7 @@ static BOOL MENU_InitPopup( HWND hwndOwner, POPUPMENU *menu, UINT flags )
menu->hWnd = CreateWindowExW( ex_style, (LPCWSTR)POPUPMENU_CLASS_ATOM, NULL,
WS_POPUP, 0, 0, 0, 0,
hwndOwner, 0, (HINSTANCE)GetWindowLongPtrW(hwndOwner, GWLP_HINSTANCE),
- (LPVOID)MENU_GetHandle(menu) );
+ menu );
if( !menu->hWnd ) return FALSE;
return TRUE;
}
@@ -3484,7 +3483,7 @@ LRESULT WINAPI PopupMenuWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM
PAINTSTRUCT ps;
BeginPaint( hwnd, &ps );
MENU_DrawPopupMenu( hwnd, ps.hdc,
- (HMENU)GetWindowLongPtrW( hwnd, 0 ) );
+ (POPUPMENU *)GetWindowLongPtrW( hwnd, 0 ) );
EndPaint( hwnd, &ps );
return 0;
}
@@ -3492,7 +3491,7 @@ LRESULT WINAPI PopupMenuWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM
case WM_PRINTCLIENT:
{
MENU_DrawPopupMenu( hwnd, (HDC)wParam,
- (HMENU)GetWindowLongPtrW( hwnd, 0 ) );
+ (POPUPMENU *)GetWindowLongPtrW( hwnd, 0 ) );
return 0;
}
@@ -3518,7 +3517,7 @@ LRESULT WINAPI PopupMenuWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM
break;
case MN_GETHMENU:
- return GetWindowLongPtrW( hwnd, 0 );
+ return (LRESULT)MENU_GetHandle((POPUPMENU*)GetWindowLongPtrW( hwnd, 0 ));
default:
return DefWindowProcW( hwnd, message, wParam, lParam );
@@ -4209,30 +4208,30 @@ BOOL WINAPI GetMenuBarInfo( HWND hwnd, LONG idObject, LONG idItem, PMENUBARINFO
return FALSE;
}
- hmenu = (HMENU)GetWindowLongPtrW(hwnd, 0);
+ menu = (POPUPMENU *)GetWindowLongPtrW(hwnd, 0);
+ hmenu = MENU_GetHandle(menu);
break;
case OBJID_MENU:
hmenu = GetMenu(hwnd);
+ menu = MENU_GetMenu(hmenu);
break;
case OBJID_SYSMENU:
hmenu = GetSystemMenu(hwnd, FALSE);
+ menu = MENU_GetMenu(hmenu);
break;
default:
return FALSE;
}
- if (!hmenu)
- return FALSE;
-
if (pmbi->cbSize != sizeof(MENUBARINFO))
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
- menu = MENU_GetMenu(hmenu);
- if (!menu)
+ if (!menu || !hmenu)
return FALSE;
+
if (idItem < 0 || idItem > menu->nItems)
return FALSE;
--
1.9.2
More information about the wine-patches
mailing list