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

旅途

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

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>
            亚洲欧美激情在线视频| 国产区亚洲区欧美区| 亚洲毛片视频| 激情久久综艺| 韩国三级电影一区二区| 在线免费观看日本一区| 亚洲二区视频| 亚洲视频 欧洲视频| 亚洲欧美国产一区二区三区| 亚洲综合视频在线| 久久露脸国产精品| 亚洲国产经典视频| 99精品福利视频| 亚洲免费在线视频一区 二区| 亚洲女同在线| 久久夜色精品一区| 欧美日韩国产一区精品一区| 国产女主播在线一区二区| 亚洲第一福利在线观看| 99视频有精品| 久久久99久久精品女同性 | 欧美一区二区三区视频免费播放| 欧美中文字幕第一页| 欧美大片免费| 亚洲欧美激情在线视频| 免费h精品视频在线播放| 国产精品扒开腿做爽爽爽视频| 国产一区视频网站| 在线视频欧美一区| 蜜桃av综合| 亚洲免费一在线| 欧美日韩成人在线| 在线观看日韩精品| 久久成人免费视频| 99热免费精品在线观看| 麻豆精品视频在线观看| 国产婷婷色一区二区三区在线| 在线视频欧美日韩| 亚洲激情网址| 欧美激情欧美激情在线五月| 在线播放国产一区中文字幕剧情欧美| 亚洲综合大片69999| 亚洲精品国产视频| 免费美女久久99| 亚洲高清av在线| 久久综合狠狠| 欧美在线综合| 精品1区2区3区4区| 久久人人97超碰国产公开结果| 亚洲欧美日韩精品久久久| 国产精品久久久久久一区二区三区 | 欧美成人自拍| 国模私拍一区二区三区| 亚洲欧美日韩精品久久久| 亚洲精品一区二区三区福利| 久久久久国产精品麻豆ai换脸| 欧美日韩国产在线观看| 136国产福利精品导航| 亚洲欧美国产精品桃花| 亚洲福利视频专区| 久久国产天堂福利天堂| 欧美精品免费观看二区| 亚洲国产成人av| 久久男人av资源网站| 亚洲欧美电影在线观看| 欧美午夜精品一区二区三区| 亚洲精品网站在线播放gif| 久久久另类综合| 亚洲欧美在线视频观看| 国产精品久久久一区二区三区 | 欧美午夜视频在线| 99re亚洲国产精品| 亚洲精品少妇30p| 欧美极品一区| 国内精品视频666| 性欧美video另类hd性玩具| 夜夜嗨av一区二区三区网页| 欧美日韩精品欧美日韩精品一| 99国产精品私拍| 最近看过的日韩成人| 免费成人小视频| 亚洲黄色视屏| 最新亚洲激情| 欧美四级电影网站| 亚洲制服欧美中文字幕中文字幕| 欧美 日韩 国产 一区| 久久精品国产v日韩v亚洲| 国产一区二区三区在线观看视频| 久久久久久综合| 免费成人美女女| 亚洲少妇一区| 亚洲欧美日韩精品久久久| 国产亚洲精品久久久久久| 久久视频在线视频| 免费不卡在线观看| 一区二区三区在线免费观看 | 日韩午夜电影| 国产精品99久久久久久有的能看| 国产精品国内视频| 久久精品在线免费观看| 久久中文字幕一区| 99视频精品全部免费在线| 亚洲视频一二区| 国产主播喷水一区二区| 亚洲国产一区二区a毛片| 欧美午夜www高清视频| 久久久久久高潮国产精品视| 美国成人毛片| 欧美亚洲免费电影| 久久综合五月| 亚洲欧美韩国| 久久男女视频| 欧美韩日精品| 午夜精品视频网站| 久久综合九色九九| 亚洲欧美在线高清| 欧美激情第二页| 久久久久久久97| 欧美四级伦理在线| 亚洲风情在线资源站| 国产精品区免费视频| 久久久噜噜噜久久中文字幕色伊伊| 欧美午夜欧美| 91久久精品www人人做人人爽| 国产精品久久久久一区二区三区共| 欧美ed2k| 国产小视频国产精品| 日韩亚洲成人av在线| 在线看片第一页欧美| 亚洲欧美成人| 亚洲网站在线看| 欧美色图麻豆| 亚洲精品日韩综合观看成人91| 在线观看国产成人av片| 午夜精品99久久免费| 亚洲永久字幕| 欧美精品一区二区高清在线观看| 久久久久国色av免费看影院| 国产精品麻豆va在线播放| 亚洲精品久久久久久久久久久久| 国产精品亚洲激情 | 亚洲激情视频在线播放| 亚洲福利精品| 久久精品噜噜噜成人av农村| 麻豆精品视频在线观看视频| 国产精品久久久久久久久久久久 | 欧美韩日一区二区三区| 在线免费高清一区二区三区| 久久国产精品99久久久久久老狼| 亚洲欧美日韩国产一区| 久久精品99国产精品酒店日本| 一区二区91| 欧美成人一品| 亚洲国产精品黑人久久久| 亚洲国产成人久久综合| 久热精品视频在线观看| 久久永久免费| 在线看一区二区| 猫咪成人在线观看| 欧美激情乱人伦| 亚洲黄色影片| 欧美成人综合网站| 亚洲精品国产日韩| 亚洲欧美成人精品| 国产午夜精品麻豆| 久久久久五月天| 欧美激情影音先锋| 亚洲国产精品成人综合| 蜜桃精品久久久久久久免费影院| 亚洲国产成人久久| 99国产精品久久久| 国产精品白丝jk黑袜喷水| 亚洲影院在线观看| 久热精品视频在线免费观看| 亚洲黑丝在线| 欧美三级午夜理伦三级中文幕| aa国产精品| 久久久久久亚洲精品杨幂换脸| 伊人夜夜躁av伊人久久| 欧美乱妇高清无乱码| 亚洲一本视频| 免费在线成人av| 一区二区三区视频在线播放| 国产精品免费看片| 久久亚洲视频| 亚洲一区二区在线视频 | 亚洲日本电影| 麻豆国产精品va在线观看不卡| 亚洲欧美电影院| 亚洲黄色免费网站| 欧美在线一二三四区| 亚洲精品国产日韩| 国产伦精品一区二区三区高清版| 老司机凹凸av亚洲导航| 亚洲大片在线观看| 久久精品人人做人人爽| 亚洲伦理自拍| 极品尤物一区二区三区| 欧美午夜不卡在线观看免费| 久久久久久网|