繁体   English   中英

MFC控件的消息流?

[英]MFC Message flow for controls?

在MFC中,假设我有一个对话框,在这个框中,它有一个子CListCtrl,然后我用鼠标点击这个CListCtrl,我们知道最终WM_LBUTTONDOWN消息被发送到CListCtrl。 我的问题是:这个WM_LBUTTONDOWN消息是如何到达那里的? 两种可能性:

  1. 对话框首先获取此WM_LBUTTONDOWN消息,它发现鼠标单击发生在其子窗口中,然后它将此消息转发给CListCtrl。
  2. CListCtrl首先获取此WM_LBUTTONDOWN消息,它可以处理此消息,如果它不关心它会将此消息转发到父窗口,即进一步处理的对话框。

哪一个是真的?

谢谢。

输入消息永远不会发送到窗口。 它们被发布到与窗口关联的消息队列中,等待通过其中一个消息检索功能( GetMessagePeekMessage等)进行检索。

根据对话框是模态还是无模式 ,通过嵌套模态循环(对于模态对话框)或应用程序的消息循环来检索消息。 然后将消息传递给DispatchMessage ,以查找收件人(从鼠标指针下方最顶层的可见窗口开始,既不禁用也不透明),并调用关联窗口的窗口过程。 窗口过程可以决定它是否处理消息。 窗口过程通常调用DefWindowProc来执行默认处理(如果它不处理消息)。

总结:应用程序的消息循环(或嵌套的模态消息循环)首先看到消息,并指示窗口管理器将消息传递给相应的接收者。


有关Windows消息处理的详细说明,请参阅关于消息和消息队列 该描述特定于Windows API。 由于MFC只是Windows API的包装器,因此内容也适用于MFC,即使某些概念隐藏在典型的MFC应用程序中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM