[VC]WindowProc和DefWindowProc函数
在Windows操作系統里,當窗口顯示之后,它就可以接收到系統源源不斷地發過來的消息,然后窗口就需要處理這些消息,因此就需要一個函數來處理這些消 息。在API里定義了一個函數為回調函數,當系統需要向窗口發送消息時,就會調用窗口給出的回調函數WindowProc,如果WindowProc函數 不處理這個消息,就可以把它轉向DefWindowProc函數來處理,這是系統的默認消息處理函數。當你按下菜單,或者點擊窗口時,窗口需要運行這個消 息處理函數。
函數WindowProc聲明如下:
LRESULT CALLBACK WindowProc(????????? HWND hwnd,
??? UINT uMsg,
??? WPARAM wParam,
??? LPARAM lParam
);
hwnd是當前窗口的句柄。
uMsg是系統發過來的消息。
wParam是消息參數。
lParam是消息參數。
這個函數一定是靜態函數,也就是全局函數,在編譯時已經確定了地址。由于它需要設置在注冊的窗口類型里,如下:
#008 ATOM MyRegisterClass(HINSTANCE hInstance)
#009 {
#010 WNDCLASSEX wcex;
#011
#012 wcex.cbSize = sizeof(WNDCLASSEX);
#013
#014 wcex.style???????????? = CS_HREDRAW | CS_VREDRAW;
#015 wcex.lpfnWndProc = WndProc;
第15行就是設置窗口的消息處理函數。
函數DefWindowProc聲明如下:
LRESULT DefWindowProc(????????? HWND hWnd,
??? UINT Msg,
??? WPARAM wParam,
??? LPARAM lParam
);
這個函數參數跟上面那個函數是一樣的。
只不過,它是處理所有默認的消息。
調用這兩個函數的實例如下:
?
第8行定義消息處理函數
第14行開始根據不同的消息作處理。
第29行和第41行都是調用DefWindowProc函數來處理未處理的消息。
有了窗口消息處理函數,就可以響應不同的消息,實現各種各樣的功能。
轉載于:https://www.cnblogs.com/gredswsh/p/WindowProc_and_DefWindowProc.html
總結
以上是生活随笔為你收集整理的[VC]WindowProc和DefWindowProc函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lol卡特连招(艾欧尼亚VS诺克萨斯)
- 下一篇: 深圳欣旺达是苹果原装电池吗(怎么搞到真正