win32编程里,ransMessage()和DispatchMessage()是干嘛的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了win32编程里,ransMessage()和DispatchMessage()是干嘛的相关的知识,希望对你有一定的参考价值。

打错了,是translateMessage()

while (GetMessage (&msg, NULL, 0, 0))

TranslateMessage (&msg) ;
DispatchMessage (&msg) ;


这是Windows操作系统的窗口应用程序的一个核心程序片段。每个窗口应用程序都会有的。

每个要处理窗口的进程(计算机操作系统中的概念)都会有上面这个结构。并且每个有窗口的线程都会有一个消息队列(也是操作系统概念,在Windows操作系统规定),这个消息队列由Windows操作系统维护。当有任何事件通知这个线程时,就想它所属的消息列队发送一个消息事件。

GetMessage 的含义是从消息队列中提取一个消息。

TranslateMessage含义大致是将虚拟键消息转换为字符消息。
虚拟键是Windows系统定义的键盘按键。键盘上有多少个按键,就对应有多个虚拟键。
但是虚拟键并不是应用程序需要的按键信息。TranslateMessage就将虚拟键转换成对应的字符。例如虚拟键“A”(因为键盘上是大写,所以没有小写的)转换成字符“a”(如果键盘处于大写状态)或字符“A”(如果键盘处于小写状态)。

DispatchMessage的含义就是向msg中提到的窗口的窗口处理函数发送这个消息。
msg的类型是结构体,其中就包含了向哪个窗口发送消息的内容。

每个窗口都有对应的一个窗口处理函数,这个函数的作用就是处理与这个窗口有关的工作。

这样上面的循环体的功能就是,
不断从消息队列中获取消息(如果有消息),然后将如果消息是虚拟键消息,则将被TranslateMessage转换成字符消息。在将消息发送到对应的窗口处理函数中。
参考技术A DispatchMessage()

把消息放到消息队列中去

前一个函数不清楚

以上是关于win32编程里,ransMessage()和DispatchMessage()是干嘛的的主要内容,如果未能解决你的问题,请参考以下文章

什么是win32编程

如何设置win32 api c++按钮背景颜色和文本颜色?

c++ win32编程问题

如何在 Win32 上开始使用 C++ 编程?

无法理解普通 c++ 与 vc++、win32 编程、mfc、win32 api、CLI 之间的关系 [关闭]

Win32 多线程编程