1
我有一個對話框,允許用戶設置在Windows上的3D程序中使用的熱鍵。我正在使用CHotKeyCtrl,這很不錯,但不處理用戶想要使用的一些鍵 - 特別是選項卡和空格。控制獲取熱鍵如選項卡和空格
熱鍵處理足夠聰明,能夠觸發這些鍵,我只需要一個UI來讓它們被設置。類似於CHotKeyCtrl的控件將是理想的,但其他解決方法也是值得讚賞的。
我有一個對話框,允許用戶設置在Windows上的3D程序中使用的熱鍵。我正在使用CHotKeyCtrl,這很不錯,但不處理用戶想要使用的一些鍵 - 特別是選項卡和空格。控制獲取熱鍵如選項卡和空格
熱鍵處理足夠聰明,能夠觸發這些鍵,我只需要一個UI來讓它們被設置。類似於CHotKeyCtrl的控件將是理想的,但其他解決方法也是值得讚賞的。
一個解決方法選項是使用帶有消息掛鉤功能的庫存標準編輯控件。
這將允許您捕獲鍵盤WM_KEYDOWN發送到該編輯控件的消息。
鉤子函數會是這個樣子:
LRESULT CALLBACK MessageHook(int code, WPARAM wParam, LPMSG lpMsg)
{
LRESULT lResult = 0;
if ((code >= 0) && (code == MSGF_DIALOGBOX))
{
if (lpMsg->message == WM_KEYDOWN)
{
//-- process the key down message
lResult = 1;
}
}
// do default processing if required
if (lResult == 0)
{
lResult = CallNextHookEx(MessageFilterHook, code, wParam, (LPARAM)lpMsg);
}
return lResult;
}
鉤然後可以連接到編輯器時編輯控件獲得焦點如下:
//-- create an instance thunk for our hook callback
FARPROC FilterProc = (FARPROC) MakeProcInstance((HOOKPROC)(MessageHook),
hInstance);
//-- attach the message hook
FilterHook = SetWindowsHookEx(WH_MSGFILTER,
(HOOKPROC)FilterProc,
hInstance, GetCurrentThreadId());
並取消了編輯時控制失焦時如下:
//-- remove a message hook
UnhookWindowsHookEx(MessageFilterHook);
每個ke都使用這種方法如果編輯控件具有焦點,按下按鈕將被髮送到掛鉤。
這看起來不錯。我會看看我是否可以實現這一點,並在有機會時將其發回。 – tfinniga 2009-02-13 23:34:54