Windows SDK筆記(三):定制控件消息處理函數(shù)
作者:
馮明德
一、概述
控件的消息處理函數(shù)是由系統(tǒng)定義好了的,通常情況下,不需要自己提供。
但當(dāng)需要對(duì)控件進(jìn)行特殊控制時(shí),可以提供一個(gè)消息處理函數(shù),替換原來的消息處理函數(shù)。
自己的處理完成后,再調(diào)用控件的缺省消息處理。
二、相關(guān)函數(shù)
1.窗口類的屬性可以通過GetWindowLong和SetWindowLong進(jìn)行讀取和設(shè)置
LONG GetWindowLong( HWND hWnd, // handle to window int nIndex // offset of value to retrieve ); LONG SetWindowLong( HWND hWnd, // handle to window int nIndex, // offset of value to set LONG dwNewLong // new value );可以返回或設(shè)置以下內(nèi)容:
nIndex值 意義
GWL_EXSTYLE 擴(kuò)展風(fēng)格
GWL_STYLE 風(fēng)格
GWL_WNDPROC 消息處理函數(shù)
GWL_HINSTANCE 實(shí)例
GWL_ID 窗口ID
GWL_USERDATA 用戶數(shù)據(jù)
DWL_DLGPROC 對(duì)話框消息處理函數(shù)
DWL_MSGRESULT
DWL_USER
所以使用
OldMsgProc = (WNDPROC)SetWindowLong (hControlWnd, GWL_WNDPROC, (LONG)MyMsgProc);將控件消息處理函數(shù)替換成MyMsgProc,原處理函數(shù)被OldMsgProc記錄。
2.調(diào)用消息處理函數(shù)
LRESULT CallWindowProc( WNDPROC lpPrevWndFunc, // pointer to previous procedure HWND hWnd, // handle to window UINT Msg, // message WPARAM wParam, // first message parameter LPARAM lParam // second message parameter );
三、示例
1.提供新處理函數(shù)
//記錄原來處理函數(shù)的全局變量 WNDPROC OldMsgProc; //新消息處理函數(shù) LRESULT MyMsgProc(HWND hwnd,UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_LBUTTONDOWN: ::MessageBox(NULL,"click!","",MB_OK); } //調(diào)用控件原來的消息處理函數(shù) return CallWindowProc(OldMsgProc,hwnd,message,wParam,lParam); }
2.建立窗口后,更改消息處理函數(shù)
case WM_CREATE: { HWND hControlWnd = CreateWindowEx(0,"BUTTON", TEXT("按鈕(&A)"), WS_CHILD | WS_VISIBLE|BS_PUSHBUTTON, 10, 10, 100, 100, hwnd, (HMENU)1000, //控件ID ((LPCREATESTRUCT) lParam)->hInstance, //實(shí)例句柄 NULL); //嵌入新的消息處理函數(shù) OldMsgProc = (WNDPROC) SetWindowLong (hControlWnd, GWL_WNDPROC, (LONG)MyMsgProc); } return 0;
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
