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

对于在对话框程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(可根据需要自己拦截什么按键)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值