defwindowproc与pretranslatemessage有什么区别

本文介绍了MFC中消息处理流程,包括GetMessage、PreTranslateMessage、TranslateMessage、DispatchMessage及WindowProc的作用。并解释了SendMessage与PostMessage的区别,以及PreTranslateMessage的功能限制。

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

MFC 中PreTranslateMessage是GetMessage(...)函数的下一级操作,即GetMessage(...)从消息队列中获取消息 后,交由PreTranslateMessage()处理,若其返回FALSE则再交给TranslateMessage和 DispatchMessage处理(进入WindowProc);  
如果用SendMessage, 则消息直接交到WindowProc处理,所以GetMessage不会取得SendMessage的消息,当然PreTranslateMessage也就不会被调用。 如果用PostMessage,则消息进入消息队列,由GetMessage取得,PreTranslateMessage就有机会进行处理。

当然PreTranslateMessage并不是万能的,它并不能过滤所有的消息,有些消息它处理不了。比如WM_NCPAINT消息


DefWindowProc是默认的窗口处理函数,我们可以把不关心的消息都丢给它来处理函数调用缺省的窗口过程来为应用程序没有处理的任何窗口消息提供缺省的处理。该函数确保每一个消息得到处理。调用DefWindowProc函数时使用窗口过程接收的相同参数。比如这个函数在处理关闭窗口消息WM_CLOSE时,是调用DistroyWindow函数关闭窗口并且发WM_DESTROY

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值