?? teach_road_56.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb_2312-80">
<meta name="GENERATOR" content="聞怡洋 wyy_cq@21cn.com">
<title>Visual C++/MFC開發指南</title>
<SCRIPT LANGUAGE='JavaScript' SRC='../../submit_navigate_bar.js'></SCRIPT>
<link REL="stylesheet" HREF="../../main.css">
</head>
<SCRIPT LANGUAGE='JavaScript'>write_body();</SCRIPT>
<SCRIPT LANGUAGE='JavaScript'>write_bar();</SCRIPT>
<p align="center"><a
HREF="http://www.0828.com/pay/cgi-bin/random.cgi?job=go&id=820"
target="_blank">
<img SRC="http://www.0828.com/pay/cgi-bin/random.cgi?id=820" BORDER="0"
width="468" height="60"></a><br>
<font size="2"><a href="http://www.0828.com/pay/index.html"><img border="0"
src="http://www.0828.com/pay/code.gif" width="468" height="15"></a><br>
<small>你每點一下上面的廣告我就能有更多的上網時間為大家尋找資料</small></font>
</p>
<table width=98% cellspacing="0" cellpadding="0" align=center><!--整體框架-->
<tr><td>
<table border=0 width="100%" cellspacing="0" cellpadding="2"><!--標記放置區域-->
<tr>
<td width="30%" align="center" bgcolor="#003D84" valign=middle><img src=../../img/brand_200_60.gif width=200 height=60 alt="LOGO1"></td>
<td width="70%" align="center" bgcolor="#003D84" valign=middle><img src=../../img/logo_400_60.gif width=400 height=60 alt="LOGO2"></td>
</tr>
<tr>
<td colspan="2" bgcolor="#0080C0" align=center><font color=white>您當前位置</font></font> <a href=../../index.htm><font color=white>首頁</font></a> <a href=../index.htm><font color=white>開發教程</font></a> <a href=index.htm><font color=white><font class=engul>Visual C++/MFC</font>入門教程</font></a> <font color=white>5.6 使用屬性對話框</font><SCRIPT LANGUAGE='JavaScript'>write_command();</SCRIPT></td>
</tr>
</table><!--標記放置區域 END-->
<table border=0 width=100% cellspacing="0" cellpadding="0">
<tr>
<td><!--begin-->
<br>
<p align=center><big>5.6 使用屬性對話框</big></p>
<table border=0 align=center width=100%>
<tr><td>
<small>
<p>屬性對話框不同于普通對話框的是它能同時提供多個選項頁,而每頁都可以由資源編輯器以編輯對話框的方式進行編輯,這樣給界面開發帶來了方便。同時使用上也遵守普通對話框的規則,所以學習起來很方便。屬性對話框由兩部分構成:多個屬性頁(CPropertyPage)和屬性對話框(CPropertySheet)。</p>
<p>首先需要編輯屬性頁,在資源編輯器中選擇插入,并且選擇屬性對話框后就可以插入一個屬性頁,<a href=56_g1.gif target=_blank>如圖</a>,或者選擇插入一個對話框,然后將其屬性中的Style設置為Child,Border設置為Thin也可以,<a href=56_g2.gif target=_blank>如圖</a>。然后根據這個對話框資源生成一個新類,在選擇基類時選擇CPropertyPage,ClassWizard會自動生成相關的代碼。</p>
<p>而對于CPropertySheet也需要生成新類,并且將所有需要加入的屬性頁對象都作為成員變量。屬性對話框也分為有模式和無模式兩種,有模式屬性對話框使用DoModal()創建,無模式屬性對話框使用Create()創建。下面的代碼演示了如何創建屬性對話框并添加屬性頁:
<pre>
//修改CPropertySheet派生類的構造函數為如下形式
CSheet::CSheet()
:CPropertySheet("test sheet", NULL, 0)
{
m_page1.Construct(IDD_PAGE_1);
m_page2.Construct(IDD_PAGE_2);
AddPage(&m_page1);
AddPage(&m_page2);
}
//創建有模式屬性對話框
void CMy56_s1Dlg::OnMod()
{
CSheet sheet;
sheet.DoModal();
}
//創建無模式屬性對話框
void CMy56_s1Dlg::OnUnm()
{
CSheet *sheet=new CSheet;
sheet->Create();
}
</pre>
</p>
<p>
對于屬性對話框可以使用下面的一些成員函數:
<ul><li>CPropertyPage* CPropertySheet::GetActivePage( )得到當前活動頁的指針。</li>
<li>BOOL CPropertySheet::SetActivePage( int nPage )用于設置當前活動頁。</li>
<li>int CPropertySheet::GetPageCount()用于得到當前頁總數。</li>
<li>void CPropertySheet::RemovePage( int nPage )用于刪除一頁。</li>
</ul>
而對于屬性頁來將主要通過重載一些函數來達到控制的目的:<ul>
<li>void CPropertyPage::OnOK() 在屬性對話框上按下“確定”按鈕后被調用</li>
<li>void CPropertyPage::OnCancel() 在屬性對話框上按下“取消”按鈕后被調用</li>
<li>void CPropertyPage::OnApply() 在屬性對話框上按下“應用”按鈕后被調用</li>
<li>void CPropertyPage::SetModified( BOOL bChanged = TRUE ) 設置當前頁面上的數據被修改標記,這個調用可以使“應用”按鈕為允許狀態。</li>
</ul>
此外利用屬性對話框你可以生成向導對話框,向導對話框同樣擁有多個屬性頁,但同時只有一頁被顯示,而且對話框上顯示的按鈕為“上一步”,“下一步”/“完成”,向導對話框會按照你添加頁面的順序依次顯示所有的頁。在顯示屬性對話框前你需要調用void CPropertySheet::SetWizardMode()。使用向導對話框時需要對屬性頁的BOOL CPropertyPage::OnSetActive( )進行重載,并在其中調用void CPropertySheet::SetWizardButtons( DWORD dwFlags )來設置向導對話框上顯示的按鈕。dwFlags的取值可為以下值的“或”操作:
<ul>
<li>PSWIZB_BACK 顯示“上一步”按鈕</li>
<li>PSWIZB_NEXT 顯示“下一步”按鈕</li>
<li>PSWIZB_FINISH 顯示“完成”按鈕</li>
<li>PSWIZB_DISABLEDFINISH 顯示禁止的“完成”按鈕</li>
</ul>
void CPropertySheet::SetWizardButtons( DWORD dwFlags )也可以在其他地方調用,比如說在顯示最后一頁時先顯示禁止的“完成”按鈕,在完成某些操作后再顯示允許的“完成”按鈕。
</p>
<p>在使用向導對話框時可以通過重載一些函數來達到控制的目的:<ul>
<li>void CPropertyPage::OnWizardBack() 按下了“上一步”按鈕。返回0表示有系統決定需要顯示的頁面,-1表示禁止頁面轉換,如果希望顯示一個特定的頁面需要返回該頁面的ID號。</li>
<li>void CPropertyPage::OnOnWizardNext() 按下了“下一步”按鈕。返回值含義與void CPropertyPage::OnWizardBack()相同。</li>
<li>void CPropertyPage::OnWizardFinish() 按下了“完成”按鈕。返回FALSE表示不允許繼續,否則返回TRUE向導對話框將被結束。</li>
</ul>
在向導對話框的DoModal()返回值為ID_WIZFINISH或IDCANCEL。下面的代碼演示了如何創建并使用向導對話框:
<pre>
//創建有模式向導對話框
void CMy56_s1Dlg::OnWiz()
{
CSheet sheet;
sheet.SetWizardMode();
int iRet=sheet.DoModal();//返回ID_WIZFINISH或IDCANCEL
}
//重載BOOL CPropertyPage::OnSetActive( )來控制顯示的按鈕
BOOL CPage1::OnSetActive()
{
((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_NEXT);
return CPropertyPage::OnSetActive();
}
BOOL CPage2::OnSetActive()
{
((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_FINISH);
return CPropertyPage::OnSetActive();
}
</pre>
<a href=56_s1.zip>下載本節例子</a>。
</p>
</small>
</td>
</tr>
<tr><td>
<small>
<p align=center><a href=index.htm#charpter5>返回</a></p>
</small>
</td></tr>
</table>
<p align=center><small>版權所有 聞怡洋 <a href=http://www.vchelp.net/>http://www.vchelp.net/</a></small></p>
</td><!--end-->
</tr>
</table>
</td></tr></table><!--整體框架 END-->
<SCRIPT LANGUAGE='JavaScript'>write_tail();</SCRIPT>
</body></html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -