2008-09-30 47 views
1

我有一個對話框,允許用戶設置在Windows上的3D程序中使用的熱鍵。我正在使用CHotKeyCtrl,這很不錯,但不處理用戶想要使用的一些鍵 - 特別是選項卡和空格。控制獲取熱鍵如選項卡和空格

熱鍵處理足夠聰明,能夠觸發這些鍵,我只需要一個UI來讓它們被設置。類似於CHotKeyCtrl的控件將是理想的,但其他解決方法也是值得讚賞的。

回答

1

一個解決方法選項是使用帶有消息掛鉤功能的庫存標準編輯控件。

這將允許您捕獲鍵盤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都使用這種方法如果編輯控件具有焦點,按下按鈕將被髮送到掛鉤。

+0

這看起來不錯。我會看看我是否可以實現這一點,並在有機會時將其發回。 – tfinniga 2009-02-13 23:34:54