消息循环中的TranslateMessage函数和DispatchMessage函数,特别注意WM_TIMER消息
TranslateMessage函数
函数功能描述:将虚拟键消息转换为字符消息。字符消息被送到调用线程的消息队列中,在下一次线程调用函数GetMessage或PeekMessage时被读出。
BOOL TranslateMessage( CONST MSG *lpMsg );
lpMsg
指向一个含有用GetMessage或PeekMessage函数从调用线程的消息队列中取得消息信息的MSG结构的指针。
如果消息被转换(即,字符消息被送到线程的消息队列中),返回非零值。
如果消息是 WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, 或 WM_SYSKEYUP,返回非零值,不考虑转换。
如果消息没有转换(即,字符消息没被送到线程的消息队列中),返回值是零。
TranslateMessage函数不修改由参数lpMsg指向的消息。
消息WM_KEYDOWN和WM_KEYUP组合产生一个WM_CHAR或WM_DEADCHAR消息。消息WM_SYSKEYDOWN和WM_SYSKEYUP组合产生一个WM_SYSCHAR或 WM_SYSDEADCHAR 消息。
TtanslateMessage仅为那些由键盘驱动器映射为ASCII字符的键产生WM_CHAR消息。
如果应用程序为其它用途而处理虚拟键消息,不应调用TranslateMessage函数。例如,如果TranslateAccelerator函数返回一个非零值,则应用程序将不调用TranslateMessage函数。
Windows CE:Windows CE不支持扫描码或扩展键标志,因此,它不支持由TranslateMessage函数产生的WM_CHAR消息中的lKeyData参数(lParam)16-24的取值。
TranslateMessage函数只能用于转换由GetMessage或PeekMessage函数接收到的消息。
DispatchMessage函数
函数功能:该函数调度一个消息给窗口程序。通常调度从GetMessage取得的消息。消息被调度到的窗口程序即是MainProc()函数。
函数原型:LONG DispatchMessage(CONST MSG*lpmsg);
参数:
lpmsg:指向含有消息的MSG结构的指针。
返回值:返回值是窗口程序返回的值。尽管返回值的含义依赖于被调度的消息,但返回值通常被忽略。
备注:MSG结构必须包含有效的消息值。如果参数lpmsg指向一个WM_TIMER消息,并且WM_TIMER消息的参数IParam不为NULL,则调用IParam指向的函数,而不是调用窗口程序。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winuser.h;输入库:user32.lib;Unicode:在Windows NT环境下以Unicode和ANSI方式实现。
总结:TranslateMessage函数将键盘消息转化,DispatchMessage函数将消息传给窗体函数去处理.
联系:
转载于:https://www.cnblogs.com/xingrun/p/3583357.html
消息循环中的TranslateMessage函数和DispatchMessage函数,特别注意WM_TIMER消息相关推荐
- 消息循环中的TranslateMessage函数和DispatchMessage函数
TranslateMessage函数 函数功能描述:将虚拟键消息转换为字符消息.字符消息被送到调用线程的消息队列中,在下一次线程调用函数GetMessage或PeekMessage时被读出. . 函数 ...
- 消息循环中TranslateMessage和Dispatch函数的作用
TranslateMessage函数 函数功能描述:将虚拟键消息转换为字符消息.字符消息被送到调用线程的消息队列中,在下一次线程调用函数GetMessage或PeekMessage时被读出. .函数原 ...
- duilib中TranslateMessage函数和DispatchMessage函数
TranslateMessage函数 函数功能描述:将虚拟键消息转换为字符消息.字符消息被送到调用线程的消息队列中,在下一次线程调用函数GetMessage或PeekMessage时被读出. .函数原 ...
- 十五: TranslateMessage(msg) 函数 和DispatchMessage(msg)函数
TranslateMessage函数将虚拟键消息转换为字符消息.字符消息被寄送到调用线程的消息队列里,当下一次线程调用函数GetMessage或PeekMessage时被读出. TranslateMe ...
- R语言循环中break函数和next函数使用实战
R语言循环中break函数和next函数使用实战 目录 R语言循环中break函数和next函数使用实战 #基础for循环 #带break的for循环
- html页面如何循环遍历,遍历foreach循环中的HTML DOM元素
5 个答案: 答案 0 :(得分:3) 您可以使用closest('tr')查找最近的父tr元素,然后使用index()获取行号.试试这个: $('td').click(function() { va ...
- java sleep 循环_while循环中的Thread.sleep()
我注意到NetBeans警告我在我的Java代码中使用while循环中的Thread.sleep(),所以我已经对这个主题进行了一些研究 . 主要问题似乎是性能问题,当计数器仍处于休眠状态时,你的状态 ...
- el-upload在表单循环中,实现选择,删除,拖拽,并且和表单数组对上
el-upload在表单循环中,实现选择,删除,拖拽,并且和表单数组对上: 微信: volley369 业务要求,实现以下效果: 业务要求: el-upload肯定不能一个个的写,要用json去循环 ...
- for循环中var和let的区别
今天在做题的时候,遇到了一个不太懂的问题,经过查阅资料,终于搞明白了这个问题,发出来当做个笔记. 首先是var: for (var i = 0; i < 5; i++) { setTimeout ...
最新文章
- CSLA.Net 3.0.5 项目管理示例 名值列表基类、只读基类、业务负责人基类
- iOS集成alipay无线应用sdk错误问题
- [转]Tomcat启动错误的几件事
- 【火炉炼AI】机器学习013-用朴素贝叶斯分类器估算个人收入阶层
- [vue] vue自定义事件中父组件怎么接收子组件的多个参数?
- 台式机电脑配置单_2020年电脑配置单重点硬件参考
- 《Asp.Net 2.0 揭秘》读书笔记(九)
- 华为Mate 30系列或下血本采用双主摄方案:CMOS尺寸破纪录
- oracle11g 时间失效,关于oracle11g RAC 的CTSS与ntp时间同步的疑问
- 视频语音自动生成字幕文件的免费软件工具,日剧,美剧都能看懂了
- sqlmap使用 mysql_求sqlmap使用教程?
- 打开和关闭 Oralce PDB数据库
- ps cc 生成html,Photoshop自定义工具扩展面板(支持PS CC 2019)
- redis 结合 spring
- JS简单总结(前端ES6和JQ)
- Hibernate用Query删除数据表中的数据的问题(EntityManager.clear())
- PPT制作毛玻璃效果
- 【C语言趣味编程100题】
- 【C库函数】 strstr函数详解
- 股票实时数据接口软件的数据来源是哪里?