第004讲:消息机制 | 课后测试题及答案

    1. 请简要说明窗口诞生的流程?

答: 填充窗口类结构(WNDCLASS)-> 注册窗口类(RegisterWindow)-> 创建窗口(CreateWindow)-> 显示窗口(ShowWindow)-> 更新窗口(UpdateWindow)

    1. 请问在哪个阶段应用程序在内存中创建?

在调用完 CreateWindow 函数之后,应用程序实例已经在内存中创建成功,并返回窗口句柄.

    1. 句柄是不是指针?

句柄不是指针,指针会指向一个地址,但句柄事实上只是一个数,一个索引值,一个让操作系统可以找到这个实例的索引值。事实上系统内部有建立一个索引表,维护着所有实例的索引号对应的内存地址,但这个索引表操作系统是不可能告诉我们的

    1. 如果把 ShowWindow 和 UpdateWindow 函数去掉,应用程序可以正常响应消息吗?

可以,因为在调用完 CreateWindow 函数的时候窗口就已经创建出来了,只是存在内存中,还没有生成窗口界面而已。这时候属于该应用程序的消息队列也已经生成,因此应用程序可以正常响应消息。简单的说,这时候应用程序已经存在了.

    1. 消息循环中的 DispatchMessage 是直接将消息分派给窗口过程的吗?

不是,这个过程是由操作系统干预下进行的:DispatchMessage 带着消息给操作系统,由操作系统调用窗口过程(因此才叫 CALLBACK 回调).

    1. 用户在应用程序上按下鼠标左键,操作系统如何让应用程序对其处理?

当用户在应用程序上点击了一下鼠标左键,会触发一个鼠标左键按下的事件,操作系统将该事件转换为相应的消息(WM_LBUTTONDOWN)并投入该应用程序的消息队列.接着就是消息循环,检索到 WM_LBUTTONDOWN 后由操作系统调用窗口过程,窗口过程中我们可以使用 case WM_LBUTTONDOWN 关注并部署处理鼠标左键按下的代码,当然如果你对此不感兴趣,尽管交给 DefWindowProc 函数进行默认处理即可。

你可能感兴趣的:(第004讲:消息机制 | 课后测试题及答案)