青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

旅途

如果想飛得高,就該把地平線忘掉

MFC 定制控件(Customize Control) 及 MFC CWnd和WIN32 HWND關聯(lián)方法

MFC 定制控件(Customize Control) 及 MFC CWnd和WIN32 HWND關聯(lián)方法

<參考資料 MSDN MFC TNO 15>

文檔將概述MFC中定制自定義控件的3種方法:
擁有者繪制控件(Owner Drawing Control and Menu)   自繪制控件(self drawing control and menu)  和子集化(subclass)



1  使用MFC方法定制控件必備的幾個基本概念:

控制定制風格的控件的幾個標準Windows消息:
WM_MEASUREITEM
WM_COMPAREITEM
WM_DELETEITEM
WM_DRAWITEM
消息的詳細說明:



1.1 WM_MEASUREITEM

當自繪制風格(owner draw)的控件(owner-drawn button, combo box, list box, list view control, or menu item)創(chuàng)建時控件的父窗體將受到這個消息用于定制控件的大小
 
WM_MEASUREITE
MidCtl = (UINT) wParam;//控件的標識
lpmis  = (LPMEASUREITEMSTRUCT) lParam;//控件的大小信息

消息處理的返回值:
當函數(shù)處理了這個消息必須返回TRUE


1.2 WM_COMPAREITEM
系統(tǒng)發(fā)送此消息用于設定一個需要排序的控件(如具有CBS_SORT風格的COMBOBOX,有LBS_SORT風格的LISTBOX)新插入項的位置信息

WM_COMPAREITEM
idCtl = wParam; // 控件標識
lpcis = (LPCOMPAREITEMSTRUCT) lParam; // 2個進行比較的子項信息

消息處理的返回值:
-1   子項1在子項2之前的位置
  0  子項1,2 具有相等的排序位置
  1   子項1在子項2之后的位置


1.3 WM_DELETEITEM

當ListBox或是combo box被銷毀時或它們的某一子項將被除去的時候(如消息 LB_DELETESTRING TCONTENT, CB_DELETESTRING  CB_RESETCONTENT)系統(tǒng)會對應每一個被刪除的控件子項發(fā)送消息給控件的父窗體

WM_DELETEITEM
idCtl = wParam; //控件標識
lpdis = (LPDELETEITEMSTRUCT) lParam; //刪除子項信息
 
消息返回值
當函數(shù)處理了這個消息必須返回TRUE



1.4 WM_DRAWITEM

當自繪制風格的button, combo box, list box, or menu 的視覺方式需要改變時將發(fā)送WM_DRAWITEM消息給所有者窗體

WM_DRAWITEM
idCtl = (UINT) wParam; // 控件標識
lpdis = (LPDRAWITEMSTRUCT) lParam; // 繪制控件的信息

函數(shù)返回值
當函數(shù)處理了這個消息必須返回TRUE

2  以下內(nèi)容為定制自定義控件的3種常見方法:

2.1 擁有者繪制控件或菜單(owner draw controls/menu)

windows支持擁有WS_OWNERDRAW風格的控件發(fā)送指定消息給控件的父窗體(控件或是菜單的擁有者)使得父窗體可以定制這些控件的視覺風格或行為
MFC在其消息路由中直接支持4種消息消息的處理:
CWnd::OnDrawItem
CWnd::OnMeasureItem
CWnd::OnCompareItem
CWnd::OnDeleteItem
可以在CWnd的派生類(通常是CMainFrame或是CDialog)中實現(xiàn)這些方法來定制控件

注意:
這種方法實現(xiàn)的又很大的弊端,代碼重用率低,這樣定制的控件如在另一個地方重用時只能把代碼從一個地方拷貝到另一個地方



2.2 自繪制的控件或是菜單

MFC默認的實現(xiàn)owner draw標準消息的方法,將這些本來由父窗體實現(xiàn)的繪制的工作消息解碼發(fā)送到指定控件,由這些控件來處理這些消息,這種優(yōu)雅的處理方式使得很容易實現(xiàn)重用率很高的自定義風格的控件
在這些封裝控件的MFC類(CMenu, CButton, CListBox, CListCtrl etc)中 ,只需要派生一個新類并重寫對應的虛函數(shù)就可以輕松定制自定義風格的控件
如CMenu的DrawItem(), MesureItem()函數(shù)

2.3  動態(tài)子集化(dynamic subclassing)
2.3.1 subclass的概念:
子集化在windows編程中指用一個新的窗口過程(subclass winproc)取代舊的窗口過程,而是用舊的窗體過程(superclass winproc)作為默認的窗口處理,來使得窗體呈現(xiàn)新的特性;
superclass 和 subclass在windows編程中的概念可以用C++中的基類和派生類的關系來理解
在WIN32這個過程可以用API: SetWindowLong來實現(xiàn)

3.4.2 MFC CWnd和WIN32 HWND關聯(lián)的3種方法
方法一 創(chuàng)建一個CWnd時 CWnd對象創(chuàng)建一個HWND 此時的HWND的風格是可以更改的,如使用Create()
方法二 創(chuàng)建一個CWnd與一個已經(jīng)存在的HWND關聯(lián) 此時HWND的風格是不可以被更改的 如使用Attach()
方法三 創(chuàng)建一個CWnd與一個已存在的HWND關聯(lián),此時HWND的風格是可以更改的 這就是所謂的動態(tài)子集化(dynamic subclassing) 這樣就可以實現(xiàn)運行時態(tài)的改變一個窗體的行為


對于動態(tài)子集化MFC提供了兩個函數(shù):
CWnd::SubclassWindow
CWnd::SubclassDlgItem.
使用動態(tài)子集化是控制界面風格最優(yōu)雅的風格和方法,代碼重用率高和運行時態(tài)動態(tài)變化
一般一些比較優(yōu)良的MFC第三方界面庫都是基于這種技術實現(xiàn)的


posted on 2007-07-18 15:38 旅途 閱讀(828) 評論(0)  編輯 收藏 引用 所屬分類: 深入windows

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩亚洲精品内裤| 久久精品国产96久久久香蕉| 久久一区亚洲| 久久亚洲综合色| 99re国产精品| 亚洲免费在线电影| 亚洲高清av| 在线视频你懂得一区| 国产午夜精品福利| 欧美激情女人20p| 国产精品久久久久久久一区探花| 久久精品国产清自在天天线 | 国产精品a级| 亚洲一二三区在线| 妖精视频成人观看www| 国产一区日韩一区| 亚洲人屁股眼子交8| 欧美日韩在线视频一区二区| 久久精品国产欧美亚洲人人爽| 欧美不卡在线视频| 久久精品国产精品亚洲综合| 欧美日本高清视频| 蜜桃av综合| 国产欧美日韩综合精品二区| 亚洲日本精品国产第一区| 国内成人自拍视频| 亚洲视频图片小说| 99精品国产热久久91蜜凸| 欧美专区日韩专区| 小黄鸭视频精品导航| 欧美激情视频一区二区三区在线播放| 久久精品人人爽| 欧美性天天影院| 亚洲全部视频| 亚洲国产专区校园欧美| 欧美综合77777色婷婷| 午夜精品福利视频| 欧美日韩一区三区四区| 亚洲国产精品va| 韩国一区二区在线观看| 亚洲小视频在线观看| 亚洲另类在线一区| 美女图片一区二区| 欧美成人情趣视频| 在线成人免费视频| 久久精品理论片| 久久精品毛片| 国产欧美一区二区在线观看| 亚洲视频一区二区免费在线观看| 亚洲精品在线观看视频| 欧美成人精品一区二区| 免播放器亚洲一区| 18成人免费观看视频| 久久视频这里只有精品| 久久综合九色综合网站| 尤物精品在线| 麻豆91精品| 亚洲电影免费在线观看| 日韩视频不卡| 欧美日韩亚洲激情| 亚洲手机视频| 欧美日韩国产探花| 亚洲精品在线视频| 亚洲一区二区三区乱码aⅴ| 欧美视频免费在线观看| 亚洲一区二区三区精品动漫| 午夜久久tv| 国产曰批免费观看久久久| 久久久人成影片一区二区三区 | 欧美中文字幕在线| 免费成人毛片| 亚洲精品欧美专区| 欧美偷拍一区二区| 亚洲欧美日韩一区在线| 久久久五月天| 亚洲精品乱码久久久久久久久| 欧美日韩a区| 午夜精品成人在线| 欧美不卡在线| 一区二区三区欧美激情| 国产伦精品一区二区三区高清版 | 亚洲视频播放| 国产午夜精品麻豆| 久久夜色精品亚洲噜噜国产mv| 亚洲黄一区二区三区| 午夜一区不卡| 亚洲国产一区二区三区青草影视 | 久久伊人一区二区| 亚洲裸体在线观看| 国产精品一二三视频| 久久字幕精品一区| 亚洲视频一区| 亚洲第一精品电影| 欧美一区二区在线播放| 亚洲国产精品久久久久久女王| 欧美日韩亚洲在线| 午夜精品久久久久久久白皮肤 | 国产精品国码视频| 久久视频一区| 亚洲一区二区三区精品视频| 女女同性精品视频| 亚洲欧美视频在线| 亚洲精品久久久久久下一站| 国产精品永久| 欧美日本在线一区| 久久久午夜精品| 亚洲一区国产精品| 亚洲国产高清一区| 久久免费视频一区| 亚洲欧美日韩国产中文| 亚洲国产三级网| 国产一区二区三区无遮挡| 欧美日韩一区综合| 男女精品网站| 久久国产精彩视频| 亚洲午夜女主播在线直播| 91久久国产综合久久91精品网站| 久久久国产成人精品| 亚洲字幕在线观看| 99精品久久| 亚洲欧洲精品一区| 一区在线播放视频| 国产一区二区中文| 国产精品试看| 国产精品扒开腿做爽爽爽视频| 99视频一区| 亚洲激情影院| 欧美高清不卡| 老司机精品久久| 久久高清一区| 小黄鸭精品aⅴ导航网站入口| 一区二区三区精品视频| 亚洲精品一区二区三区樱花| 在线电影一区| 永久555www成人免费| 极品av少妇一区二区| 国产亚洲一区二区在线观看| 国产日韩精品一区观看| 国产精品一区二区欧美| 国产精品久久激情| 国产精品久久久久aaaa九色| 欧美日韩一区二区三区免费看| 欧美激情综合色| 欧美成人久久| 欧美精品播放| 欧美日韩国语| 欧美吻胸吃奶大尺度电影| 欧美日韩国产综合视频在线观看中文 | 国产精品大片免费观看| 欧美日韩免费观看一区三区| 欧美日韩大陆在线| 欧美四级电影网站| 国产精品久久久一区二区| 国产精品女主播一区二区三区| 欧美特黄视频| 国产精品一区二区黑丝| 国产自产在线视频一区| 亚洲国产高清在线观看视频| 亚洲精选在线| 亚洲在线第一页| 久久国产精品色婷婷| 六十路精品视频| 亚洲国产经典视频| 99精品视频网| 欧美一区二区视频在线观看2020 | 亚洲性线免费观看视频成熟| 亚洲欧美精品伊人久久| 久久精品国产亚洲aⅴ| 美日韩精品视频免费看| 亚洲经典自拍| 亚洲男人的天堂在线| 久久久人成影片一区二区三区| 欧美成va人片在线观看| 欧美体内谢she精2性欧美| 国产三区精品| 亚洲老司机av| 久久国产88| 91久久在线| 欧美在线不卡| 欧美日韩国产成人在线91| 国产欧美日韩一区二区三区| 在线观看亚洲a| 亚洲一区不卡| 久久亚洲影院| 在线亚洲欧美专区二区| 久久久www成人免费毛片麻豆| 欧美电影美腿模特1979在线看| 国产精品多人| 亚洲高清影视| 亚洲欧美色一区| 欧美黄污视频| 性亚洲最疯狂xxxx高清| 欧美精品www| 在线成人激情| 欧美在线观看一二区| 亚洲激情影院| 久久视频在线视频| 国产麻豆91精品| 一本色道久久综合狠狠躁的推荐| 久久精品中文|