日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

定制控件消息處理函數

系統 2036 0

Windows SDK筆記(三):定制控件消息處理函數
作者: 馮明德

一、概述
控件的消息處理函數是由系統定義好了的,通常情況下,不需要自己提供。
但當需要對控件進行特殊控制時,可以提供一個消息處理函數,替換原來的消息處理函數。
自己的處理完成后,再調用控件的缺省消息處理。


二、相關函數
1.窗口類的屬性可以通過GetWindowLong和SetWindowLong進行讀取和設置

    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

);
  
可以返回或設置以下內容:
nIndex值 意義
GWL_EXSTYLE 擴展風格
GWL_STYLE 風格
GWL_WNDPROC 消息處理函數
GWL_HINSTANCE 實例
GWL_ID 窗口ID
GWL_USERDATA 用戶數據
DWL_DLGPROC 對話框消息處理函數
DWL_MSGRESULT
DWL_USER


所以使用

    OldMsgProc = (WNDPROC)SetWindowLong (hControlWnd, GWL_WNDPROC, (LONG)MyMsgProc);
  
將控件消息處理函數替換成MyMsgProc,原處理函數被OldMsgProc記錄。

2.調用消息處理函數

    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.提供新處理函數
    //記錄原來處理函數的全局變量

WNDPROC OldMsgProc;



//新消息處理函數

LRESULT MyMsgProc(HWND hwnd,UINT message, WPARAM wParam, LPARAM lParam)

{

	switch(message)

	{

	case WM_LBUTTONDOWN:

		::MessageBox(NULL,"click!","",MB_OK);

	}

	//調用控件原來的消息處理函數

	return CallWindowProc(OldMsgProc,hwnd,message,wParam,lParam);

}
  

2.建立窗口后,更改消息處理函數
    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,	//實例句柄

		NULL);



	//嵌入新的消息處理函數

	OldMsgProc = (WNDPROC) SetWindowLong (hControlWnd, GWL_WNDPROC, (LONG)MyMsgProc);

}

return 0;
  

定制控件消息處理函數


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 红河县| 修武县| 璧山县| 昌宁县| 阜宁县| 大关县| 东港市| 枝江市| 甘泉县| 祥云县| 黄梅县| 绥宁县| 桐柏县| 六安市| 武乡县| 望都县| 桦川县| 沙河市| 东光县| 九龙坡区| 婺源县| 海伦市| 寿光市| 疏附县| 盐城市| 三原县| 晋中市| 沙田区| 喀喇沁旗| 阳东县| 鄯善县| 台南县| 临汾市| 江源县| 武平县| 凤城市| 靖远县| 东源县| 高安市| 静安区| 西乌珠穆沁旗|