zoukankan      html  css  js  c++  java
  • TranslateMessage消息翻译和DispatchMessage消息分发

    TranslateMessage函数将虚拟键消息转换成字符消息。比如:

    消息WM_KEYDOWN和WM_KEYUP组合产生一个WM_CHAR或WM_DEADCHAR消息。
    消息WM_SYSKEYDOWN和WM_SYSKEYUP组合产生一个WM_SYSCHAR或 WM_SYSDEADCHAR 消息
    然后放在队列中,等待下一次线程调用GetMessage或PeekMessage时被读出

    // 主消息循环: 
        while (GetMessage(&msg, NULL, 0, 0))
        {
            if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
            {
                if (msg.message==WM_KEYDOWN)
                {
                    MessageBox(0, L"KeyDown1", 0, 0);
                }
                /*
                WM_KEYDOWN和WM_KEYUP组合产生一个WM_CHAR或WM_DEADCHAR消息。
                消息WM_SYSKEYDOWN和WM_SYSKEYUP组合产生一个WM_SYSCHAR或 WM_SYSDEADCHAR 消息
                放在队列中,等待下一次线程调用GetMessage或PeekMessage时被读出
    
                将虚拟键消息转换为字符消息。
                字符消息被送到调用线程的消息队列中,在下一次线程调用函数GetMessage或PeekMessage时被读出。
                */
                TranslateMessage(&msg);    
                GetMessage(&msg, NULL, 0, 0);
                if (msg.message == WM_KEYDOWN)
                {
                    MessageBox(0, L"KeyDown2", 0, 0);
                }
                if (msg.message == WM_CHAR){
                    MessageBox(0, L"Translate", 0, 0);
                }
    
                /*
                该函数调度一个消息给窗口程序。通常调度从GetMessage取得的消息。
                消息被调度到的窗口程序即是MainProc()函数
                */
                DispatchMessage(&msg);
            }
        }

    会发现按下一个键后会产生WM_KEYDOWN消息,经过TranslateMessage翻译后组合生成WM_CHAR消息

    然后投放到消息队列中,使用getMessage取出刚刚投放的消息,判断后,发现产生的是一个WM_CHAR消息。

    TtanslateMessage函数仅为那些由键盘驱动器映射为ASCII字符的键产生WM_CHAR消息。

    但是TranslateMessage不会丢弃原来的WM_KEYDOWN消息。依旧可以继续调用函数:  WndProc(HWND, UINT, WPARAM, LPARAM)处理这个消息

    case WM_KEYDOWN:
            MessageBox(0, L"Key Down", 0, 0);
            break;
  • 相关阅读:
    jQuery中排除指定元素,同时选择剩下的所有元素
    Silverlight Telerik控件学习:弹出窗口RadWindow
    biztalk 2010 dev版安装小记
    Flex4中的ModuleLoader,Alert以及TitleWindow
    Silverlight Telerik控件学习:主题Theme切换
    用Flex模拟智能手机表单输入的自动放大功能
    "为帮助内容存储区指定的位置无效或者您无权访问该位置"解决方法
    Flex4中使用WCF
    Silverlight单元测试
    Silverlight:纠结的快捷键问题
  • 原文地址:https://www.cnblogs.com/ssyfj/p/8490468.html
Copyright © 2011-2022 走看看