Windows编程中消息处理函数的问题

来源:百度知道 编辑:UC知道 时间:2024/06/10 10:05:56
rt,TranslateMessage和DispatchMessage函数是干嘛用的?

百度百科上说:函数功能:该函数将虚拟键消息转换为字符消息。字符消息被寄送到调用线程的消息队列里,当下一次线程调用函数GetMessage或PeekMessage时被读出。

什么叫虚拟键消息,什么叫字符消息

为什么要在消息循环中连续调用这两个函数
还有,Window类中的style的值中有一个是CS_CLASSDC,是什么样式

Win32程序主消息循环的标准写法是:
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

首先使用 GetMessage() 函数获取消息,然后用TranslateMessage()函数转化消息,这样做的目的是,获取一些按键消息(虚拟键如ESC、Ctrl、Atl、箭头等等)转化为ASCll字符的键产生WM_CHAR消息(这样系统才可以识别),DispatchMessage再将消息转发给系统。

比如:VK_RETURN 回车键对应的ASCll字符为0x0D
VK_RETURN 就是虚拟键消息,0x0D就是字符消息

连续调用的目的就是使你的程序一直在消息循环中,因为Windows程序运行的机制就是基于消息循环的,没有了消息循环程序就不能相应对它的操作了。

补充:
WNDCLASS结构的第一个成员style表示窗口类的风格,它往往是由一些基本的风格通过位的“或”操作(操作符位“|”)组合而成。以下列出了一些常用的基本窗口风格:

CS_HREDRAW 如果窗口客户区宽度发生改变,重绘整个窗口
CS_VREDRAW 如果窗口客户区高度发生改变,重绘整个窗口
CS_DBLCLKS 能感受用户在窗口中的双击消息
CS_NOCLOSE 禁用系统菜单中的“关闭”命令
CS_OWNDC 为该窗口类的各窗口分配各自独立的设备环境
CS_CLASSDC 为该窗口类的各窗口分配一个共享的设备环境
CS_PARENTDC 指定子窗口继承其父窗口的设备环境
CS_SAVEBITS 把被窗口遮掩的屏幕图象部分作为位图保存起来。当该窗口被移动时,Windows使用被保存的位图来重建屏幕图象

CS_CLASSDC就表示为该窗口类的各窗口分配一个共享的设备环境

比如:当按下键盘和施放键盘时分别产生WM_KEYDOWN或WM_SYSKEYDOWN W