MFC控制項篇之屬性對話方塊

2021-08-22 10:42:18 字數 2377 閱讀 4226

使用屬性對話方塊

屬性對話方塊不同於普通對話方塊的是它能同時提供多個選項頁,而每頁都可以由資源編輯器以編輯對話方塊的方式進行編輯,這樣給介面開發帶來了方便。同時使用上也遵守普通對話方塊的規則,所以學習起來很方便。屬性對話方塊由兩部分構成:多個屬性頁(cpropertypage)和屬性對話方塊(cpropertysheet)。

首先需要編輯屬性頁,在資源編輯器中選擇插入,並且選擇屬性對話方塊後就可以插入乙個屬性頁,或者選擇插入乙個對話方塊,然後將其屬性中的style設定為child,border設定為thin也可以,然後根據這個對話方塊資源生成乙個新類,在選擇基類時選擇cpropertypage,classwizard會自動生成相關的**。

而對於cpropertysheet也需要生成新類,並且將所有需要加入的屬性頁物件都作為成員變數。屬性對話方塊也分為有模式和無模式兩種,有模式屬性對話方塊使用domodal()建立,無模式屬性對話方塊使用create()建立。下面的**演示了如何建立屬性對話方塊並新增屬性頁:

//修改cpropertysheet派生類的建構函式為如下形式

csheet::csheet()

:cpropertysheet("test sheet", null, 0)

//建立有模式屬性對話方塊

void cmy56_s1dlg::onmod()

//建立無模式屬性對話方塊

void cmy56_s1dlg::onunm()

對於屬性對話方塊可以使用下面的一些成員函式:

cpropertypage* cpropertysheet::getactivepage( )得到當前活動頁的指標。

bool cpropertysheet::setactivepage( int npage )用於設定當前活動頁。

int cpropertysheet::getpagecount()用於得到當前頁總數。

void cpropertysheet::removepage( int npage )用於刪除一頁。

而對於屬性頁來將主要通過過載一些函式來達到控制的目的:

void cpropertypage::onok() 在屬性對話方塊上按下「確定」按鈕後被呼叫

void cpropertypage::oncancel() 在屬性對話方塊上按下「取消」按鈕後被呼叫

void cpropertypage::setmodified( bool bchanged = true ) 設定當前頁面上的資料被修改標記,這個呼叫可以使「應用」按鈕為允許狀態。

此外利用屬性對話方塊你可以生成嚮導對話方塊,嚮導對話方塊同樣擁有多個屬性頁,但同時只有一頁被顯示,而且對話方塊上顯示的按鈕為「上一步」,「下一步」/「完成」,嚮導對話方塊會按照你新增頁面的順序依次顯示所有的頁。在顯示屬性對話方塊前你需要呼叫void cpropertysheet::setwizardmode()。使用嚮導對話方塊時需要對屬性頁的bool cpropertypage::onsetactive( )進行過載,並在其中呼叫void cpropertysheet::setwizardbuttons( dword dwflags )來設定嚮導對話方塊上顯示的按鈕。dwflags的取值可為以下值的「或」操作:

pswizb_back 顯示「上一步」按鈕

pswizb_next 顯示「下一步」按鈕

pswizb_finish 顯示「完成」按鈕

pswizb_disabledfinish 顯示禁止的「完成」按鈕

void cpropertysheet::setwizardbuttons( dword dwflags )也可以在其他地方呼叫,比如說在顯示最後一頁時先顯示禁止的「完成」按鈕,在完成某些操作後再顯示允許的「完成」按鈕。

在使用嚮導對話方塊時可以通過過載一些函式來達到控制的目的:

void cpropertypage::onwizardback() 按下了「上一步」按鈕。返回0表示有系統決定需要顯示的頁面,-1表示禁止頁面轉換,如果希望顯示乙個特定的頁面需要返回該頁面的id號。

void cpropertypage::ononwizardnext() 按下了「下一步」按鈕。返回值含義與void cpropertypage::onwizardback()相同。

void cpropertypage::onwizardfinish() 按下了「完成」按鈕。返回false表示不允許繼續,否則返回true嚮導對話方塊將被結束。

在嚮導對話方塊的domodal()返回值為id_wizfinish或idcancel。下面的**演示了如何建立並使用嚮導對話方塊:

//建立有模式嚮導對話方塊

void cmy56_s1dlg::onwiz()

//過載bool cpropertypage::onsetactive( )來控制顯示的按鈕

bool cpage1::onsetactive()

bool cpage2::onsetactive()

MFC控制項篇之通用對話方塊

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

MFC對話方塊控制項 Edit Control

edit視窗是用來接收使用者輸入最常用的乙個控制項。建立乙個輸入視窗可以使用成員函式 bool cedit create lpctstr lpsztext,dword dwstyle,const rect rect,cwnd pparentwnd,uint nid 0xffff 其中dwstyle將...

MFC之對話方塊

對話方塊可以分為模式對話方塊和非模式對話方塊兩種。模式對話方塊是指使用者只能在當前的窗體中進行操作,在該窗體沒有關閉之前不能切換到其他的窗體。非模式對話方塊是指當前的所操作的窗體可以切換。一般情況下,用於確認資訊的操作和一般的操作的對話方塊屬於模式對話方塊。如開啟檔案對話方塊就是典型的模式對話方塊,...