日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

[VC]WindowProc和DefWindowProc函数

發布時間:2023/12/19 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [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
);
這個函數參數跟上面那個函數是一樣的。
只不過,它是處理所有默認的消息。

調用這兩個函數的實例如下:

#001 // #002 // 函數: WndProc(HWND, UINT, WPARAM, LPARAM) #003 // #004 // 目的: 處理主窗口的消息. #005 // #006 // 蔡軍生 2007/07/12 #007 // #008 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) #009 { #010 int wmId, wmEvent; #011 PAINTSTRUCT ps; #012 HDC hdc; #013 #014 switch (message) #015 { #016 case WM_COMMAND: #017 wmId = LOWORD(wParam); #018 wmEvent = HIWORD(wParam); #019 // 菜單選項命令響應: #020 switch (wmId) #021 { #022 case IDM_ABOUT: #023 DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); #024 break; #025 case IDM_EXIT: #026 DestroyWindow(hWnd); #027 break; #028 default: #029 return DefWindowProc(hWnd, message, wParam, lParam); #030 } #031 break; #032 case WM_PAINT: #033 hdc = BeginPaint(hWnd, &ps); #034 // #035 EndPaint(hWnd, &ps); #036 break; #037 case WM_DESTROY: #038 PostQuitMessage(0); #039 break; #040 default: #041 return DefWindowProc(hWnd, message, wParam, lParam); #042 } #043 return 0; #044 }

?


第8行定義消息處理函數
第14行開始根據不同的消息作處理。
第29行和第41行都是調用DefWindowProc函數來處理未處理的消息。

有了窗口消息處理函數,就可以響應不同的消息,實現各種各樣的功能。

轉載于:https://www.cnblogs.com/gredswsh/p/WindowProc_and_DefWindowProc.html

總結

以上是生活随笔為你收集整理的[VC]WindowProc和DefWindowProc函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。