MFC的Accelerator问题(在线等,急!!!)

来源:百度知道 编辑:UC知道 时间:2024/05/15 06:32:10
我在MFC对话框设计时在Resource View右键添加了一个Accelerator,然后应该怎么关联到我的主窗口(默认是关联到关于窗口)。
补充一点:我试过用Class Wizard,但每一次打开它都叫我选择一个类关联,似乎是因为没有关联成功,我添加的加速键也是关联到关于窗口。应该不是VC的问题,因为我用同学的电脑也是如此。

我给你个对话框的步骤:

1、在CxxxApp中添加变量HACCEL m_hAccelerator;// 加速键结构体

2、在BOOL CxxxApp::InitInstance()中添加加载项
// 关联加速键
m_hAccelerator=LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACC_MYACC));

3、在BOOL CxxxApp::ProcessMessageFilter(int code, LPMSG lpMsg) 中进行消息处理
{
if (code < 0) CWinApp::ProcessMessageFilter(code, lpMsg);

//-----------------------------------------------------
// 映射加速键
if (m_pMainWnd->m_hWnd)
{
if(m_hAccelerator)
if (::TranslateAccelerator(m_pMainWnd->m_hWnd, m_hAccelerator, lpMsg))
return(TRUE);
}
return CWinApp::ProcessMessageFilter(code, lpMsg);
}

1 LoadAccelerators加载新添加的加速键
2 TranslateAccelerator将加速键翻译为命令消息

以上调用在消息处理中进行,如虚函数PreTranslateMessage中

选择一个窗口关联上去吧,因为如果你不关联,这个快捷键消息就不知道该发给哪个HWND了

打开类向导后,选择主窗口类进行关联,然后添加消息处理函数,然后做下测试就行了