Visual C++/MFC指南(1):幕後 (轉)

gugu99發表於2008-01-25
Visual C++/MFC指南(1):幕後 (轉)[@more@]

 

Visual C++/MFC Tutorial 第一課:幕後:訊息和控制程式碼

儘管你會想要深入鑽研,但你其實並不會這樣做。起初都是非常困難的。
讓我們來的看一看Windows下的是這樣運作的。
你程式設計的關鍵將是處理和傳送訊息。那什麼是訊息呢?
簡單的說,訊息是一個32位值,用來指明一個事件。比如:
當你移動滑鼠的時候,一個訊息(定義為WM_MOUSEMOVE)就被髮送給當前的視窗。
當你按下鍵盤上的鍵,一個訊息(定義為WM_KEYDOWN)就被髮送給了當前的視窗。
當你調整視窗的尺寸,一個訊息(定義為WM_SIZE)被髮送到當前的視窗。
想象出這個過程了麼?
那麼這些訊息被髮送到哪裡去了呢?
它們會排進一個隊裡,視窗最終會將它們拿出來並相應的。
例如當視窗得到WM_MOVE訊息,它將改變視窗座標並在螢幕上重畫視窗。

讓我們來看看控制程式碼。
Windows在面向方面做的很好。你面對著一些window物件(比如桌面,你現在用來閱讀的程式,等等。。。)。一個程式設計師用非物件導向的方式怎麼區分這類東呢?
使用控制程式碼。
控制程式碼用來引用不同的windows物件。你可以對視窗、使用控制程式碼,也能對分配了的、圖象使用控制程式碼。可以把控制程式碼理解為與指標類似。你必須透過某種方式來建立控制程式碼;而且在使用完後銷燬掉,不然將造成資源洩漏而使你的癱瘓。所以要保證它們在某個時候被銷燬了。

好了,現在是時候讓我們把這兩件東西放在一起了。
比方說有一個視窗,你有一個指向它的控制程式碼(稱為HWND)。把你的控制程式碼命名為your_HWND。當這個遮蓋在這個視窗上面的其他視窗被移去的時候,系統會要求你重畫視窗。windows會這樣傳送訊息:
PostMessage(your_HWND, WM_PAINT, 0,0);
這個傳送一個重畫的訊息給控制程式碼為your_HWND的視窗。最後的兩個引數作為該訊息的額外資訊,現在先不必考慮。這樣,你的程式就應該有一個包括很多分支判斷的函式來處理不同的訊息。比如:

void HandleTheMessage(long Message) { switch(Message) { case WM_PAINT: DrawWindow(); break; case WM_KEYDOWN: break; //etc... } }



好了,這些是windows幕後最基本的運作。
不過這些足夠讓你繼續來學習MFC了。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-998428/,如需轉載,請註明出處,否則將追究法律責任。

相關文章