MFC 对话框Dialog响应键盘事件(组合键Ctrl+A)

在上一篇文章的基础上,这里描述如何捕获组合键,这里以Ctrl+A为例

做法就是按下Ctrl的时候用一个静态成员变量保存Ctrl是否被按下,当Ctrl按下的时候设置为true;当Ctrl键抬起的时候设置为false

其他组合键的开发用此例举一反三即可。

头文件声明

    BOOL PreTranslateMessage(MSG* pMsg);

源文件定义

BOOL CmfcDlg::PreTranslateMessage(MSG* pMsg)
{
    static bool m_ctrl_down = false;//此函数第一次调用的时候初始化

    if (pMsg->message == WM_KEYDOWN)
    {

        switch (pMsg->wParam)
        {
        //VK_A - VK_Z are the same as ASCII ‘A‘ - ‘Z‘ (0x41 - 0x5A) 不区分大小写

        case ‘A‘://Ctrl + A
            if (m_ctrl_down)
            {
                AfxMessageBox(_T("Ctrl + A key down"));return TRUE;
            }
            break;
        case VK_CONTROL:
            m_ctrl_down = true;return TRUE;
        default:
            return TRUE;
        }
    }
    if (pMsg->message == WM_KEYUP)
    {
        switch (pMsg->wParam)
        {
        case VK_CONTROL:
            m_ctrl_down = false; return TRUE;
        }
    }
    return CDialogEx::PreTranslateMessage(pMsg);
}
时间: 2024-10-29 04:10:59

MFC 对话框Dialog响应键盘事件(组合键Ctrl+A)的相关文章

MFC 对话框Dialog响应键盘事件

OnKeyDown不行 Dialog程序本来没有直接响应键盘的事件,如果你用OnKeyDown会发现不起作用. 那么你想按下"左键"."W键"."9键盘"应该怎么响应呢? 重载基类的BOOL PreTranslateMessage(MSG* pMsg)函数 最简单的键盘响应函数 头文件声明: BOOL PreTranslateMessage(MSG* pMsg); 源文件定义: BOOL CmfcDlg::PreTranslateMessage(

Qt键盘事件--组合键响应方法

按键+按键组合,例如ctrl+字母: 1 void MyAPP::keyPressEvent(QKeyEvent *event) 2 { 3 if ((event->modifiers() == Qt::ControlModifier) && (event->key() == Qt::Key_A)) 4 { 5 QMessageBox::aboutQt(NULL, "aboutQt"); 6 } 7 } 按键+鼠标组合,例如ctrl+左击: 1 void M

VC++ 对话框程序响应键盘消息的处理方法的说明(非常重要)

基于MFC对话框的应用程序在响应按键消息和热键方面都力不从心,CDialog类的消息循环中去掉了TranslateAccelerator函数,因此不能响应热键:同时由于对话框上可能有很多控件,且默认情况下这些子窗口已经截获了焦点,因此键盘消息已经被控件捕获了:同时为了实现控件焦点切换和对话框默认行为,  VK_TAB.VK_LEFT.VK_RIGHT.VK_UP.VK_DOWN. VK_RETURN.VK_ESCAPE 等键已经被截获处理,因此对话框没有控件时仍然不能完全响应按键消息. 关于热键

keybd_event模拟键盘发送组合键

keybd_event模拟键盘发送组合键 如需要模拟发送“@”键 正常真实键盘发送时需要先按下Shift键,然后在没有弹出来的情况下按左键盘的数字“2”按键,然后松开键盘,即起按键. 代码中操作如下: keybd_event(VK_SHIFT,0,0,0);                                     //模拟先按下Shift键   keybd_event(0x32,0,0,0);                                            

Ogre: 建立一个简单的框架——响应键盘事件

[转载请保证内容的完整性和正确性] 建立一个简单的框架——响应键盘事件 上一节我们在场景中添加了一个机器人,这一节我们将建立一个FrameListener类(顾名思义,这是一个侦听类),来控制模型进行移动. 创建FrameListener类 FrameListener类主要负责事件的侦听,如帧结束.键盘输入等事件.它继承自ExampleFrameListener类,如果需要的话还可以继承KeyListener(键盘事件).MouseListener(鼠标事件)和JoyStickListener(

【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验八:PS/2模块② — 键盘与组合键

实验八:PS/2模块② — 键盘与组合键 实验七之际,我们学习如何读取PS/2键盘发送过来的通码与断码,不过实验内容也是一键按下然后释放,简单按键行为而已.然而,实验八的实验内容却是学习组合键的按键行为. 不知读者是否有类似的经历?当我们使用键盘的时候,如果5~6按键同时按下,电脑随之便会发出“哔哔”的警报声,键盘立即失效.这是键盘限制设计,不同产品也有不同限制的按键数量.默认下,最大按键数量是5~7个.所谓组合键就是两个以上的按键所产生的有效按键.举例而言,按下按键 <A> 输出“字符a”,

WPF TextBox中keydown事件组合键

//enter键和alt键组合if (e.KeyStates == Keyboard.GetKeyStates(Key.Return) && Keyboard.Modifiers == ModifierKeys.Alt) { }或 if (e.KeyStates == Keyboard.GetKeyStates(Key.Return) && (e.KeyboardDevice.Modifiers & ModifierKeys.Control) == Modifier

C# WinForm自定义控件响应键盘事件

自己定义的winform控件,用其他键盘事件都无法响应,只有用ProcessCmdKey事件可以达到目的(别忘了主窗体的KeyPreview属性要设置为true),写法如下:         protected override bool ProcessCmdKey(ref Message msg, Keys keyData)         {             switch (keyData)             {                 case Keys.Alt | 

WTL对话框应用程序响应键盘消息

修改对话框程序的PreTranslateMessage()消息 1 BOOL CMainDlg::PreTranslateMessage(MSG* pMsg) 2 { 3 int nCurSel; 4 if((nCurSel = m_wndOutputList.GetCurSel()) >= 0) 5 { 6 //WCHAR strSource[256]={0}; 7 if(WM_KEYDOWN == pMsg->message) 8 { 9 switch (pMsg->wParam)