WTL體系結構(4) (轉)
WTL體系結構
對話方塊
ATL的對話方塊支援一向很好,對此WTL新增了通用對話方塊的封裝. 本質上是為對話方塊加入了輸入驗證和回撥. 比如, 你想在改變年Open對話方塊中的夾時有所動作,那麼你應該從CFileDialogImpl<>繼承一個類,實現OnFolderChange():
class CMyFileDialog : public CFileDialogImpl
{
public:
CMyFileDialog(BOOL b)
: CFileDialogImpl
void OnFolderChange(LPOFNOTIFY lpon)
{
char strFolder[MAX_PATH];
if (GetFolderPath(strFolder, sizeof(strFolder)) > 0)
{
MessageBox(strFolder);
}
}
};
當資料夾的路徑改變時,CFileDialogImpl<>OnFolderChange().該函式使用基類的GetFolderPath(),來取得新路徑.
WTL為所有的和通用控制元件提供了封裝類,包括 2000新加入的. 雖然只是簡單的包裝,但是它們使這些控制元件更加容易訪問.譬如,你能記清楚從List View讀出當前選定項的文字的訊息和需要傳的引數嗎?(實際上, 你需要傳送兩個訊息, 一個是得到選定項的,另一個是讀出它的文字.) WTL的作者為你完成了這些煩人的工作, 提供了一個簡單的封裝函式供你使用.
使用這些控制元件類有兩種方法. 如果你的對話方塊裡有一個控制元件, 你可以將控制元件的HWND依附到一個封裝,使用封裝類的方法來訪問控制元件.這種方法簡化了你讀寫控制元件資料和處理notification訊息的程式碼.
另外的用法是把這些類加到你的檢視類的繼承層次中去:
class CMyView : public CWindowImpl
這表示CWindowImpl<>是從CListBox繼承而來,因此建立的視窗將是一個list box (因為視窗類的名字是透過呼叫
CListBox::GetWndClassName()得到的). 另外, ATL的視窗機制會子類化這個視窗,將發給它的訊息到你的訊息對映中去. 它保留了老的視窗函式,這樣,你沒有處理的訊息將由老的視窗函式來處理.當你的檢視類從控制元件類繼承時,WTL就會使用這一技術.
在notification訊息和子類化這個主題上,有一點很值得指出,那就是當某事件發生時,絕大多數視窗控制元件都會傳送notification訊息給它們的父視窗.讓你視窗來處理這些notification訊息要比子類化一個已存在控制元件視窗(或子類化一個已存在的類,然後建立一個例項),從而在控制元件之前取得訊息好得多. 譬如, 你想處理按鈕的click事件,你所需要做的只是處理BN_CLICKED notification.它將由按鈕傳送給你的視窗類.另外的一種方法是從CContainedWindow<>子類化BUTTON視窗來處理click訊息.
我之所以說這個是因為一個知名的ATL鼓吹者給我一份程式碼裡就是這麼做的.他的程式碼取得一個簡單的按鈕click事件所花的時間是別人的3到4倍,因為他子類化了按鈕控制元件,而不是簡單的處理BN_CLICKED notification.
WTL還提供了一些新的控制元件,在win32中沒有對等者. 你已經看到過一個 -- command bar, 實際上還有其他一些非常有用類:
(未完待續)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-998963/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- WTL體系結構(3) (轉)
- WTL體系結構(2) (轉)
- WTL體系結構(1) (轉)
- oracle體系結構(轉)Oracle
- Oracle體系結構:記憶體結構和程式結構(轉)Oracle記憶體
- Oracle 體系結構介紹(轉)Oracle
- Software Architecture(軟體體系結構) (轉)
- 瞭解計算機體系結構(4)計算機
- Log4j 日誌體系結構
- FreeBSD DNS的體系結構(轉)DNS
- 深入 Linux PAM 體系結構(轉)Linux
- [轉] Android PhoneGap Cordova 體系結構Android
- Java HotSpot效能引擎的體系結構 (轉)JavaHotSpot
- FreeBSD下 DNS的體系結構(轉)DNS
- Log4j日誌體系結構解讀
- Oracle體系結構之-記憶體結構Oracle記憶體
- 【PG體系結構】PG體系結構簡單說明
- [Virtualization]ESXi體系結構與記憶體管理(一)體系結構記憶體
- Oracle體系結構之-物理結構Oracle
- BeanFactory體系結構Bean
- 【JVM體系結構】JVM
- Servlet 體系結構Servlet
- MySQL 體系結構MySql
- MongoDB 體系結構MongoDB
- 前端結構體系前端結構體
- 【EJB體系結構】
- postgresql體系結構SQL
- 體系結構1
- oracle體系結構Oracle
- SQLite體系結構SQLite
- 全面物件導向體系結構設計 (轉)物件
- ORACLE體系結構小結Oracle
- oracle體系結構總結Oracle
- WTL的訊息機制 (轉)
- 3:Oracle體系結構(邏輯結構)Oracle
- Oracle體系結構之記憶體結構(SGA、PGA)Oracle記憶體
- Oracle 8i資料庫體系結構(轉)Oracle資料庫
- HDFS的體系結構