www.winprog.org读书笔记

本文介绍了Windows消息处理机制,包括GetMessage、PostMessage和SendMessage的功能区别,对话框过程与窗口过程的不同之处,以及如何正确地使用这些API进行消息传递和处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GetMessage遇到错误时,会返回-1,即使它的返回值被定义成BOOL。因为BOOL被定义为UINT。 调用GetMessage的正确写法是 while (GetMessage(&Msg, NULL, 0, 0) > 0),这样可以正确处理函数出错以及程序退出的情况。

可以用PostMessage或SendMessage来发送消息。PostMessage把消息放入消息队列再立即返回。这意味着你调用PostMessage后消息可能被处理,也可能还没被处理。SendMessage则把消息送往窗口并且窗口没有结束处理消息之前不返回。

模态对话框过程和窗口过程有一些重要的差别,其中第一第二点也适用于非模态对话框。

  1. 对于你不处理的消息不调用DefWindowProc()。在对话框中这是自动完成的,你要是真的要自己调用的话会有问题。
  2. 对于不处理的消息返回FALSE,处理的话返回TRUE。
  3. 不调用DestroyWindow来关闭一个对话框,而调用EndDialog()。
  4. 不处理WM_CREATE,取而代之,处理WM_INITDIALOG消息来做对话框出现之前的任何操作。

用CreateDialog可以创建非模态对话框,它没有自己的消息循环。而DialogBox()拥有自己的消息循环并且直到对话框关闭才返回。 非模态对话框过程,不需要调用EndDialog,可以像常规的窗口一样调用DestroyWindow。

对话框就是一个窗口,并且大多数对话框的API可以工作于任何窗口。

转载于:https://my.oschina.net/u/1453800/blog/347858

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值