屬性對話方塊不同於普通對話方塊的是它能同時提供多個選項頁,而每頁都可以由資源編輯器
以編輯對話方塊的方式進行編輯,這樣給介面開發帶來了方便。同時使用上也遵守普通對話
框的規則,所以學習起來很方便。屬性對話方塊由兩部分構成:多個屬性頁
(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()
VC中的Tab控制項使用
vc中的tab控制項呼叫與vb c buider有點不一樣。在vb或c builder中,新增標籤的時候,同時建立了頁面視窗。在vc中,新增頁標籤時,要自己建立無邊框視窗,嵌入到tab控制項中。步驟如下 1 在主視窗上,放上tab控制項,並建立關聯變數m tab 2 在資源中,建立兩個無邊框視窗,建...
VC中的Tab控制項使用
vc中的tab控制項呼叫與vb c buider有點不一樣。在vb或c builder中,新增標籤的時候,同時建立了頁面視窗。在vc中,新增頁標籤時,要自己建立無邊框視窗,嵌入到tab控制項中。步驟如下 1 在主視窗上,放上tab控制項,並建立關聯變數m tab 2 在資源中,建立兩個無邊框視窗,建...
VC控制項TAB切換順序 的控制
vc控制項tab切換順序的控制 在開發乙個小工具的時候,遇到這樣乙個問題 由於控制項新增順序不同,導致最終想要的控制項tab切換順序與想要的順序不符合。經過蒐集資料,發現了控制控制項tab切換順序的方法。如下 1 在自己的工程檔案中,有乙個與工程名相同的資源檔案 rc 該檔案包含了本工程所有使用到的...