4 * Copyright 1998, 1999 Eric Kohl
7 * Development in progress. An author is needed! Any volunteers?
8 * I will only improve this control once in a while.
9 * Eric <ekohl@abo.rhein-zeitung.de>
22 #define HOTKEY_GetInfoPtr(hwnd) ((HOTKEY_INFO *)GetWindowLongA (hwnd, 0))
25 /* << HOTHEY_GetHotKey >> */
26 /* << HOTHEY_SetHotKey >> */
27 /* << HOTHEY_SetRules >> */
31 /* << HOTKEY_Char >> */
35 HOTKEY_Create (HWND hwnd, WPARAM wParam, LPARAM lParam)
41 /* allocate memory for info structure */
42 infoPtr = (HOTKEY_INFO *)COMCTL32_Alloc (sizeof(HOTKEY_INFO));
43 SetWindowLongA (hwnd, 0, (DWORD)infoPtr);
45 /* initialize info structure */
48 /* get default font height */
50 GetTextMetricsA (hdc, &tm);
51 infoPtr->nHeight = tm.tmHeight;
52 ReleaseDC (hwnd, hdc);
59 HOTKEY_Destroy (HWND hwnd, WPARAM wParam, LPARAM lParam)
61 HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd);
65 /* free hotkey info data */
66 COMCTL32_Free (infoPtr);
73 HOTKEY_EraseBackground (HWND hwnd, WPARAM wParam, LPARAM lParam)
75 /* HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd); */
80 (HBRUSH)SendMessageA (GetParent (hwnd), WM_CTLCOLOREDIT,
81 wParam, (LPARAM)hwnd);
83 hBrush = (HBRUSH)GetStockObject (WHITE_BRUSH);
84 GetClientRect (hwnd, &rc);
86 FillRect ((HDC)wParam, &rc, hBrush);
92 __inline__ static LRESULT
93 HOTKEY_GetFont (HWND hwnd, WPARAM wParam, LPARAM lParam)
95 HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd);
97 return infoPtr->hFont;
102 HOTKEY_KeyDown (HWND hwnd, WPARAM wParam, LPARAM lParam)
104 /* HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd); */
113 return DefWindowProcA (hwnd, WM_KEYDOWN, wParam, lParam);
118 FIXME (hotkey, "modifier key pressed!\n");
122 FIXME (hotkey, " %d\n", wParam);
131 HOTKEY_KeyUp (HWND hwnd, WPARAM wParam, LPARAM lParam)
133 /* HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd); */
135 FIXME (hotkey, " %d\n", wParam);
142 HOTKEY_KillFocus (HWND hwnd, WPARAM wParam, LPARAM lParam)
144 HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd);
146 infoPtr->bFocus = FALSE;
154 HOTKEY_LButtonDown (HWND hwnd, WPARAM wParam, LPARAM lParam)
156 /* HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd); */
164 __inline__ static LRESULT
165 HOTKEY_NCCreate (HWND hwnd, WPARAM wParam, LPARAM lParam)
167 DWORD dwExStyle = GetWindowLongA (hwnd, GWL_EXSTYLE);
168 SetWindowLongA (hwnd, GWL_EXSTYLE, dwExStyle | WS_EX_CLIENTEDGE);
169 return DefWindowProcA (hwnd, WM_NCCREATE, wParam, lParam);
177 HOTKEY_SetFocus (HWND hwnd, WPARAM wParam, LPARAM lParam)
179 HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd);
181 infoPtr->bFocus = TRUE;
184 CreateCaret (hwnd, (HBITMAP)0, 1, infoPtr->nHeight);
195 __inline__ static LRESULT
196 HOTKEY_SetFont (HWND hwnd, WPARAM wParam, LPARAM lParam)
198 HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd);
203 infoPtr->hFont = (HFONT)wParam;
207 hOldFont = SelectObject (hdc, infoPtr->hFont);
209 GetTextMetricsA (hdc, &tm);
210 infoPtr->nHeight = tm.tmHeight;
213 SelectObject (hdc, hOldFont);
214 ReleaseDC (hwnd, hdc);
216 if (LOWORD(lParam)) {
218 FIXME (hotkey, "force redraw!\n");
226 static LRESULT WINE_UNUSED
227 HOTKEY_SysKeyDown (HWND hwnd, WPARAM wParam, LPARAM lParam)
229 /* HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd); */
238 return DefWindowProcA (hwnd, WM_SYSKEYDOWN, wParam, lParam);
243 FIXME (hotkey, "modifier key pressed!\n");
247 FIXME (hotkey, " %d\n", wParam);
255 static LRESULT WINE_UNUSED
256 HOTKEY_SysKeyUp (HWND hwnd, WPARAM wParam, LPARAM lParam)
258 /* HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd); */
260 FIXME (hotkey, " %d\n", wParam);
268 HOTKEY_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
272 /* case HKM_GETHOTKEY: */
273 /* case HKM_SETHOTKEY: */
274 /* case HKM_SETRULES: */
279 return HOTKEY_Create (hwnd, wParam, lParam);
282 return HOTKEY_Destroy (hwnd, wParam, lParam);
285 return HOTKEY_EraseBackground (hwnd, wParam, lParam);
288 return DLGC_WANTCHARS | DLGC_WANTARROWS;
291 return HOTKEY_GetFont (hwnd, wParam, lParam);
295 return HOTKEY_KeyDown (hwnd, wParam, lParam);
299 return HOTKEY_KeyUp (hwnd, wParam, lParam);
302 return HOTKEY_KillFocus (hwnd, wParam, lParam);
305 return HOTKEY_LButtonDown (hwnd, wParam, lParam);
308 return HOTKEY_NCCreate (hwnd, wParam, lParam);
313 return HOTKEY_SetFocus (hwnd, wParam, lParam);
316 return HOTKEY_SetFont (hwnd, wParam, lParam);
318 /* case WM_SYSCHAR: */
322 ERR (hotkey, "unknown msg %04x wp=%08x lp=%08lx\n",
323 uMsg, wParam, lParam);
324 return DefWindowProcA (hwnd, uMsg, wParam, lParam);
331 HOTKEY_Register (VOID)
335 if (GlobalFindAtomA (HOTKEY_CLASSA)) return;
337 ZeroMemory (&wndClass, sizeof(WNDCLASSA));
338 wndClass.style = CS_GLOBALCLASS;
339 wndClass.lpfnWndProc = (WNDPROC)HOTKEY_WindowProc;
340 wndClass.cbClsExtra = 0;
341 wndClass.cbWndExtra = sizeof(HOTKEY_INFO *);
342 wndClass.hCursor = 0;
343 wndClass.hbrBackground = 0;
344 wndClass.lpszClassName = HOTKEY_CLASSA;
346 RegisterClassA (&wndClass);
351 HOTKEY_Unregister (VOID)
353 if (GlobalFindAtomA (HOTKEY_CLASSA))
354 UnregisterClassA (HOTKEY_CLASSA, (HINSTANCE)NULL);