From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/user32/menu.c | 2 ++ dlls/user32/tests/class.c | 2 +- dlls/win32u/menu.c | 31 ++++++++++++++++++++----------- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c index 00031f45730..318675428d3 100644 --- a/dlls/user32/menu.c +++ b/dlls/user32/menu.c @@ -198,6 +198,7 @@ LRESULT WINAPI PopupMenuWndProcA( HWND hwnd, UINT message, WPARAM wParam, LPARAM case WM_ERASEBKGND: case WM_SHOWWINDOW: case MN_GETHMENU: + case WM_NCCREATE: return NtUserMessageCall( hwnd, message, wParam, lParam, NULL, NtUserPopupMenuWndProc, TRUE ); @@ -223,6 +224,7 @@ LRESULT WINAPI PopupMenuWndProcW( HWND hwnd, UINT message, WPARAM wParam, LPARAM case WM_ERASEBKGND: case WM_SHOWWINDOW: case MN_GETHMENU: + case WM_NCCREATE: return NtUserMessageCall( hwnd, message, wParam, lParam, NULL, NtUserPopupMenuWndProc, FALSE ); diff --git a/dlls/user32/tests/class.c b/dlls/user32/tests/class.c index c7a99cc80d4..a41cfb1c9a5 100644 --- a/dlls/user32/tests/class.c +++ b/dlls/user32/tests/class.c @@ -2528,7 +2528,7 @@ static const struct real_class_test class_tests[] = { "Static", "Static", TRUE, TRUE, TRUE, TRUE, FALSE }, { "ComboLBox", "ListBox", FALSE, TRUE, TRUE, TRUE, FALSE }, { "MDIClient", "MDIClient", TRUE, TRUE, TRUE, TRUE, TRUE }, - { "#32768", "#32768", FALSE, FALSE, TRUE, TRUE, TRUE }, + { "#32768", "#32768", FALSE, FALSE, TRUE, TRUE, FALSE }, { "#32770", "#32770", TRUE, TRUE, TRUE, TRUE, TRUE }, /* Not all built-in classes set real window class. */ { "Message", NULL, FALSE, FALSE, FALSE, FALSE, FALSE }, diff --git a/dlls/win32u/menu.c b/dlls/win32u/menu.c index dda7d119ecc..a700f44af78 100644 --- a/dlls/win32u/menu.c +++ b/dlls/win32u/menu.c @@ -160,6 +160,16 @@ static BOOL exit_menu = FALSE; static SIZE menucharsize; static UINT od_item_height; /* default owner drawn item height */ +static HMENU get_control_menu( HWND hwnd ) +{ + return (HMENU)NtUserGetPrivateData( hwnd, 0, sizeof(HMENU) ); +} + +static HMENU set_control_menu( HWND hwnd, HMENU menu ) +{ + return (HMENU)NtUserSetPrivateData( hwnd, 0, sizeof(HMENU), (LONG_PTR)menu ); +} + /********************************************************************** * NtUserCopyAcceleratorTable (win32u.@) */ @@ -2909,7 +2919,7 @@ LRESULT popup_menu_window_proc( HWND hwnd, UINT message, WPARAM wparam, LPARAM l case WM_CREATE: { CREATESTRUCTW *cs = (CREATESTRUCTW *)lparam; - NtUserSetWindowLongPtr( hwnd, 0, (LONG_PTR)cs->lpCreateParams, FALSE ); + set_control_menu( hwnd, cs->lpCreateParams ); return 0; } @@ -2920,14 +2930,14 @@ LRESULT popup_menu_window_proc( HWND hwnd, UINT message, WPARAM wparam, LPARAM l { PAINTSTRUCT ps; NtUserBeginPaint( hwnd, &ps ); - draw_popup_menu( hwnd, ps.hdc, (HMENU)get_window_long_ptr( hwnd, 0, FALSE )); + draw_popup_menu( hwnd, ps.hdc, get_control_menu( hwnd ) ); NtUserEndPaint( hwnd, &ps ); return 0; } case WM_PRINTCLIENT: { - draw_popup_menu( hwnd, (HDC)wparam, (HMENU)get_window_long_ptr( hwnd, 0, FALSE )); + draw_popup_menu( hwnd, (HDC)wparam, get_control_menu( hwnd ) ); return 0; } @@ -2944,17 +2954,16 @@ LRESULT popup_menu_window_proc( HWND hwnd, UINT message, WPARAM wparam, LPARAM l break; case WM_SHOWWINDOW: - if (wparam) - { - if (!get_window_long_ptr( hwnd, 0, FALSE )) ERR( "no menu to display\n" ); - } - else - NtUserSetWindowLongPtr( hwnd, 0, 0, FALSE ); + if (!wparam) NtUserSetPrivateData( hwnd, 0, sizeof(LONG_PTR), 0 ); + else if (!get_control_menu( hwnd )) ERR( "no menu to display\n" ); break; case MN_GETHMENU: - return get_window_long_ptr( hwnd, 0, FALSE ); + return (LRESULT)get_control_menu( hwnd ); + case WM_NCCREATE: + NtUserSetWindowFNID( hwnd, MAKE_FNID(NTUSER_WNDPROC_MENU) ); + /* fallthrough */ default: return default_window_proc( hwnd, message, wparam, lparam, ansi ); } @@ -4599,7 +4608,7 @@ BOOL WINAPI NtUserGetMenuBarInfo( HWND hwnd, LONG id, LONG item, MENUBARINFO *in return FALSE; } - hmenu = (HMENU)get_window_long_ptr( hwnd, 0, FALSE ); + hmenu = get_control_menu( hwnd ); break; case OBJID_MENU: hmenu = get_menu( hwnd ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11044