2012-05-23 74 views
0

我是新來的MFC和Windows消息的概念。 Windows消息和事件之間有什麼區別或相似之處?說當一個用戶按下一個鍵或一個控件的關閉按鈕時,它會成爲一個消息還是事件?Windows消息vs事件

由於

+0

winapi在C編程語言中指定。 C沒有任何事件的概念。所以winapi使用消息來實現類似的東西。然後經常被類庫轉化爲事件。使用其消息映射宏時,MFC中的方法調用。避免在沒有先閱讀關於它的書的情況下嘗試使用MFC,如果沒有一本書,你就不會走得太遠。 –

+0

「事件」一詞在Windows中嚴重超載。請更具體地指出您所指的是什麼類型的活動。沒有上下文,人們通常意味着由「CreateEvent」創建的「內核事件」,但也許你指的是別的東西。 –

+0

.Net(event) – ali

回答

2

當用戶按下一個鍵時,或執行輸入的任何其它形式中,該系統將消息在消息隊列中。然後,你的應用程序必須在消息循環中取消這些消息,並處理它們。

許多UI框架將爲您處理這些消息並將它們轉換爲事件。請注意,您所談論的事件不是Windows定義的任何事件。事件的使用是指在您使用的任何編程語言/框架中定義的概念。 Windows events用於線程同步。

頂層消息循環可能看起來像這樣:

MSG msg; 
while(GetMessage(&msg, NULL, 0, 0) > 0) 
{ 
    TranslateMessage(&msg); 
    DispatchMessage(&msg); 
} 

的呼叫DispatchMessage結果的窗口過程中被調用。 GUI框架通常實現該窗口過程並將消息轉換爲事件。

因此,內容提要是:

  1. 輸入事件導致的消息。
  2. GUI框架將消息轉換爲事件。
  3. 您可以實現事件處理程序來響應這些事件。
+0

中的相同概念感謝您的回覆,但是您的意思是「GUI框架將消息轉換爲事件」?我認爲所有的消息都會根據消息映射發送給他們自己的處理程序。那麼這種轉換適合哪裏? – ali

+0

你能解釋一下,你可以用一個引用的鏈接來解釋,這正是你所說的術語事件的意思。這樣我們可以確定我們正在談論同樣的事情。 –

+0

下面的URL「消息處理和映射」很好地解釋了這些問題:http://msdn.microsoft.com/de-de/library/6d1asasd(v=vs.80).aspx – mox