[英]WM_HOTKEY not catching
我試圖為我的MFC應用程序分配一個熱鍵。 我希望即使我的應用程序不集中時它也能正常工作。
我正在使用Visual Studio 2013。
我的對話框繼承了CWnd
類,如下所示:
class CMyClass : public CWnd
在課堂上,我定義了這一點:
protected:
//...
afx_msg void OnHotKey(UINT id, UINT key1, UINT key2);
編輯:我也嘗試將override
關鍵字放在此處,但是隨后它告訴我它不繼承基類成員。
在我的實現中:
void CMyClass::OnHotKey(UINT id, UINT key1, UINT key2)
{
if (id == 1 || id == 2)
{
// do something
}
}
在我的構造函數中:
if (!RegisterHotKey(NULL /* also tried m_hWnd */, 1, MOD_ALT | MOD_SHIFT, 0x56 /* 'V' */))
{
// do some failure code, but it passes
}
if (!RegisterHotKey(NULL /* also tried m_hWnd */, 2, MOD_ALT | MOD_SHIFT, 0x76 /* 'v' */))
{
// do some failure code.. but it passes
}
在我的析構函數中:
// Unregister hotkeys
UnregisterHotKey(NULL /* also tried m_hWnd */, 1);
UnregisterHotKey(NULL /* also tried m_hWnd */, 2);
在我的BEGIN_MESSAGE_MAP
:
ON_WM_HOTKEY()
現在,我調試了它,即使當我按下SHIFT + ALT +'v'時,它也沒有進入OnHotKey
函數。
有什么問題的想法嗎?
問題在於,當尚未初始化窗口句柄時,正在構造器中注冊熱鍵。
您應該像這樣在OnCreate()
初始化熱鍵:
::RegisterHotKey(GetSafeHwnd(), 1, MOD_ALT | MOD_SHIFT, 'V');
::RegisterHotKey(GetSafeHwnd(), 2, MOD_ALT | MOD_SHIFT, 'v');
取消注冊部分應在OnDestroy()
:
::UnregisterHotKey(GetSafeHwnd(), 1);
::UnregisterHotKey(GetSafeHwnd(), 2);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.