gxj1680的专栏

风行渐远,我依然在漂泊

(对话框)嵌入对话框后菜单热键无效

对于在对话框程Dlg1序中嵌入对话框Dlg2的程序来说,定义好系统菜单热键,按键Alt+“菜单项(如F)”会弹出下拉菜单,但如果焦点放在Dlg2中时,再次按键Alt+F时,没有再次弹出下拉菜单(即热键无效),而快捷键(先按键按下Alt放开Alt,然后才按键F菜单有效)有效,其实原因在于焦点在Dlg2中了,按键Alt+F被Dlg2拦截没有发送到Dlg1中,因此只需在Dlg2中的PreTranslateMessage函数中拦截到Alt按键发送到或调用Dlg1中的PreTranslateMessage函数即可:

 

if(pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN)

if (GetKeyState(VK_LMENU) < 0)

{

m_pDlg1->SetFocus(); //程序的关键,在Dlg1获得焦点后才能进行Menu处理

return m_pDlg1->PreTranslateMessage(pMsg); //Dlg1中可不用(定义)继承PreTranslateMessage函数

}

}

 

注: 1,Alt消息需要用WM_SYSKEYDOWN进行判断,而WM_KEYDOWN 不判断是否有Alt按键

     2,ALT键虚拟码有:VK_MENU,VK_LMENU,VK_RMENU(可根据需要自己拦截什么按键)

 

阅读更多
文章标签: menu
个人分类: VC/MFC类
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭