簡體   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