這一章 實際上 是對 前幾章 知識的回顧,和舉例。 用一個 輸出文字的例子,講解,windows程式的結構。如果弄明白這個例子,就可以說,前幾章的知識已經 弄明白了。
其中,有幾個比較難理解的地方:
1、 回呼函數
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
LRESULT 傳回值類型,你看他的定義,就知道他實際是long 型的。
CALLBACK 用來標示這個函數是一個回呼函數。回呼函數,從使用的角度看,就是,函數由你定義,但是不由你調用。那麼它由誰來調用
呢,它 實際由作業系統來調用。那作業系統又如何知道 這個函數的存在呢? 這就是我們在
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc= WndProc ;
。。。
從c語言的角度,這就是一個函數指標,不是嗎?lpfnWndProc的類型是一個函數指標,指向我們定義的WndProc 函數。
2、訊息 message
訊息是什麼呢,不用 把它看得太神秘,我們來看看他的定義 ,比如
WM_CREATE ,他是如下定義的:
#define WM_CREATE 0x0001
原來 ,WM_CREATE 就是一個16進位數。如果還不好理解。那我就舉個例子:
現在吃,喝,玩,樂,四種動作。為了便於電腦儲存和傳輸。我們定義如下:
#define CHI 0x0001
#define HE 0x0002
#define WAN 0x0003
#define LE 0x0004
賈君鵬 ,你媽叫你回家吃飯。 我們在訊息處理函數
WndProc (Message msg)
{
switch(msg)
{
case CHI :
賈君鵬回家吃飯;
break;
case HE:
賈君鵬回家喝水;
。。。。
}
}
Message 就是用來傳遞,作業系統 告訴 應用程式 發生了 什麼事情的, 應用程式 自訂 訊息處理函數,對這些訊息來進行處理。道理就這麼簡單,當然 這些行為事先 在作業系統裡都定義好了,可以在MSDN 裡 尋找不同訊息的用途,以及在什麼情況下,系統會發送這些訊息。
例如 我們搜尋 WM_CREATE from MSDN
WM_CREATE Notification
The WM_CREATE message is sent when an application requests that a window be created by calling the CreateWindowEx or CreateWindow function. (The message is sent before the function returns.) The window procedure of the new window receives this message after the window is created, but before the window becomes visible.
A window receives this message through its WindowProc function.