From c2c03b022ded3c27336e2aafe257988ef736b7a7 Mon Sep 17 00:00:00 2001 From: Gyorgy 'Nog' Jeney Date: Tue, 17 Sep 2002 18:30:07 +0000 Subject: [PATCH] - Unicodeify control. - use void instead of VOID. - Pass infoPtr around instead of HWND. - Implement most of the control. --- dlls/comctl32/comctl32.h | 6 +- dlls/comctl32/comctl_En.rc | 5 + dlls/comctl32/hotkey.c | 398 ++++++++++++++++++++++++------------- 3 files changed, 271 insertions(+), 138 deletions(-) diff --git a/dlls/comctl32/comctl32.h b/dlls/comctl32/comctl32.h index 84b35f81c53..5a077b37642 100644 --- a/dlls/comctl32/comctl32.h +++ b/dlls/comctl32/comctl32.h @@ -83,7 +83,7 @@ extern HBRUSH COMCTL32_hPattern55AABrush; #define IDM_TODAY 4163 #define IDM_GOTODAY 4164 -/* Treeview Checboxes */ +/* Treeview Checkboxes */ #define IDT_CHECK 401 @@ -96,6 +96,10 @@ extern HBRUSH COMCTL32_hPattern55AABrush; /* DragList icon */ #define IDI_DRAGARROW 150 + +/* HOTKEY internal strings */ +#define HKY_NONE 2048 + typedef struct { COLORREF clrBtnHighlight; /* COLOR_BTNHIGHLIGHT */ diff --git a/dlls/comctl32/comctl_En.rc b/dlls/comctl32/comctl_En.rc index e77af1b71c7..cc21ecbc485 100644 --- a/dlls/comctl32/comctl_En.rc +++ b/dlls/comctl32/comctl_En.rc @@ -79,3 +79,8 @@ STRINGTABLE DISCARDABLE { IDS_SEPARATOR "Separator" } + +STRINGTABLE DISCARDABLE +{ + HKY_NONE "None" +} diff --git a/dlls/comctl32/hotkey.c b/dlls/comctl32/hotkey.c index e5ddb6f16b8..fd1cc0a4c6a 100644 --- a/dlls/comctl32/hotkey.c +++ b/dlls/comctl32/hotkey.c @@ -2,6 +2,7 @@ * Hotkey control * * Copyright 1998, 1999 Eric Kohl + * Copyright 2002 Gyorgy 'Nog' Jeney * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -17,59 +18,210 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * NOTES - * Development in progress. An author is needed! Any volunteers? - * I will only improve this control once in a while. - * Eric - * * TODO: - * - Some messages. - * - Display code. + * - What are we meant to do with the WM_CHAR message? */ #include #include "winbase.h" #include "commctrl.h" +#include "comctl32.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(hotkey); typedef struct tagHOTKEY_INFO { + HWND hwndSelf; HFONT hFont; BOOL bFocus; INT nHeight; + WORD HotKey; + WORD InvComb; + WORD InvMod; + BYTE CurrMod; + INT CaretPos; + DWORD ScanCode; + WCHAR strNone[15]; /* hope its long enough ... */ } HOTKEY_INFO; #define HOTKEY_GetInfoPtr(hwnd) ((HOTKEY_INFO *)GetWindowLongA (hwnd, 0)) +static const WCHAR HOTKEY_plussep[] = { ' ', '+', ' ' }; -/* << HOTHEY_GetHotKey >> */ -/* << HOTHEY_SetHotKey >> */ -/* << HOTHEY_SetRules >> */ +#define IsOnlySet(flags) (infoPtr->CurrMod == (flags)) +static BOOL +HOTKEY_IsCombInv(HOTKEY_INFO *infoPtr) +{ + TRACE("(infoPtr=%p)\n", infoPtr); + if((infoPtr->InvComb & HKCOMB_NONE) && !infoPtr->CurrMod) + return TRUE; + if((infoPtr->InvComb & HKCOMB_S) && IsOnlySet(HOTKEYF_SHIFT)) + return TRUE; + if((infoPtr->InvComb & HKCOMB_C) && IsOnlySet(HOTKEYF_CONTROL)) + return TRUE; + if((infoPtr->InvComb & HKCOMB_A) && IsOnlySet(HOTKEYF_ALT)) + return TRUE; + if((infoPtr->InvComb & HKCOMB_SC) && + IsOnlySet(HOTKEYF_SHIFT | HOTKEYF_CONTROL)) + return TRUE; + if((infoPtr->InvComb & HKCOMB_SA) && IsOnlySet(HOTKEYF_SHIFT | HOTKEYF_ALT)) + return TRUE; + if((infoPtr->InvComb & HKCOMB_CA) && + IsOnlySet(HOTKEYF_CONTROL | HOTKEYF_ALT)) + return TRUE; + if((infoPtr->InvComb & HKCOMB_SCA) && + IsOnlySet(HOTKEYF_SHIFT | HOTKEYF_CONTROL | HOTKEYF_ALT)) + return TRUE; + TRACE("() Modifiers are valid\n"); + return FALSE; +} +#undef IsOnlySet + +static void +HOTKEY_DrawHotKey(HOTKEY_INFO *infoPtr, LPCWSTR KeyName, WORD NameLen, + LPRECT rc, HDC hdc) +{ + SIZE TextSize; + DWORD dwExStyle = GetWindowLongW (infoPtr->hwndSelf, GWL_EXSTYLE); + + /* We have to allow some space for the frame to be drawn */ + rc->left += 2; + rc->top++; + DrawTextW(hdc, KeyName, NameLen, rc, DT_LEFT | DT_VCENTER); + rc->left -= 2; + rc->top--; + if(dwExStyle & WS_EX_CLIENTEDGE) + DrawEdge(hdc, rc, EDGE_SUNKEN, BF_RECT | BF_ADJUST); + + /* Get the text size and position the caret accordingly */ + GetTextExtentPoint32W (hdc, KeyName, NameLen, &TextSize); + infoPtr->CaretPos = TextSize.cx + 2; + SetCaretPos(infoPtr->CaretPos, 3); +} + +/* Draw the names of the keys in the control */ +static void +HOTKEY_Refresh(HOTKEY_INFO *infoPtr, HDC hdc) +{ + WCHAR KeyName[sizeof(WCHAR) * 64]; + WORD NameLen = 0; + BYTE Modifier; + RECT rc; + + GetClientRect(infoPtr->hwndSelf, &rc); + + TRACE("(infoPtr=%p hdc=%x)\n", infoPtr, hdc); + + if(!infoPtr->CurrMod && !infoPtr->HotKey) { + HOTKEY_DrawHotKey (infoPtr, infoPtr->strNone, 4, &rc, hdc); + return; + } + + if(infoPtr->HotKey) + Modifier = HIBYTE(infoPtr->HotKey); + else if(HOTKEY_IsCombInv(infoPtr)) + Modifier = infoPtr->InvMod; + else + Modifier = infoPtr->CurrMod; + + if(Modifier & HOTKEYF_CONTROL) { + GetKeyNameTextW(MAKELPARAM(0, MapVirtualKeyW(VK_CONTROL, 0)), + KeyName, 64); + NameLen = lstrlenW(KeyName); + memcpy(&KeyName[NameLen], HOTKEY_plussep, sizeof(HOTKEY_plussep)); + NameLen += 3; + } + if(Modifier & HOTKEYF_SHIFT) { + GetKeyNameTextW(MAKELPARAM(0, MapVirtualKeyW(VK_SHIFT, 0)), + &KeyName[NameLen], 64 - NameLen); + NameLen = lstrlenW(KeyName); + memcpy(&KeyName[NameLen], HOTKEY_plussep, sizeof(HOTKEY_plussep)); + NameLen += 3; + } + if(Modifier & HOTKEYF_ALT) { + GetKeyNameTextW(MAKELPARAM(0, MapVirtualKeyW(VK_MENU, 0)), + &KeyName[NameLen], 64 - NameLen); + NameLen = lstrlenW(KeyName); + memcpy(&KeyName[NameLen], HOTKEY_plussep, sizeof(HOTKEY_plussep)); + NameLen += 3; + } + + if(infoPtr->HotKey) { + GetKeyNameTextW(infoPtr->ScanCode, &KeyName[NameLen], 64 - NameLen); + NameLen = lstrlenW(KeyName); + } + else + KeyName[NameLen] = 0; + + HOTKEY_DrawHotKey (infoPtr, KeyName, NameLen, &rc, hdc); +} + +static void +HOTKEY_Paint(HOTKEY_INFO *infoPtr, HDC hdc) +{ + if (hdc) + HOTKEY_Refresh(infoPtr, hdc); + else { + PAINTSTRUCT ps; + hdc = BeginPaint (infoPtr->hwndSelf, &ps); + HOTKEY_Refresh (infoPtr, hdc); + EndPaint (infoPtr->hwndSelf, &ps); + } +} + +static LRESULT +HOTKEY_GetHotKey(HOTKEY_INFO *infoPtr) +{ + TRACE("(infoPtr=%p) Modifiers: 0x%x, Virtual Key: %d\n", infoPtr, + HIBYTE(infoPtr->HotKey), LOBYTE(infoPtr->HotKey)); + return (LRESULT)infoPtr->HotKey; +} + +static void +HOTKEY_SetHotKey(HOTKEY_INFO *infoPtr, WPARAM wParam) +{ + infoPtr->HotKey = (WORD)wParam; + infoPtr->ScanCode = + MAKELPARAM(0, MapVirtualKeyW(LOBYTE(infoPtr->HotKey), 0)); + TRACE("(infoPtr=%p wParam=%x) Modifiers: 0x%x, Virtual Key: %d\n", infoPtr, + wParam, HIBYTE(infoPtr->HotKey), LOBYTE(infoPtr->HotKey)); + InvalidateRect(infoPtr->hwndSelf, NULL, TRUE); +} + +static void +HOTKEY_SetRules(HOTKEY_INFO *infoPtr, WPARAM wParam, LPARAM lParam) +{ + infoPtr->InvComb = (WORD)wParam; + infoPtr->InvMod = (WORD)lParam; + TRACE("(infoPtr=%p) Invalid Modifers: 0x%x, If Invalid: 0x%x\n", infoPtr, + infoPtr->InvComb, infoPtr->InvMod); +} /* << HOTKEY_Char >> */ - static LRESULT HOTKEY_Create (HWND hwnd, WPARAM wParam, LPARAM lParam) { HOTKEY_INFO *infoPtr; - TEXTMETRICA tm; + TEXTMETRICW tm; HDC hdc; /* allocate memory for info structure */ infoPtr = (HOTKEY_INFO *)COMCTL32_Alloc (sizeof(HOTKEY_INFO)); - SetWindowLongA (hwnd, 0, (DWORD)infoPtr); + SetWindowLongW (hwnd, 0, (DWORD)infoPtr); /* initialize info structure */ - + infoPtr->HotKey = infoPtr->InvComb = infoPtr->InvMod = infoPtr->CurrMod = 0; + infoPtr->CaretPos = 2; + infoPtr->hwndSelf = hwnd; + LoadStringW(COMCTL32_hModule, HKY_NONE, infoPtr->strNone, 15); /* get default font height */ hdc = GetDC (hwnd); - GetTextMetricsA (hdc, &tm); + GetTextMetricsW (hdc, &tm); infoPtr->nHeight = tm.tmHeight; ReleaseDC (hwnd, hdc); @@ -78,32 +230,28 @@ HOTKEY_Create (HWND hwnd, WPARAM wParam, LPARAM lParam) static LRESULT -HOTKEY_Destroy (HWND hwnd, WPARAM wParam, LPARAM lParam) +HOTKEY_Destroy (HOTKEY_INFO *infoPtr, WPARAM wParam, LPARAM lParam) { - HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd); - - - + HWND hwnd = infoPtr->hwndSelf; /* free hotkey info data */ COMCTL32_Free (infoPtr); - SetWindowLongA (hwnd, 0, 0); + SetWindowLongW (hwnd, 0, 0); return 0; } static LRESULT -HOTKEY_EraseBackground (HWND hwnd, WPARAM wParam, LPARAM lParam) +HOTKEY_EraseBackground (HOTKEY_INFO *infoPtr, WPARAM wParam, LPARAM lParam) { - /* HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd); */ HBRUSH hBrush; RECT rc; hBrush = - (HBRUSH)SendMessageA (GetParent (hwnd), WM_CTLCOLOREDIT, - wParam, (LPARAM)hwnd); + (HBRUSH)SendMessageW (GetParent (infoPtr->hwndSelf), WM_CTLCOLOREDIT, + wParam, (LPARAM)infoPtr->hwndSelf); if (hBrush) hBrush = (HBRUSH)GetStockObject (WHITE_BRUSH); - GetClientRect (hwnd, &rc); + GetClientRect (infoPtr->hwndSelf, &rc); FillRect ((HDC)wParam, &rc, hBrush); @@ -112,18 +260,17 @@ HOTKEY_EraseBackground (HWND hwnd, WPARAM wParam, LPARAM lParam) inline static LRESULT -HOTKEY_GetFont (HWND hwnd, WPARAM wParam, LPARAM lParam) +HOTKEY_GetFont (HOTKEY_INFO *infoPtr, WPARAM wParam, LPARAM lParam) { - HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd); - return infoPtr->hFont; } - static LRESULT -HOTKEY_KeyDown (HWND hwnd, WPARAM wParam, LPARAM lParam) +HOTKEY_KeyDown (HOTKEY_INFO *infoPtr, WPARAM wParam, LPARAM lParam) { - /* HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd); */ + TRACE("() Key: %d\n", wParam); + /* If any key is Pressed, we have to reset the hotkey in the control */ + infoPtr->HotKey = 0; switch (wParam) { case VK_RETURN: @@ -132,39 +279,61 @@ HOTKEY_KeyDown (HWND hwnd, WPARAM wParam, LPARAM lParam) case VK_DELETE: case VK_ESCAPE: case VK_BACK: - return DefWindowProcA (hwnd, WM_KEYDOWN, wParam, lParam); + InvalidateRect(infoPtr->hwndSelf, NULL, TRUE); + return DefWindowProcW (infoPtr->hwndSelf, WM_KEYDOWN, wParam, + lParam); case VK_SHIFT: + infoPtr->CurrMod |= HOTKEYF_SHIFT; + break; case VK_CONTROL: + infoPtr->CurrMod |= HOTKEYF_CONTROL; + break; case VK_MENU: - FIXME("modifier key pressed!\n"); + infoPtr->CurrMod |= HOTKEYF_ALT; break; default: - FIXME(" %d\n", wParam); + if(HOTKEY_IsCombInv(infoPtr)) + infoPtr->HotKey = MAKEWORD(wParam, infoPtr->InvMod); + else + infoPtr->HotKey = MAKEWORD(wParam, infoPtr->CurrMod); + infoPtr->ScanCode = lParam; break; } - return TRUE; + InvalidateRect(infoPtr->hwndSelf, NULL, TRUE); + return 0; } static LRESULT -HOTKEY_KeyUp (HWND hwnd, WPARAM wParam, LPARAM lParam) +HOTKEY_KeyUp (HOTKEY_INFO *infoPtr, WPARAM wParam, LPARAM lParam) { - /* HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd); */ + TRACE("() Key: %d\n", wParam); + switch (wParam) { + case VK_SHIFT: + infoPtr->CurrMod &= ~HOTKEYF_SHIFT; + break; + case VK_CONTROL: + infoPtr->CurrMod &= ~HOTKEYF_CONTROL; + break; + case VK_MENU: + infoPtr->CurrMod &= ~HOTKEYF_ALT; + break; + default: + return 1; + } - FIXME(" %d\n", wParam); + InvalidateRect(infoPtr->hwndSelf, NULL, TRUE); return 0; } static LRESULT -HOTKEY_KillFocus (HWND hwnd, WPARAM wParam, LPARAM lParam) +HOTKEY_KillFocus (HOTKEY_INFO *infoPtr, WPARAM wParam, LPARAM lParam) { - HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd); - infoPtr->bFocus = FALSE; DestroyCaret (); @@ -173,41 +342,34 @@ HOTKEY_KillFocus (HWND hwnd, WPARAM wParam, LPARAM lParam) static LRESULT -HOTKEY_LButtonDown (HWND hwnd, WPARAM wParam, LPARAM lParam) +HOTKEY_LButtonDown (HOTKEY_INFO *infoPtr, WPARAM wParam, LPARAM lParam) { -/* HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd); */ - - SetFocus (hwnd); + SetFocus (infoPtr->hwndSelf); return 0; } inline static LRESULT -HOTKEY_NCCreate (HWND hwnd, WPARAM wParam, LPARAM lParam) +HOTKEY_NCCreate (HOTKEY_INFO *infoPtr, WPARAM wParam, LPARAM lParam) { - DWORD dwExStyle = GetWindowLongA (hwnd, GWL_EXSTYLE); - SetWindowLongA (hwnd, GWL_EXSTYLE, dwExStyle | WS_EX_CLIENTEDGE); - return DefWindowProcA (hwnd, WM_NCCREATE, wParam, lParam); + DWORD dwExStyle = GetWindowLongW (infoPtr->hwndSelf, GWL_EXSTYLE); + SetWindowLongW (infoPtr->hwndSelf, GWL_EXSTYLE, + dwExStyle | WS_EX_CLIENTEDGE); + return DefWindowProcW (infoPtr->hwndSelf, WM_NCCREATE, wParam, lParam); } - - - - static LRESULT -HOTKEY_SetFocus (HWND hwnd, WPARAM wParam, LPARAM lParam) +HOTKEY_SetFocus (HOTKEY_INFO *infoPtr, WPARAM wParam, LPARAM lParam) { - HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd); - infoPtr->bFocus = TRUE; - CreateCaret (hwnd, (HBITMAP)0, 1, infoPtr->nHeight); + CreateCaret (infoPtr->hwndSelf, (HBITMAP)0, 1, infoPtr->nHeight - 2); - SetCaretPos (1, 1); + SetCaretPos (infoPtr->CaretPos, 3); - ShowCaret (hwnd); + ShowCaret (infoPtr->hwndSelf); return 0; @@ -215,88 +377,48 @@ HOTKEY_SetFocus (HWND hwnd, WPARAM wParam, LPARAM lParam) inline static LRESULT -HOTKEY_SetFont (HWND hwnd, WPARAM wParam, LPARAM lParam) +HOTKEY_SetFont (HOTKEY_INFO *infoPtr, WPARAM wParam, LPARAM lParam) { - HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd); - TEXTMETRICA tm; + TEXTMETRICW tm; HDC hdc; HFONT hOldFont = 0; infoPtr->hFont = (HFONT)wParam; - hdc = GetDC (hwnd); + hdc = GetDC (infoPtr->hwndSelf); if (infoPtr->hFont) hOldFont = SelectObject (hdc, infoPtr->hFont); - GetTextMetricsA (hdc, &tm); + GetTextMetricsW (hdc, &tm); infoPtr->nHeight = tm.tmHeight; if (infoPtr->hFont) SelectObject (hdc, hOldFont); - ReleaseDC (hwnd, hdc); + ReleaseDC (infoPtr->hwndSelf, hdc); - if (LOWORD(lParam)) { - - FIXME("force redraw!\n"); - - } + if (LOWORD(lParam)) + InvalidateRect (infoPtr->hwndSelf, NULL, TRUE); return 0; } - -static LRESULT WINE_UNUSED -HOTKEY_SysKeyDown (HWND hwnd, WPARAM wParam, LPARAM lParam) -{ - /* HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd); */ - - switch (wParam) { - case VK_RETURN: - case VK_TAB: - case VK_SPACE: - case VK_DELETE: - case VK_ESCAPE: - case VK_BACK: - return DefWindowProcA (hwnd, WM_SYSKEYDOWN, wParam, lParam); - - case VK_SHIFT: - case VK_CONTROL: - case VK_MENU: - FIXME("modifier key pressed!\n"); - break; - - default: - FIXME(" %d\n", wParam); - break; - } - - return TRUE; -} - - -static LRESULT WINE_UNUSED -HOTKEY_SysKeyUp (HWND hwnd, WPARAM wParam, LPARAM lParam) -{ - /* HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd); */ - - FIXME(" %d\n", wParam); - - return 0; -} - - - static LRESULT WINAPI HOTKEY_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { + HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd); TRACE("hwnd=%x msg=%x wparam=%x lparam=%lx\n", hwnd, uMsg, wParam, lParam); - if (!HOTKEY_GetInfoPtr (hwnd) && (uMsg != WM_CREATE)) - return DefWindowProcA (hwnd, uMsg, wParam, lParam); + if (!infoPtr && (uMsg != WM_CREATE)) + return DefWindowProcW (hwnd, uMsg, wParam, lParam); switch (uMsg) { -/* case HKM_GETHOTKEY: */ -/* case HKM_SETHOTKEY: */ -/* case HKM_SETRULES: */ + case HKM_GETHOTKEY: + return HOTKEY_GetHotKey (infoPtr); + case HKM_SETHOTKEY: + HOTKEY_SetHotKey (infoPtr, wParam); + break; + case HKM_SETRULES: + HOTKEY_SetRules (infoPtr, wParam, lParam); + break; /* case WM_CHAR: */ @@ -304,41 +426,43 @@ HOTKEY_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) return HOTKEY_Create (hwnd, wParam, lParam); case WM_DESTROY: - return HOTKEY_Destroy (hwnd, wParam, lParam); + return HOTKEY_Destroy (infoPtr, wParam, lParam); case WM_ERASEBKGND: - return HOTKEY_EraseBackground (hwnd, wParam, lParam); + return HOTKEY_EraseBackground (infoPtr, wParam, lParam); case WM_GETDLGCODE: return DLGC_WANTCHARS | DLGC_WANTARROWS; case WM_GETFONT: - return HOTKEY_GetFont (hwnd, wParam, lParam); + return HOTKEY_GetFont (infoPtr, wParam, lParam); case WM_KEYDOWN: case WM_SYSKEYDOWN: - return HOTKEY_KeyDown (hwnd, wParam, lParam); + return HOTKEY_KeyDown (infoPtr, wParam, lParam); case WM_KEYUP: case WM_SYSKEYUP: - return HOTKEY_KeyUp (hwnd, wParam, lParam); + return HOTKEY_KeyUp (infoPtr, wParam, lParam); case WM_KILLFOCUS: - return HOTKEY_KillFocus (hwnd, wParam, lParam); + return HOTKEY_KillFocus (infoPtr, wParam, lParam); case WM_LBUTTONDOWN: - return HOTKEY_LButtonDown (hwnd, wParam, lParam); + return HOTKEY_LButtonDown (infoPtr, wParam, lParam); case WM_NCCREATE: - return HOTKEY_NCCreate (hwnd, wParam, lParam); + return HOTKEY_NCCreate (infoPtr, wParam, lParam); -/* case WM_PAINT: */ + case WM_PAINT: + HOTKEY_Paint(infoPtr, (HDC)wParam); + return 0; case WM_SETFOCUS: - return HOTKEY_SetFocus (hwnd, wParam, lParam); + return HOTKEY_SetFocus (infoPtr, wParam, lParam); case WM_SETFONT: - return HOTKEY_SetFont (hwnd, wParam, lParam); + return HOTKEY_SetFont (infoPtr, wParam, lParam); /* case WM_SYSCHAR: */ @@ -346,32 +470,32 @@ HOTKEY_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) if ((uMsg >= WM_USER) && (uMsg < WM_APP)) ERR("unknown msg %04x wp=%08x lp=%08lx\n", uMsg, wParam, lParam); - return DefWindowProcA (hwnd, uMsg, wParam, lParam); + return DefWindowProcW (hwnd, uMsg, wParam, lParam); } return 0; } -VOID +void HOTKEY_Register (void) { - WNDCLASSA wndClass; + WNDCLASSW wndClass; - ZeroMemory (&wndClass, sizeof(WNDCLASSA)); + ZeroMemory (&wndClass, sizeof(WNDCLASSW)); wndClass.style = CS_GLOBALCLASS; wndClass.lpfnWndProc = (WNDPROC)HOTKEY_WindowProc; wndClass.cbClsExtra = 0; wndClass.cbWndExtra = sizeof(HOTKEY_INFO *); wndClass.hCursor = 0; wndClass.hbrBackground = 0; - wndClass.lpszClassName = HOTKEY_CLASSA; + wndClass.lpszClassName = HOTKEY_CLASSW; - RegisterClassA (&wndClass); + RegisterClassW (&wndClass); } -VOID +void HOTKEY_Unregister (void) { - UnregisterClassA (HOTKEY_CLASSA, (HINSTANCE)NULL); + UnregisterClassW (HOTKEY_CLASSW, (HINSTANCE)NULL); }