2010年10月20日

[C++學習筆記]Messages 和Handles


Message

視窗程式是以Message為基礎的,依靠Message的傳送和回應使得視窗程式能夠運作。

Message是一個32位元的數字。

當我們移動滑鼠時,Message (WM_MOUSEMOVE)就會被傳送到目前的視窗;當我們改變視窗位置時,Message(WM_MOVE)就會被傳送到目前的視窗。

這些Message會被排入Queue(佇列)中,視窗會將他們從Queue中取出,並進行對應的動作,若是視窗得到了WM_SIZE(改變視窗大小)的Message,視窗就會在螢幕上重新繪製。



Handles

視窗程式要使用Handles來判斷各個不同的視窗。

Handles是一個參考不同視窗物件的方法,我們可以將Handles想像成指向各個視窗的一種指標,Handles必須要在使用完之後銷毀,否則會使程式及系統當機。



Messages 和Handles的運作

假設我們擁有一個視窗,我們擁有視窗的Handles,我們將這個Handles命名為My_HWND。

如果作業系統要告知要重新繪製視窗,系統就會傳送一個Message



PostMessage(My_HWND, WM_PAINT, 0, 0);
這個function會傳出Handles和Message給視窗程式,而視窗程式則是一個巨大的switch….case,處理各種不同的訊息。

void HandleMessage(long Message)

{

switch(Message)

  {

  case WM_PAINT:

    DrawWindows();

    break;

  case WM_SIZE:

    //do something

    break;

  }

}

沒有留言: