RegisterHotKey(m_hWnd, 1001,0, VK_DELETE);
UnregisterHotKey(m_hWnd, 1001);
响应WM_HOTKEY消息
第一种快捷键方法:
#define IsCTRLPressed() ((GetKeyState(VK_CONTROL) & (1<<(sizeof(SHORT)*8-1))) != 0)
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == 'S' && IsCTRLPressed())
{
return TRUE;
}
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == 'N' && IsCTRLPressed())
{
return TRUE;
}
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == 'O' && IsCTRLPressed())
{
return TRUE;
}
return CXTPFrameWnd::PreTranslateMessage(pMsg);
}
第二种快捷键方法:
在资源视图中添加Accelerator快捷键方法
IDC_CTRLQ Ctrl Q VIRTKEY
定义成员函数:
HACCEL hAcc;
初始化加载:
m_hAcc = LoadAccelerators(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1));
BOOL XXXDLG::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
int iResult;
//针对WM_KEYDOWN消息和WM_SYSKEYDOWN消息,翻译快捷键
switch(pMsg->message)
{
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
iResult = TranslateAccelerator(m_hWnd,hAcc,pMsg);
//翻译快捷键成功,返回TRUE
if(iResult)
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
BEGIN_MESSAGE_MAP(XXXDlg, CDialog)
ON_COMMAND(IDC_CTRLQ, OnCtrlQ)
END_MESSAGE_MAP()
void XXXDlg::OnCtrlQ()
{
MessageBox(L"你按下了快捷键");
}