From f2963aeb86d77b859039d18377e8aee9a7e03228 Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Tue, 18 Nov 2003 19:42:31 +0000 Subject: [PATCH] Make national (hot)keys work in menus. Make menu code use unicode APIs. --- controls/menu.c | 143 +++++++++++++++++++++---------------------- dlls/user/controls.h | 3 +- 2 files changed, 73 insertions(+), 73 deletions(-) diff --git a/controls/menu.c b/controls/menu.c index 4bfbf0e6407..f82341c8c78 100644 --- a/controls/menu.c +++ b/controls/menu.c @@ -29,10 +29,7 @@ #include "config.h" #include "wine/port.h" -#include -#include #include -#include #include #include "windef.h" @@ -186,7 +183,7 @@ DWORD WINAPI DrawMenuBarTemp(HWND hwnd, HDC hDC, LPRECT lprect, HMENU hMenu, HFO */ const struct builtin_class_descr MENU_builtin_class = { - POPUPMENU_CLASS_ATOM, /* name */ + POPUPMENU_CLASS_ATOMA, /* name */ CS_GLOBALCLASS | CS_SAVEBITS, /* style */ NULL, /* procA (winproc is Unicode only) */ PopupMenuWndProc, /* procW */ @@ -331,7 +328,9 @@ static HMENU get_win_sys_menu( HWND hwnd ) */ static HMENU MENU_CopySysPopup(void) { - HMENU hMenu = LoadMenuA(GetModuleHandleA("USER32"), "SYSMENU"); + static const WCHAR user32W[] = {'U','S','E','R','3','2',0}; + static const WCHAR sysmenuW[] = {'S','Y','S','M','E','N','U',0}; + HMENU hMenu = LoadMenuW(GetModuleHandleW(user32W), sysmenuW); if( hMenu ) { POPUPMENU* menu = MENU_GetMenu(hMenu); @@ -374,7 +373,7 @@ HMENU MENU_GetSysMenu( HWND hWnd, HMENU hPopupMenu ) if (hPopupMenu) { - InsertMenuA( hMenu, -1, MF_SYSMENU | MF_POPUP | MF_BYPOSITION, + InsertMenuW( hMenu, -1, MF_SYSMENU | MF_POPUP | MF_BYPOSITION, (UINT_PTR)hPopupMenu, NULL ); menu->items[0].fType = MF_SYSMENU | MF_POPUP; @@ -396,10 +395,10 @@ HMENU MENU_GetSysMenu( HWND hWnd, HMENU hPopupMenu ) * * Menus initialisation. */ -BOOL MENU_Init() +BOOL MENU_Init(void) { HBITMAP hBitmap; - NONCLIENTMETRICSA ncm; + NONCLIENTMETRICSW ncm; static unsigned char shade_bits[16] = { 0x55, 0, 0xAA, 0, 0x55, 0, 0xAA, 0, @@ -407,14 +406,14 @@ BOOL MENU_Init() 0x55, 0, 0xAA, 0 }; /* Load menu bitmaps */ - hStdMnArrow = LoadBitmapA(0, MAKEINTRESOURCEA(OBM_MNARROW)); + hStdMnArrow = LoadBitmapW(0, MAKEINTRESOURCEW(OBM_MNARROW)); /* Load system buttons bitmaps */ - hBmpSysMenu = LoadBitmapA(0, MAKEINTRESOURCEA(OBM_CLOSE)); + hBmpSysMenu = LoadBitmapW(0, MAKEINTRESOURCEW(OBM_CLOSE)); if (hStdMnArrow) { BITMAP bm; - GetObjectA( hStdMnArrow, sizeof(bm), &bm ); + GetObjectW( hStdMnArrow, sizeof(bm), &bm ); arrow_bitmap_width = bm.bmWidth; arrow_bitmap_height = bm.bmHeight; } else @@ -430,18 +429,18 @@ BOOL MENU_Init() if (!(MENU_DefSysPopup = MENU_CopySysPopup())) return FALSE; - ncm.cbSize = sizeof (NONCLIENTMETRICSA); - if (!(SystemParametersInfoA(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSA), &ncm, 0))) + ncm.cbSize = sizeof(NONCLIENTMETRICSW); + if (!(SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), &ncm, 0))) return FALSE; - if (!(hMenuFont = CreateFontIndirectA( &ncm.lfMenuFont ))) + if (!(hMenuFont = CreateFontIndirectW( &ncm.lfMenuFont ))) return FALSE; ncm.lfMenuFont.lfWeight += 300; if ( ncm.lfMenuFont.lfWeight > 1000) ncm.lfMenuFont.lfWeight = 1000; - if (!(hMenuFontBold = CreateFontIndirectA( &ncm.lfMenuFont ))) + if (!(hMenuFontBold = CreateFontIndirectW( &ncm.lfMenuFont ))) return FALSE; return TRUE; @@ -667,7 +666,7 @@ static MENUITEM *MENU_FindItemByCoords( POPUPMENU *menu, static UINT MENU_FindItemByKey( HWND hwndOwner, HMENU hmenu, UINT key, BOOL forceMenuChar ) { - TRACE("\tlooking for '%c' in [%p]\n", (char)key, hmenu ); + TRACE("\tlooking for '%c' (0x%02x) in [%p]\n", (char)key, key, hmenu ); if (!IsMenu( hmenu )) hmenu = GetSubMenu( get_win_sys_menu(hwndOwner), 0); @@ -675,13 +674,13 @@ static UINT MENU_FindItemByKey( HWND hwndOwner, HMENU hmenu, { POPUPMENU *menu = MENU_GetMenu( hmenu ); MENUITEM *item = menu->items; - LONG menuchar; + LRESULT menuchar; if( !forceMenuChar ) { UINT i; - key = toupper(key); + key = toupperW(key); for (i = 0; i < menu->nItems; i++, item++) { if (IS_STRING_ITEM(item->fType) && item->text) @@ -692,11 +691,11 @@ static UINT MENU_FindItemByKey( HWND hwndOwner, HMENU hmenu, p = strchrW (p + 2, '&'); } while (p != NULL && p [1] == '&'); - if (p && (toupper(p[1]) == key)) return i; + if (p && (toupperW(p[1]) == key)) return i; } } } - menuchar = SendMessageA( hwndOwner, WM_MENUCHAR, + menuchar = SendMessageW( hwndOwner, WM_MENUCHAR, MAKEWPARAM( key, menu->wFlags ), (LPARAM)hmenu ); if (HIWORD(menuchar) == 2) return LOWORD(menuchar); if (HIWORD(menuchar) == 1) return (UINT)(-2); @@ -747,7 +746,7 @@ static void MENU_GetBitmapItemSize( UINT id, DWORD data, SIZE *size ) return; } } - if (GetObjectA(bmp, sizeof(bm), &bm )) + if (GetObjectW(bmp, sizeof(bm), &bm )) { size->cx = bm.bmWidth; size->cy = bm.bmHeight; @@ -782,12 +781,12 @@ static void MENU_DrawBitmapItem( HDC hdc, MENUITEM *lpitem, const RECT *rect, BO if (lpitem->dwItemData) { bmp = (HBITMAP)lpitem->dwItemData; - if (!GetObjectA( bmp, sizeof(bm), &bm )) return; + if (!GetObjectW( bmp, sizeof(bm), &bm )) return; } else { bmp = hBmpSysMenu; - if (!GetObjectA( bmp, sizeof(bm), &bm )) return; + if (!GetObjectW( bmp, sizeof(bm), &bm )) return; /* only use right half of the bitmap */ bmp_xoffset = bm.bmWidth / 2; bm.bmWidth -= bmp_xoffset; @@ -824,7 +823,7 @@ static void MENU_DrawBitmapItem( HDC hdc, MENUITEM *lpitem, const RECT *rect, BO return; } - if (!bmp || !GetObjectA( bmp, sizeof(bm), &bm )) return; + if (!bmp || !GetObjectW( bmp, sizeof(bm), &bm )) return; got_bitmap: hdcMem = CreateCompatibleDC( hdc ); @@ -880,7 +879,7 @@ static void MENU_CalcItemSize( HDC hdc, MENUITEM *lpitem, HWND hwndOwner, mis.itemData = (DWORD)lpitem->dwItemData; mis.itemHeight = 0; mis.itemWidth = 0; - SendMessageA( hwndOwner, WM_MEASUREITEM, 0, (LPARAM)&mis ); + SendMessageW( hwndOwner, WM_MEASUREITEM, 0, (LPARAM)&mis ); lpitem->rect.right += mis.itemWidth; if (menuBar) @@ -1176,7 +1175,7 @@ static void MENU_DrawMenuItem( HWND hwnd, HMENU hmenu, HWND hwndOwner, HDC hdc, dis.itemID, dis.itemState, dis.itemAction, dis.hwndItem, dis.hDC, dis.rcItem.left, dis.rcItem.top, dis.rcItem.right, dis.rcItem.bottom); - SendMessageA( hwndOwner, WM_DRAWITEM, 0, (LPARAM)&dis ); + SendMessageW( hwndOwner, WM_DRAWITEM, 0, (LPARAM)&dis ); /* Fall through to draw popup-menu arrow */ } @@ -1601,9 +1600,9 @@ static BOOL MENU_ShowPopup( HWND hwndOwner, HMENU hmenu, UINT id, } /* NOTE: In Windows, top menu popup is not owned. */ - menu->hWnd = CreateWindowA( POPUPMENU_CLASS_ATOM, NULL, + menu->hWnd = CreateWindowExW( 0, POPUPMENU_CLASS_ATOMW, NULL, WS_POPUP, x, y, width, height, - hwndOwner, 0, (HINSTANCE)GetWindowLongA(hwndOwner,GWL_HINSTANCE), + hwndOwner, 0, (HINSTANCE)GetWindowLongW(hwndOwner, GWL_HINSTANCE), (LPVOID)hmenu ); if( !menu->hWnd ) return FALSE; if (!top_popup) top_popup = menu->hWnd; @@ -1660,7 +1659,7 @@ static void MENU_SelectItem( HWND hwndOwner, HMENU hmenu, UINT wIndex, if (sendMenuSelect) { MENUITEM *ip = &lppop->items[lppop->FocusedItem]; - SendMessageA( hwndOwner, WM_MENUSELECT, + SendMessageW( hwndOwner, WM_MENUSELECT, MAKELONG(ip->fType & MF_POPUP ? wIndex: ip->wID, ip->fType | ip->fState | MF_MOUSESELECT | (lppop->wFlags & MF_SYSMENU)), (LPARAM)hmenu); @@ -1672,7 +1671,7 @@ static void MENU_SelectItem( HWND hwndOwner, HMENU hmenu, UINT wIndex, if((pos=MENU_FindSubMenu(&topmenu, hmenu))!=NO_SELECTED_ITEM){ POPUPMENU *ptm = MENU_GetMenu( topmenu ); MENUITEM *ip = &ptm->items[pos]; - SendMessageA( hwndOwner, WM_MENUSELECT, MAKELONG(pos, + SendMessageW( hwndOwner, WM_MENUSELECT, MAKELONG(pos, ip->fType | ip->fState | MF_MOUSESELECT | (ptm->wFlags & MF_SYSMENU)), (LPARAM)topmenu); } @@ -2043,7 +2042,7 @@ static HMENU MENU_ShowSubPopup( HWND hwndOwner, HMENU hmenu, /* Send WM_INITMENUPOPUP message only if TPM_NONOTIFY flag is not specified */ if (!(wFlags & TPM_NONOTIFY)) - SendMessageA( hwndOwner, WM_INITMENUPOPUP, (WPARAM)item->hSubMenu, + SendMessageW( hwndOwner, WM_INITMENUPOPUP, (WPARAM)item->hSubMenu, MAKELONG( menu->FocusedItem, IS_SYSTEM_MENU(menu) )); item = &menu->items[menu->FocusedItem]; @@ -2069,8 +2068,8 @@ static HMENU MENU_ShowSubPopup( HWND hwndOwner, HMENU hmenu, if (IS_SYSTEM_MENU(menu)) { MENU_InitSysMenuPopup(item->hSubMenu, - GetWindowLongA( menu->hWnd, GWL_STYLE ), - GetClassLongA( menu->hWnd, GCL_STYLE)); + GetWindowLongW( menu->hWnd, GWL_STYLE ), + GetClassLongW( menu->hWnd, GCL_STYLE)); NC_GetSysPopupPos( menu->hWnd, &rect ); rect.top = rect.bottom; @@ -2178,10 +2177,10 @@ static INT MENU_ExecFocusedItem( MTRACKER* pmt, HMENU hMenu, UINT wFlags ) if(!(wFlags & TPM_RETURNCMD)) { if( menu->wFlags & MF_SYSMENU ) - PostMessageA( pmt->hOwnerWnd, WM_SYSCOMMAND, item->wID, + PostMessageW( pmt->hOwnerWnd, WM_SYSCOMMAND, item->wID, MAKELPARAM((INT16)pmt->pt.x, (INT16)pmt->pt.y) ); else - PostMessageA( pmt->hOwnerWnd, WM_COMMAND, item->wID, 0 ); + PostMessageW( pmt->hOwnerWnd, WM_COMMAND, item->wID, 0 ); } return item->wID; } @@ -2384,7 +2383,7 @@ static LRESULT MENU_DoNextMenu( MTRACKER* pmt, UINT vk ) if (!next_menu.hmenuNext || !next_menu.hwndNext) { - DWORD style = GetWindowLongA( pmt->hOwnerWnd, GWL_STYLE ); + DWORD style = GetWindowLongW( pmt->hOwnerWnd, GWL_STYLE ); hNewWnd = pmt->hOwnerWnd; if( IS_SYSTEM_MENU(menu) ) { @@ -2412,7 +2411,7 @@ static LRESULT MENU_DoNextMenu( MTRACKER* pmt, UINT vk ) if( IsMenu(hNewMenu) && IsWindow(hNewWnd) ) { - DWORD style = GetWindowLongA( hNewWnd, GWL_STYLE ); + DWORD style = GetWindowLongW( hNewWnd, GWL_STYLE ); if (style & WS_SYSMENU && GetSubMenu(get_win_sys_menu(hNewWnd), 0) == hNewMenu ) @@ -2466,17 +2465,17 @@ static BOOL MENU_SuspendPopup( MTRACKER* pmt, UINT16 uMsg ) msg.hwnd = pmt->hOwnerWnd; - PeekMessageA( &msg, 0, 0, 0, PM_NOYIELD | PM_REMOVE); + PeekMessageW( &msg, 0, 0, 0, PM_NOYIELD | PM_REMOVE); pmt->trackFlags |= TF_SKIPREMOVE; switch( uMsg ) { case WM_KEYDOWN: - PeekMessageA( &msg, 0, 0, 0, PM_NOYIELD | PM_NOREMOVE); + PeekMessageW( &msg, 0, 0, 0, PM_NOYIELD | PM_NOREMOVE); if( msg.message == WM_KEYUP || msg.message == WM_PAINT ) { - PeekMessageA( &msg, 0, 0, 0, PM_NOYIELD | PM_REMOVE); - PeekMessageA( &msg, 0, 0, 0, PM_NOYIELD | PM_NOREMOVE); + PeekMessageW( &msg, 0, 0, 0, PM_NOYIELD | PM_REMOVE); + PeekMessageW( &msg, 0, 0, 0, PM_NOYIELD | PM_NOREMOVE); if( msg.message == WM_KEYDOWN && (msg.wParam == VK_LEFT || msg.wParam == VK_RIGHT)) { @@ -2684,11 +2683,11 @@ static INT MENU_TrackMenu( HMENU hmenu, UINT wFlags, INT x, INT y, for (;;) { - if (PeekMessageA( &msg, 0, 0, 0, PM_NOREMOVE )) + if (PeekMessageW( &msg, 0, 0, 0, PM_NOREMOVE )) { - if (!CallMsgFilterA( &msg, MSGF_MENU )) break; + if (!CallMsgFilterW( &msg, MSGF_MENU )) break; /* remove the message from the queue */ - PeekMessageA( &msg, 0, msg.message, msg.message, PM_REMOVE ); + PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE ); } else { @@ -2709,7 +2708,7 @@ static INT MENU_TrackMenu( HMENU hmenu, UINT wFlags, INT x, INT y, fEndMenu = TRUE; /* remove the message from the queue */ - PeekMessageA( &msg, 0, msg.message, msg.message, PM_REMOVE ); + PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE ); /* break out of internal loop, ala ESCAPE */ break; @@ -2835,7 +2834,7 @@ static INT MENU_TrackMenu( HMENU hmenu, UINT wFlags, INT x, INT y, hi.hItemHandle = hmenu; hi.dwContextId = menu->dwContextHelpID; hi.MousePos = msg.pt; - SendMessageA(hwnd, WM_HELP, 0, (LPARAM)&hi); + SendMessageW(hwnd, WM_HELP, 0, (LPARAM)&hi); break; } @@ -2868,7 +2867,7 @@ static INT MENU_TrackMenu( HMENU hmenu, UINT wFlags, INT x, INT y, /* Hack to avoid control chars. */ /* We will find a better way real soon... */ - if ((msg.wParam <= 32) || (msg.wParam >= 127)) break; + if (msg.wParam < 32) break; pos = MENU_FindItemByKey( mt.hOwnerWnd, mt.hCurrentMenu, LOWORD(msg.wParam), FALSE ); @@ -2887,7 +2886,7 @@ static INT MENU_TrackMenu( HMENU hmenu, UINT wFlags, INT x, INT y, } else { - DispatchMessageA( &msg ); + DispatchMessageW( &msg ); } if (!fEndMenu) fRemove = TRUE; @@ -2895,7 +2894,7 @@ static INT MENU_TrackMenu( HMENU hmenu, UINT wFlags, INT x, INT y, /* finally remove message from the queue */ if (fRemove && !(mt.trackFlags & TF_SKIPREMOVE) ) - PeekMessageA( &msg, 0, msg.message, msg.message, PM_REMOVE ); + PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE ); else mt.trackFlags &= ~TF_SKIPREMOVE; } @@ -2919,7 +2918,7 @@ static INT MENU_TrackMenu( HMENU hmenu, UINT wFlags, INT x, INT y, menu->hWnd = 0; } MENU_SelectItem( mt.hOwnerWnd, mt.hTopMenu, NO_SELECTED_ITEM, FALSE, 0 ); - SendMessageA( mt.hOwnerWnd, WM_MENUSELECT, MAKELONG(0,0xffff), 0 ); + SendMessageW( mt.hOwnerWnd, WM_MENUSELECT, MAKELONG(0,0xffff), 0 ); } /* Reset the variable for hiding menu */ @@ -2941,14 +2940,14 @@ static BOOL MENU_InitTracking(HWND hWnd, HMENU hMenu, BOOL bPopup, UINT wFlags) /* Send WM_ENTERMENULOOP and WM_INITMENU message only if TPM_NONOTIFY flag is not specified */ if (!(wFlags & TPM_NONOTIFY)) - SendMessageA( hWnd, WM_ENTERMENULOOP, bPopup, 0 ); + SendMessageW( hWnd, WM_ENTERMENULOOP, bPopup, 0 ); - SendMessageA( hWnd, WM_SETCURSOR, (WPARAM)hWnd, HTCAPTION ); + SendMessageW( hWnd, WM_SETCURSOR, (WPARAM)hWnd, HTCAPTION ); if (!(wFlags & TPM_NONOTIFY)) { POPUPMENU *menu; - SendMessageA( hWnd, WM_INITMENU, (WPARAM)hMenu, 0 ); + SendMessageW( hWnd, WM_INITMENU, (WPARAM)hMenu, 0 ); if ((menu = MENU_GetMenu( hMenu )) && (!menu->Height)) { /* app changed/recreated menu bar entries in WM_INITMENU Recalculate menu sizes else clicks will not work */ @@ -2966,7 +2965,7 @@ static BOOL MENU_ExitTracking(HWND hWnd) { TRACE("hwnd=%p\n", hWnd); - SendMessageA( hWnd, WM_EXITMENULOOP, 0, 0 ); + SendMessageW( hWnd, WM_EXITMENULOOP, 0, 0 ); ShowCaret(0); return TRUE; } @@ -3009,7 +3008,7 @@ void MENU_TrackKbdMenuBar( HWND hwnd, UINT wParam, INT vkey) /* find window that has a menu */ - while (GetWindowLongA( hwnd, GWL_STYLE ) & WS_CHILD) + while (GetWindowLongW( hwnd, GWL_STYLE ) & WS_CHILD) if (!(hwnd = GetParent( hwnd ))) return; /* check if we have to track a system menu */ @@ -3017,8 +3016,8 @@ void MENU_TrackKbdMenuBar( HWND hwnd, UINT wParam, INT vkey) hTrackMenu = GetMenu( hwnd ); if (!hTrackMenu || IsIconic(hwnd) || vkey == VK_SPACE ) { - if (!(GetWindowLongA( hwnd, GWL_STYLE ) & WS_SYSMENU)) return; - if (GetWindowLongA( hwnd, GWL_EXSTYLE ) & WS_EX_MANAGED) return; + if (!(GetWindowLongW( hwnd, GWL_STYLE ) & WS_SYSMENU)) return; + if (GetWindowLongW( hwnd, GWL_EXSTYLE ) & WS_EX_MANAGED) return; hTrackMenu = get_win_sys_menu( hwnd ); uItem = 0; wParam |= HTSYSMENU; /* prevent item lookup */ @@ -3045,7 +3044,7 @@ void MENU_TrackKbdMenuBar( HWND hwnd, UINT wParam, INT vkey) if( uItem == NO_SELECTED_ITEM ) MENU_MoveSelection( hwnd, hTrackMenu, ITEM_NEXT ); else if( vkey ) - PostMessageA( hwnd, WM_KEYDOWN, VK_DOWN, 0L ); + PostMessageW( hwnd, WM_KEYDOWN, VK_DOWN, 0L ); MENU_TrackMenu( hTrackMenu, wFlags, 0, 0, hwnd, NULL ); } @@ -3069,7 +3068,7 @@ BOOL WINAPI TrackPopupMenu( HMENU hMenu, UINT wFlags, INT x, INT y, /* Send WM_INITMENUPOPUP message only if TPM_NONOTIFY flag is not specified */ if (!(wFlags & TPM_NONOTIFY)) - SendMessageA( hWnd, WM_INITMENUPOPUP, (WPARAM)hMenu, 0); + SendMessageW( hWnd, WM_INITMENUPOPUP, (WPARAM)hMenu, 0); if (MENU_ShowPopup( hWnd, hMenu, 0, x, y, 0, 0 )) ret = MENU_TrackMenu( hMenu, wFlags | TPM_POPUPMENU, 0, 0, hWnd, lpRect ); @@ -3118,7 +3117,7 @@ static LRESULT WINAPI PopupMenuWndProc( HWND hwnd, UINT message, WPARAM wParam, PAINTSTRUCT ps; BeginPaint( hwnd, &ps ); MENU_DrawPopupMenu( hwnd, ps.hdc, - (HMENU)GetWindowLongA( hwnd, 0 ) ); + (HMENU)GetWindowLongW( hwnd, 0 ) ); EndPaint( hwnd, &ps ); return 0; } @@ -3748,7 +3747,7 @@ BOOL WINAPI SetSystemMenu( HWND hwnd, HMENU hMenu ) */ HMENU WINAPI GetMenu( HWND hWnd ) { - HMENU retvalue = (HMENU)GetWindowLongA( hWnd, GWL_ID ); + HMENU retvalue = (HMENU)GetWindowLongW( hWnd, GWL_ID ); TRACE("for %p returning %p\n", hWnd, retvalue); return retvalue; } @@ -3766,7 +3765,7 @@ BOOL WINAPI SetMenu( HWND hWnd, HMENU hMenu ) WARN("hMenu %p is not a menu handle\n", hMenu); return FALSE; } - if (GetWindowLongA( hWnd, GWL_STYLE ) & WS_CHILD) return FALSE; + if (GetWindowLongW( hWnd, GWL_STYLE ) & WS_CHILD) return FALSE; hWnd = WIN_GetFullHandle( hWnd ); if (GetCapture() == hWnd) MENU_SetCapture(0); /* release the capture */ @@ -3780,7 +3779,7 @@ BOOL WINAPI SetMenu( HWND hWnd, HMENU hMenu ) lpmenu->hWnd = hWnd; lpmenu->Height = 0; /* Make sure we recalculate the size */ } - SetWindowLongA( hWnd, GWL_ID, (LONG_PTR)hMenu ); + SetWindowLongW( hWnd, GWL_ID, (LONG_PTR)hMenu ); if (IsWindowVisible(hWnd)) SetWindowPos( hWnd, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | @@ -3811,7 +3810,7 @@ BOOL WINAPI DrawMenuBar( HWND hWnd ) LPPOPUPMENU lppop; HMENU hMenu = GetMenu(hWnd); - if (GetWindowLongA( hWnd, GWL_STYLE ) & WS_CHILD) return FALSE; + if (GetWindowLongW( hWnd, GWL_STYLE ) & WS_CHILD) return FALSE; if (!hMenu || !(lppop = MENU_GetMenu( hMenu ))) return FALSE; lppop->Height = 0; /* Make sure we call MENU_MenuBarCalcSize */ @@ -3907,7 +3906,7 @@ void WINAPI EndMenu(void) /* which will now terminate the menu, in the event that */ /* the main window was minimized, or lost focus, so we */ /* don't end up with an orphaned menu */ - PostMessageA( top_popup, WM_CANCELMODE, 0, 0); + PostMessageW( top_popup, WM_CANCELMODE, 0, 0); } } @@ -4661,7 +4660,7 @@ static BOOL translate_accelerator( HWND hWnd, UINT message, WPARAM wParam, LPARA HMENU hMenu, hSubMenu, hSysMenu; UINT uSysStat = (UINT)-1, uStat = (UINT)-1, nPos; - hMenu = (GetWindowLongA( hWnd, GWL_STYLE ) & WS_CHILD) ? 0 : GetMenu(hWnd); + hMenu = (GetWindowLongW( hWnd, GWL_STYLE ) & WS_CHILD) ? 0 : GetMenu(hWnd); hSysMenu = get_win_sys_menu( hWnd ); /* find menu item and ask application to initialize it */ @@ -4670,12 +4669,12 @@ static BOOL translate_accelerator( HWND hWnd, UINT message, WPARAM wParam, LPARA nPos = cmd; if(MENU_FindItem(&hSubMenu, &nPos, MF_BYCOMMAND)) { - SendMessageA(hWnd, WM_INITMENU, (WPARAM)hSysMenu, 0L); + SendMessageW(hWnd, WM_INITMENU, (WPARAM)hSysMenu, 0L); if(hSubMenu != hSysMenu) { nPos = MENU_FindSubMenu(&hSysMenu, hSubMenu); TRACE_(accel)("hSysMenu = %p, hSubMenu = %p, nPos = %d\n", hSysMenu, hSubMenu, nPos); - SendMessageA(hWnd, WM_INITMENUPOPUP, (WPARAM)hSubMenu, MAKELPARAM(nPos, TRUE)); + SendMessageW(hWnd, WM_INITMENUPOPUP, (WPARAM)hSubMenu, MAKELPARAM(nPos, TRUE)); } uSysStat = GetMenuState(GetSubMenu(hSysMenu, 0), cmd, MF_BYCOMMAND); } @@ -4685,12 +4684,12 @@ static BOOL translate_accelerator( HWND hWnd, UINT message, WPARAM wParam, LPARA nPos = cmd; if(MENU_FindItem(&hSubMenu, &nPos, MF_BYCOMMAND)) { - SendMessageA(hWnd, WM_INITMENU, (WPARAM)hMenu, 0L); + SendMessageW(hWnd, WM_INITMENU, (WPARAM)hMenu, 0L); if(hSubMenu != hMenu) { nPos = MENU_FindSubMenu(&hMenu, hSubMenu); TRACE_(accel)("hMenu = %p, hSubMenu = %p, nPos = %d\n", hMenu, hSubMenu, nPos); - SendMessageA(hWnd, WM_INITMENUPOPUP, (WPARAM)hSubMenu, MAKELPARAM(nPos, FALSE)); + SendMessageW(hWnd, WM_INITMENUPOPUP, (WPARAM)hSubMenu, MAKELPARAM(nPos, FALSE)); } uStat = GetMenuState(hMenu, cmd, MF_BYCOMMAND); } @@ -4725,12 +4724,12 @@ static BOOL translate_accelerator( HWND hWnd, UINT message, WPARAM wParam, LPARA if( mesg==WM_COMMAND ) { TRACE_(accel)(", sending WM_COMMAND, wParam=%0x\n", 0x10000 | cmd); - SendMessageA(hWnd, mesg, 0x10000 | cmd, 0L); + SendMessageW(hWnd, mesg, 0x10000 | cmd, 0L); } else if( mesg==WM_SYSCOMMAND ) { TRACE_(accel)(", sending WM_SYSCOMMAND, wParam=%0x\n", cmd); - SendMessageA(hWnd, mesg, cmd, 0x00010000L); + SendMessageW(hWnd, mesg, cmd, 0x00010000L); } else { diff --git a/dlls/user/controls.h b/dlls/user/controls.h index fdfa6160ffe..c589ce5416b 100644 --- a/dlls/user/controls.h +++ b/dlls/user/controls.h @@ -25,7 +25,8 @@ #include "winproc.h" /* Built-in class names (see _Undocumented_Windows_ p.418) */ -#define POPUPMENU_CLASS_ATOM MAKEINTATOMA(32768) /* PopupMenu */ +#define POPUPMENU_CLASS_ATOMA MAKEINTATOMA(32768) /* PopupMenu */ +#define POPUPMENU_CLASS_ATOMW MAKEINTATOMW(32768) /* PopupMenu */ #define DESKTOP_CLASS_ATOM MAKEINTATOMA(32769) /* Desktop */ #define DIALOG_CLASS_ATOMA MAKEINTATOMA(32770) /* Dialog */ #define DIALOG_CLASS_ATOMW MAKEINTATOMW(32770) /* Dialog */