VC中通用對話方塊的子類化

2021-08-26 07:30:00 字數 1511 閱讀 2613

mfc中包含了幾個windows通用對話方塊設計的封裝類。比如,在cfiledialog裡可以利用常用的cdialog成員函式domodal()函式操縱通用檔案對話方塊。

為了從cfiledialog這樣的公共對話方塊類派生出程式設計師自己的子類,傳統方法需要建立乙個「子對話方塊模板」,然後將模板關聯於派生出來的cfiledialog類。這個模板只能包括可增加到對話方塊中的控制項。

但是,由於系統將這個派生的對話方塊模板的訊息優先權隱含置於正常對話方塊順序之前,mfc訊息路徑就不會到達這個新的控制項類,因此在自己的派生cfiledialog 類裡沒有辦法通過對映訊息的方式編寫訊息處理**。

在visual c++ 6.0裡這個問題得到了部分解決: mfc 訊息路由可以起作用,但程式設計師還是不能使用 classwizard來增加訊息處理器和成員變數。而且,如果試圖用 classwizard 從cfiledialog 派生乙個類,它不會使能「dialog id」框,沒有辦法為自己的對話方塊分配id號,classwizard也不會為對話方塊增加對應的關聯**。

可以使用下列方法解決這個問題:

使用classwizard從cdialog (而不是cfiledialog) 派生新類,然後修改基類和所生成新類的建構函式。結果,新類將會從cfiledialog類派生, classwizard就能夠處理新增加的控制項了。

步驟如下

1. 建立自己的模板。

2. 將該模板關聯於乙個由cdialog派生出的類,使用classwizard (比如命名為cnewfiledialog)即可。

3. 在標頭檔案裡,cnewfiledialog.h的定義處,插入如下**:

declare—dynamic(cnewfiledialog)

並修改建構函式的宣告:

cnewfiledialog(bool bopenfiledialog, lpctstr lpszdefext = null,

lpctstr lpszfilename = null,

dword dwflags = ofn—hidereadonly | ofn—overwriteprompt,

lpctstr lpszfilter = null, cwnd pparentwnd = null);

4. 在新派生類的實現檔案(.cpp)裡,插入如下**:

implement—dynamic(cnewfiledialog, cfiledialog)

然後修改建構函式定義:

cnewfiledialog::cnewfiledialog(bool bopenfiledialog,

lpctstr lpszdefext, lpctstr lpszfilename,

dword dwflags, lpctstr lpszfilter, cwnd pparentwnd) :

cfiledialog(bopenfiledialog, lpszdefext, lpszfilename,

dwflags, lpszfilter, pparentwnd)

最後,在所有標頭檔案和實現檔案中用cfiledialog取代cdialog。

API通用對話方塊

include include include include include 7 5.h openfilename ofn 定義乙個openfilename結構 hinstance hinst lresult callback wndproc hwnd,uint,wparam,lparam int...

使用通用對話方塊

5.7 使用通用對話方塊 在windows系統中提供了一些通用對話方塊如 檔案選擇對話方塊 如圖,顏色選擇對話方塊 如圖,字型選擇對話方塊 如圖。在mfc中使用cfiledialog,ccolordialog,cfontdialog來表示。一般來講你不需要派生新的類,因為基類已經提供了常用的功能。而...

通用對話方塊QMessageBox

pyqt5中為我們提供了很多預設資訊框qmessagebox,注意為方便使用需要匯入模組。qmessagebox對話方塊包含型別只是圖示不同其他無太大差別 from pyqt5 import qtwidgets from pyqt5.qtwidgets import qmessagebox clas...