黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

定制控件消息處理函數(shù)

系統(tǒng) 2156 0

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

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


二、相關(guān)函數(shù)
1.窗口類的屬性可以通過GetWindowLong和SetWindowLong進行讀取和設(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 擴展風格
GWL_STYLE 風格
GWL_WNDPROC 消息處理函數(shù)
GWL_HINSTANCE 實例
GWL_ID 窗口ID
GWL_USERDATA 用戶數(shù)據(jù)
DWL_DLGPROC 對話框消息處理函數(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,	//實例句柄

		NULL);



	//嵌入新的消息處理函數(shù)

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

}

return 0;
  

定制控件消息處理函數(shù)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論