- 请简要说明窗口诞生的流程?
答: 填充窗口类结构(WNDCLASS)-> 注册窗口类(RegisterWindow)-> 创建窗口(CreateWindow)-> 显示窗口(ShowWindow)-> 更新窗口(UpdateWindow)
- 请问在哪个阶段应用程序在内存中创建?
在调用完 CreateWindow 函数之后,应用程序实例已经在内存中创建成功,并返回窗口句柄.
- 句柄是不是指针?
句柄不是指针,指针会指向一个地址,但句柄事实上只是一个数,一个索引值,一个让操作系统可以找到这个实例的索引值。事实上系统内部有建立一个索引表,维护着所有实例的索引号对应的内存地址,但这个索引表操作系统是不可能告诉我们的
- 如果把 ShowWindow 和 UpdateWindow 函数去掉,应用程序可以正常响应消息吗?
可以,因为在调用完 CreateWindow 函数的时候窗口就已经创建出来了,只是存在内存中,还没有生成窗口界面而已。这时候属于该应用程序的消息队列也已经生成,因此应用程序可以正常响应消息。简单的说,这时候应用程序已经存在了.
- 消息循环中的 DispatchMessage 是直接将消息分派给窗口过程的吗?
不是,这个过程是由操作系统干预下进行的:DispatchMessage 带着消息给操作系统,由操作系统调用窗口过程(因此才叫 CALLBACK 回调).
- 用户在应用程序上按下鼠标左键,操作系统如何让应用程序对其处理?
当用户在应用程序上点击了一下鼠标左键,会触发一个鼠标左键按下的事件,操作系统将该事件转换为相应的消息(WM_LBUTTONDOWN)并投入该应用程序的消息队列.接着就是消息循环,检索到 WM_LBUTTONDOWN 后由操作系统调用窗口过程,窗口过程中我们可以使用 case WM_LBUTTONDOWN 关注并部署处理鼠标左键按下的代码,当然如果你对此不感兴趣,尽管交给 DefWindowProc 函数进行默认处理即可。
网友评论