收藏人民币什么号码好:c++实现组合键,让子窗口获得焦点

来源:百度文库 编辑:中财网 时间:2024/05/14 20:05:06
版权属作者所有,不可作为商业用途。转载注明出处。谢谢合作。界面如上图所示,在Tab control控件里嵌入三个dialog对象。分别在三个dailog上放置按钮。但用Tab键改变焦点时,进入不了Tab control控件里的按钮去。要使按钮有焦点只能先用鼠标点击Tab control控件里的按钮,让焦点进入到Tab control控件里。这样在按Atl+A时可实现单击按钮Clear All按钮的功能,即所谓的快捷键。介于这种实现方式有些失去快捷键的意义。因此找寻了以下的方法。采用组合键的方式。比如采用Ctrl+A的组合键实现以上Atl+A的功能。首先在主画面类中重载PreTranslateMessage函数并且加入以下代码 if(pMsg->message==WM_KEYDOWN && pMsg->wParam=='A' && (GetKeyState(VK_CONTROL) & 0x8000))        {  AfxMessageBox(_T("截到了Ctrl+A键")); ::SendMessage(m_DiaSiemens.GetSafeHwnd(), WM_COMMAND, IDC_BUTTON_SClearAll,0);//向按钮所在窗口发送单击消息 return TRUE;        }这样就实现了组合键。
经过测试以上代码只能是在以主窗口为焦点时,可行。当焦点在Tab control控件里时,此代码不运行。
当要让子窗口获得焦点也可在主窗口PreTranslateMessage函数里实现。本例中当获得Ctrl键按下时,设置Tab control控件里当前页窗口为焦点。代码如下: if(pMsg->message==WM_KEYDOWN && (GetKeyState(VK_CONTROL) & 0x8000)) { switch(m_TabContainer.GetCurSel()) { case 0: m_DiaSiemens.SetFocus(); break; case 1: m_DiaMitsubishi.SetFocus(); break; case 2: m_DiaPanasonic.SetFocus(); break; default : break; } }