您的位置:首页 > 其它

MFC中基于对话框程序快捷键的实现

2010-12-15 14:36 483 查看
MFC中基于SDI和MDI的程序,默认情况下有快捷键资源,直接建立快捷键与消息的映射,就能实现程序的快捷键,而基于对话框的程序默认情况下没有快捷键资源,鉴于网友问到这个问题,下面我就分别用两种方法来实现。

一是在PreTranslateMessage函数中,判断键盘的按键消息,比如快捷键是Ctrl + Q,我们就检测按键消息的Ctrl键和Q是否同时按下就可以了。

//用PreTranslateMessage的方法,判断Ctrl+Q是否按下,按下就执行快捷键对应的操作

if(pMsg->message == WM_KEYDOWN && pMsg->wParam == 'Q' && IsCTRLPressed())
{
AfxMessageBox("Ctrl + Q 被按下");
return TRUE;
}


二是在PreTranslateMessage函数中,通过载入快捷键资源,并建立快捷键与消息的映射的方法来实现。先插入快捷键资源,通过下面的代码来载入该资源。

HACCEL hAcc;hAcc = LoadAccelerators(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1));

在PreTranslateMessage函数中进行快捷键的翻译,如果是WM_KEYDOWN和WM_SYSKEYDOWN消息就翻译,翻译成功返回TRUE.

BOOL CAccelerator2Dlg::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);

//翻译快捷键成功,返回TRUEif(iResult)return TRUE;

}

return CDialog::PreTranslateMessage(pMsg);

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: