看了很多例子,愣是没看懂,一种可能,我智商有问题,第二种可能,写帖子的人压根没打算让人(初学者)看懂,只是想让人知道他会。

         我的例子很简单,建一个单文档的MFC程序(参考网上的一份例子写出来的)。

         1.在资源中加入一个Accelerator,然后进行设置,ID,就是希望的那个能被快捷键代替的按钮的ID,KEY,就是你希望的快捷键,TYPE,我选择了VIRTKEY

         2.在头文件中添加 BOOL PreTranslateMessage(MSG *pMsg) 方法

         3.在CPP文件中完成该方法

         

BOOL CApiTestDlg::PreTranslateMessage(MSG *pMsg)
{
//AfxGetApp()->m_hInstance 获得程序实例
//IDR_ACCELERATOR1 就是刚才加入到资源中的那个Accelerator的ID

HACCEL hAccelTable;
hAccelTable = LoadAccelerators(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1));
int iResult=0;
//我们点击键盘时会向窗体发送消息,在这里我们捕获到消息,然后进行翻译
//把按键的消息翻译成点击按钮的消息,这样,就相当于我们点击按钮了(这是我自己的理解)
switch(pMsg->message)
{
case WM_KEYDOWN:
{

}
case WM_SYSKEYDOWN: //我们只需要关心这个类型的消息就可以了
{
iResult = TranslateAccelerator(m_hWnd, hAccelTable, pMsg); //这个函数用来翻译资源文件的内容
if(iResult)
{ //翻译成功返回TRUE
return TRUE;
}

}
}
return CDialog::PreTranslateMessage(pMsg);
}