人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

用窗口子類化技術(shù)改進(jìn)Windows編輯框控件的技巧

用窗口子類化技術(shù)改進(jìn)Windows編輯框控件的技巧

更新時間:2022-10-09 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

作者:張俊鋒、崔華鋒 

 1.問題的提出

  盡管Windows系統(tǒng)提供了豐富的通用控件(如按鈕,編輯框,滑動條等),但仍不可能滿足我們實(shí)際應(yīng)用中千差萬別的需求,筆者在某項(xiàng)目的開發(fā)工作中就遇見了這樣的問題。項(xiàng)目需要一個供用戶輸入表格數(shù)據(jù)的接口界面,要求只接收用戶輸入的數(shù)據(jù)信息,并可以利用鍵盤上的光標(biāo)鍵移動輸入位置以避免用戶在鍵盤和鼠標(biāo)之間的頻繁切換。簡單地使用Windows的編輯框控件不僅不能對輸入字符進(jìn)行有效過濾(如果給編輯框控件加上ES_NUMBER風(fēng)格則只能接收0~9之間的數(shù)字而不能接收小數(shù)點(diǎn)正負(fù)號等需要的字符),而且無法移動控件。如果重起爐灶自己編程來實(shí)現(xiàn),其工作量是相當(dāng)可觀的。為此,筆者經(jīng)多次嘗試,終于通過采用窗口子類化方法,很好地解決了上述問題。

  2.窗口子類化方法

  應(yīng)用程序?yàn)榱说怯浺粋窗口類,首先要填寫好一個WNDCLASS結(jié)構(gòu),其中的結(jié)構(gòu)參數(shù)lpfnWndProc就是該類窗口函數(shù)的地址,接著調(diào)用RegisterClass()函數(shù)向Windows系統(tǒng)申請登記這個窗口類。這時Windows會為其分配一塊內(nèi)存來存放該類的全部信息,這個內(nèi)存塊稱為窗口類內(nèi)存塊。

  當(dāng)應(yīng)用程序要創(chuàng)建一個屬于某一已登記窗口類的窗口時,Windows便為這個窗口分配一塊內(nèi)存,即窗口內(nèi)存塊,用來存放與該窗口有關(guān)的專用信息。這些信息一部分來自傳遞給窗口創(chuàng)建函數(shù)CreateWindow()或CreateWindowEx()的參數(shù)信息,另一部分則來自所屬窗口類的窗口類內(nèi)存塊,其中參數(shù)lpfnWndProc便被Windows從窗口類內(nèi)存塊復(fù)制到為新創(chuàng)建窗口分配的窗口內(nèi)存塊中。當(dāng)有消息被發(fā)送到這個窗口時,Windows檢查該窗口內(nèi)存塊中的窗口函數(shù)地址(lpfnWndProc),并調(diào)用該地址上的函數(shù)來處理這些消息。

  所謂窗口子類化,實(shí)際上就是改變窗口內(nèi)存塊中的有關(guān)參數(shù)。由于這種修改只涉及到一個窗口的窗口內(nèi)存塊,因此它不會影響到屬于同一窗口類的其它窗口的功能和表現(xiàn)。窗口子類化中最常見的是修改窗口內(nèi)存塊中的窗口函數(shù)地址(lpfnWndProc),使其指向一個新的窗口函數(shù),從而改變原窗口函數(shù)的處理方法,改進(jìn)其功能。其基本步驟如下:

  (1)編寫子類化窗口函數(shù)。該函數(shù)必須為標(biāo)準(zhǔn)的窗口函數(shù)格式即:

  LRESULT CALLBACK SubClassWndProc ( HWND , UINT , WPARAM , LPARAM ) ;

  在這個函數(shù)中對感興趣的消息進(jìn)行處理,而把未處理或者需要原窗口函數(shù)進(jìn)一步處理的消息傳送給原窗口函數(shù);

 。2)利用待子類化窗口的句柄hWnd,調(diào)用GetWindowLong ( hWnd , GWL_WNDPROC ) 函數(shù)獲得原窗口函數(shù)的地址并保存起來;

 。3)調(diào)用SetWIndowLong ( hWnd , GWL_WNDPROC , SubClassWndProc ) 把窗口函數(shù)設(shè)置成子類化窗口函數(shù),完成窗口子類化。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 洛川县| 安图县| 万宁市| 涞源县| 象州县| 淳化县| 中西区| 扎鲁特旗| 新化县| 宝清县| 离岛区| 远安县| 江都市| 融水| 灵台县| 西昌市| 蚌埠市| 南岸区| 太仆寺旗| 安龙县| 定远县| 赣榆县| 楚雄市| 台北县| 定陶县| 商洛市| 高尔夫| 尤溪县| 古田县| 普定县| 沈丘县| 东至县| 定州市| 诸暨市| 沁水县| 承德县| 竹溪县| 福安市| 翁牛特旗| 桃源县| 枞阳县|