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ì)您有幫助就好】元

