簡體   English   中英

WM_HOTKEY沒有趕上

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM