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

旅途

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

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

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

<參考資料 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)創建時控件的父窗體將受到這個消息用于定制控件的大小
 
WM_MEASUREITE
MidCtl = (UINT) wParam;//控件的標識
lpmis  = (LPMEASUREITEMSTRUCT) lParam;//控件的大小信息

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


1.2 WM_COMPAREITEM
系統發送此消息用于設定一個需要排序的控件(如具有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)系統會對應每一個被刪除的控件子項發送消息給控件的父窗體

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



1.4 WM_DRAWITEM

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

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

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

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

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

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

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



2.2 自繪制的控件或是菜單

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

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

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


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


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>
            亚洲影院一区| 亚洲男人的天堂在线| 精品成人免费| 亚洲少妇诱惑| 亚洲日本欧美日韩高观看| 在线看不卡av| 亚洲精品欧美精品| 亚洲国产另类 国产精品国产免费| 国产农村妇女精品一二区| 欧美日韩三级| 亚洲免费高清| 国产精品毛片a∨一区二区三区| 久久综合电影| 国产精品你懂的| 亚洲精品视频在线播放| 国产亚洲女人久久久久毛片| 亚洲国产精品久久久久秋霞不卡| 国产精品丝袜91| 91久久黄色| 欧美一区1区三区3区公司| 亚洲欧美久久久久一区二区三区| 中国成人黄色视屏| 欧美日韩中文另类| 亚洲天堂免费观看| 一本一本久久| 久久精品一区二区三区中文字幕| 亚洲精品自在久久| 亚洲第一精品久久忘忧草社区| 欧美日本乱大交xxxxx| 蜜臀久久99精品久久久久久9| 一本大道久久a久久精品综合| 欧美成人综合一区| 欧美一区二区三区在线观看| 一本色道久久综合亚洲精品不 | 国产一区二区三区的电影| 亚洲国内精品| 久久久久国产精品一区二区| 亚洲无限乱码一二三四麻| 美日韩精品免费观看视频| 国产精品嫩草99av在线| 在线亚洲高清视频| 亚洲美女区一区| 裸体一区二区| 国产日本欧美视频| 亚洲一区二区三区视频| 一本久久a久久免费精品不卡| 免费一级欧美片在线播放| 国产婷婷色一区二区三区| 在线综合视频| 亚洲一区二区三区精品在线| 国产精品久久97| 午夜影视日本亚洲欧洲精品| 亚洲精品资源美女情侣酒店| 欧美日韩视频专区在线播放| 9国产精品视频| 野花国产精品入口| 国产在线视频欧美一区二区三区| 欧美伊久线香蕉线新在线| 欧美亚洲一区二区在线观看| 国产亚洲精品自拍| 欧美国产日本| 国产精品福利在线观看网址| 欧美一区中文字幕| 亚洲免费av网站| 欧美在线不卡视频| 99在线精品视频| 久久精品道一区二区三区| 国产一区二区高清视频| 日韩小视频在线观看| 妖精视频成人观看www| 欧美国产日韩一区| 久久久久久69| 韩国三级在线一区| 欧美一级日韩一级| 亚洲欧美日韩在线播放| 国产精品国产a级| 亚洲一区二区三区欧美| 亚洲国产精品女人久久久| 欧美高清视频在线播放| 一区二区三区 在线观看视频| 免费亚洲电影| 欧美日韩国产首页| 亚洲影视中文字幕| 亚洲在线观看| 激情欧美一区二区三区| 香蕉久久a毛片| 久久精品免费电影| 一区二区三区波多野结衣在线观看| 99精品国产在热久久婷婷| 国产精品理论片| 亚洲福利国产| 国产精品区二区三区日本| 免费在线观看成人av| 国产精品二区三区四区| 久久久久国产一区二区三区| 欧美系列精品| 日韩一级精品| 亚洲精选在线| 欧美成人精精品一区二区频| 欧美一区影院| 亚洲欧美日韩成人高清在线一区| 欧美中文字幕精品| 久久se精品一区精品二区| 一区二区欧美在线观看| 国产麻豆精品视频| 日韩亚洲欧美精品| 一区二区动漫| 国产精品高潮呻吟久久| 亚洲国产成人精品久久| 1000部精品久久久久久久久| 久久久久久欧美| 欧美激情一区二区三区不卡| 亚洲精品日产精品乱码不卡| 久久精品视频一| 欧美成人一品| 91久久精品一区| 亚洲美女av电影| 裸体丰满少妇做受久久99精品 | 久久国产综合精品| 亚洲卡通欧美制服中文| 欧美激情一区二区三区在线| 亚洲精品社区| 久久精品麻豆| 亚洲日韩第九十九页| 欧美日韩亚洲一区二区三区在线 | 亚洲国产老妈| 国产一在线精品一区在线观看| 欧美屁股在线| 欧美日韩在线播| 国产精品v欧美精品∨日韩| 欧美刺激午夜性久久久久久久| 亚洲天堂第二页| 99re8这里有精品热视频免费 | 91久久午夜| 日韩视频第一页| 欧美激情精品| 另类图片国产| 麻豆91精品| 欧美在线视频全部完| 一区二区三区国产| 亚洲免费黄色| 亚洲人成网站色ww在线| 国产在线精品二区| 国产一区二区中文| 伊人久久综合97精品| 韩国av一区二区三区四区| 国产视频一区二区在线观看| 欧美日韩视频在线第一区| 欧美日韩伊人| 欧美精品国产一区| 欧美网站大全在线观看| 欧美国产日韩一区二区| 欧美激情综合色综合啪啪| 欧美日韩理论| 国产欧美欧美| 国产亚洲一级| 一区二区三区四区五区在线| 久久福利一区| 欧美激情一区二区三区在线| 亚洲精品日韩一| 久久视频在线免费观看| 欧美日韩综合不卡| 国内成+人亚洲+欧美+综合在线| 精品999在线观看| 久久精品成人欧美大片古装| 亚洲精品美女久久久久| 亚洲综合日韩在线| 麻豆精品在线观看| 老司机免费视频一区二区| 久久国产高清| 99re热精品| 麻豆精品一区二区av白丝在线| 欧美日韩亚洲国产精品| 亚洲国产cao| 久久嫩草精品久久久精品一| 日韩亚洲国产精品| 欧美日韩国产在线播放网站| 1024成人网色www| 久久久国产成人精品| 欧美成人性生活| 欧美激情欧美狂野欧美精品| 国产一区二三区| 欧美国产三区| 欧美美女喷水视频| 99精品视频一区二区三区| 久久人人看视频| 久久精品最新地址| 国产欧美一区二区三区久久| 夜夜嗨一区二区三区| 亚洲欧洲视频在线| 免费观看一区| 亚洲欧洲在线一区| 欧美国产在线电影| 欧美视频国产精品| 久久夜色精品亚洲噜噜国产mv| 老牛嫩草一区二区三区日本| 亚洲一区在线观看免费观看电影高清| 欧美大片一区| 欧美激情一区二区三区全黄 | 小处雏高清一区二区三区|