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
);