标签页式样的对话框参考
http://blog.csdn.NET/akof1314/article/details/5979405
Visual Studio 2008 SP1自帶的示例里面,有個工程為PropSheetDemo,此示例介紹了CMFCPropertySheet屬性表的使用,截圖如下:http://img.blog.csdn.net/20141112163539593?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU2F5ZXNhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
下面以VS2008SP1為測試環境,學習使用方法:
1.新建基于對話框工程;
2.新建一個類,基類為CMFCPropertySheet,名稱如CMyPropertySheet;
3.添加兩個對話框資源,雙擊對話框為其添加類,選擇基類為CPropertyPage(因為這里選不了CMFCPropertyPage),名稱分別如CPage1和Cpage2;
4.然后替換所有的CPropertyPage成為CMFCPropertyPage;
5.在CMyPropertySheet.h頭文件里添加兩個屬性頁的頭文件,然后聲明兩個屬性頁對象:
CPage2?m_Page2;?
在CMyPropertySheet.cpp的構造函數里面,添加如下語句:
m_psh.pszCaption=_T("屬性表對話框標題");?//設置屬性表標題?m_psh.dwFlags?|=?PSH_NOAPPLYNOW?;?//去掉“應用”按鈕?
m_psh.dwFlags?&=~PSH_HASHELP;?//去掉“幫助”按鈕?
SetLook(PropSheetLook_List);//樣式外觀設置,這里為列表型?
AddPage(&m_Page1);?
AddPage(&m_Page2);?
6.在應用程序對話框頭文件里面,添加屬性表頭文件
#include?"MyPropertySheet.h"?然后聲明一個對象:
CMyPropertySheet?m_MySheet;?接著在對話框實現文件里面,按鈕的單擊事件里如下:
if?(m_MySheet.DoModal()?==?IDOK)?????AfxMessageBox(_T("點了確定"));?
else?
????AfxMessageBox(_T("點了取消"));?
7.完成編譯,就可以看到效果。其中對于屬性表對話框的外觀框架各種設置,請看下面的結構體。
PROPSHEETHEADER結構體,定義框架和屬性表頁。
PROPSHEETHEADER結構體:
typedef?struct?{???DWORD??dwSize;????//這個結構的大小(字節)?
??DWORD??dwFlags;????//標志位,指出創建屬性表頁時的選項?
??HWND??hwndParent;????//屬性表父窗口的句柄?
??HINSTANCE??hInstance;????//加載圖標或標題字符串資源的實例句柄,如果pszIcon或pszCaption成員確定了資源加載,該成員必須指定?
??union?{?
????HICON???hIcon;????//用在屬性表對話框的標題欄小圖標的圖標句柄,如果dwFlags成員不包括PSH_USEHICON,這個成員被忽略?
????LPCTSTR??pszIcon;????//用在屬性表對話框的標題欄小圖標的圖標資源,如果dwFlags成員不包括PSH_USEICONID,這個成員被忽略?
??}?;?
??LPCTSTR??pszCaption;????//屬性表對話框的標題,如果dwFlags成員包括PSH_PROPTITLE,字符串“屬性”是插入標題的開頭?
??UINT??nPages;????//屬性頁phpage數組的元素數量?
??union?{?
????UINT???nStartPage;????//當屬性表對話框創建后的初始頁,從0開始的索引頁?
????LPCTSTR??pStartPage;????//當屬性表對話框創建后的初始頁的名稱?
??}?;?
??union?{?
????LPCPROPSHEETPAGE?ppsp;????//定義屬性表上的頁的PROPSHEETPAGE結構數組的指針?
????HPROPSHEETPAGE???*phpage;????//指向屬性表頁的句柄數組指針,每個句柄必須是在調用CreatePropertySheetPage函數之前創建,如果dwFlags成員包括PSH_PROPSHEETPAGE,phpage被忽略,應設置為NULL?
??}?;?
??PFNPROPSHEETCALLBACK?pfnCallback;????//指向當屬性表被初始化時調用應用程序定義的回調函數,如需回調函數的信息,看PropSheetProc函數的說明,如果dwFlags成員不包括PSH_USECALLBACK,這個成員被忽略?
#if?(_WIN32_IE?>=?0x0400)?
??union?{?
????HBITMAP?hbmWatermark;????//版本5.80或更高版本,水印位圖的句柄,如果dwFlags成員不包括PSH_USEHBMWATERMARK,這個成員被忽略?
????LPCTSTR?pszbmWatermark;?//版本5.80或更高版本,位圖資源用作水印,如果dwFlags成員包括PSH_USEHBMWATERMARK,這個成員被忽略?
??}?;?
??HPALETTE??hplWatermark;?//版本5.80或更高版本,HPALETTE結構用做繪制水印位圖和/或頭位圖,如果dwFlags成員不包括PSH_USEHPLWATERMARK,這個成員被忽略?
??union?{?
????HBITMAP?hbmHeader;????//版本5.80或更高版本,頭位圖句柄,如果dwFlags成員不包括PSH_USEHBMHEADER,這個成員被忽略?
????LPCSTR??pszbmHeader;????//版本5.80或更高版本,位圖資源使用為頭位圖,如果dwFlags成員包括PSH_USEHBMHEADER,這個成員被忽略?
??}?;?
#endif??
}?PROPSHEETHEADER,?*LPPROPSHEETHEADER;?
?其中的dwFlags標志位的選項參數如下:
| 值 | 含義 |
| PSH_DEFAULT | 缺省模式 |
| PSH_AEROWIZARD0x00004000 | Version 6.00 and Windows Vista,透明風格 |
| PSH_HASHELP | 顯示“幫助”按鈕 |
| PSH_HEADER | 版本5.80和更高版本。頭位圖表示用于Wizard97向導 |
| PSH_HEADERBITMAP0x00004000 | Version 6.00 and Windows Vista,該pszbmHeader成員指定一個在標題區域顯示位圖 |
| PSH_MODELESS | 指定創建非模態標簽對話框 |
| PSH_NOAPPLYNOW | “應用”按鈕不可見 |
| PSH_NOCONTEXTHELP | 版本5.80和更高版本,上下文敏感幫助按鈕不可見 |
| PSH_NOMARGIN0x00004000 | Version 6.00 and Windows Vista,不在框架和頁之間插入邊距 |
| PSH_PROPSHEETPAGE | 使用ppsp成員,并且忽略phpage成員 |
| PSH_PROPTITLE | 指定標簽對話框的標題文字內容 |
| PSH_RESIZABLE | 該向導允許由用戶調整。最大化和最小化按鈕出現在向導的框架和框架是相當大 |
| PSH_RTLREADING | 設定標簽對話框標題欄文字的閱讀習慣(阿拉伯或希伯萊習慣) |
| PSH_STRETCHWATERMARK | 伸展在Microsoft Internet Explorer 4.0兼容Wizard97式向導水印 |
| PSH_USECALLBACK | 使用回調函數 |
| PSH_USEHBMHEADER | 版本5.80或更高版本。獲得從hbmHeader成員,而不是pszbmHeader成員頭位圖 |
| PSH_USEHBMWATERMARK | 版本5.80或更高版本。獲得從hbmWatermark成員水印圖而不是pszbmWatermark成員 |
| PSH_USEHICON | 使用的hIcon作為在屬性表對話框的標題欄小圖標 |
| PSH_USEHPLWATERMARK | 版本5.80或更高版本。采用HPALETTE結構所指向hplWatermark成員而不是默認的調色板畫出一個Wizard97向導的水印位圖和/或頭位圖 |
| PSH_USEICONID | 用作圖標的資源名稱pszIcon加載和使用中的屬性表對話框的標題欄小圖標 |
| PSH_USEPAGELANG | 版本5.80或更高版本。指定該屬性表語言將采取從第一頁的資源 |
| PSH_USEPSTARTPAGE | 采用pStartPage成員,而不是nStartPage成員在顯示屬性表的初始頁面 |
| PSH_WATERMARK | 版本5.80或更高版本。指定水印位圖將被用于一個網頁上有PSP_HIDEHEADER風格Wizard97向導 |
| PSH_WIZARD | 創建一個向導屬性表。當使用PSH_AEROWIZARD,還必須設置此標志 |
| PSH_WIZARD97 | 版本5.80或更高版本。創建一個Wizard97風格的屬性表,它支持在室內網頁的標頭和關于外部頁面左側位圖 |
| PSH_WIZARDCONTEXTHELP | 添加一個上下文敏感的幫助按鈕("?") |
| PSH_WIZARDHASFINISH | 始終顯示在向導的Finish按鈕 |
| PSH_WIZARD_LITE | 版本5.80或更高版本。使用Wizard-lite的風格。這種風格是相似的外觀PSH_WIZARD97,但它是實現更像PSH_WIZAR |
?
擴展閱讀:
1.CMFCPropertySheet Class?http://msdn.microsoft.com/en-us/library/bb981937.aspx
2.PROPSHEETHEADER Structure?http://msdn.microsoft.com/en-us/library/bb774546%28VS.85%29.aspx
3.Visual C++2010中CMFCPropertySheet的用法?http://blog.163.com/xu_chao2000/blog/static/277706102010430338431/
//自己寫的測試
Cdlg1 dlg1;
Cdlg2 dlg2;
Cdlg3 dlg3;
//CPropertySheet dlg(IDS_CDRSETTINGS,this/*AfxGetMainWnd()*/,0); //第三個參數表示默認初始顯示第幾個table頁
CMFCPropertySheet dlg(IDS_CDRSETTINGS,this/*AfxGetMainWnd()*/,0); //第三個參數表示默認初始顯示第幾個table頁?
dlg.m_psh.dwFlags = dlg.m_psh.dwFlags|PSH_NOAPPLYNOW;//去掉應用按鈕
dlg.m_psh.dwFlags = dlg.m_psh.dwFlags &~ PSH_HASHELP; //如果要去掉幫助按鈕,一定要每個屬性頁都去掉該按鈕
dlg1.m_psp.dwFlags&= ~PSP_HASHELP;
dlg2.m_psp.dwFlags&= ~PSP_HASHELP;
dlg3.m_psp.dwFlags&= ~PSP_HASHELP;
dlg.SetLook(CMFCPropertySheet::PropSheetLook::PropSheetLook_List);//樣式外觀設置,這里為列表型?
dlg.m_psh.pszCaption=_T("屬性表對話框標題"); //設置屬性表標題?
?
dlg.AddPage(&dlg1);
dlg.AddPage(&dlg2);
dlg.AddPage(&dlg3);
dlg.DoModal();
總結
以上是生活随笔為你收集整理的标签页式样的对话框参考的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GetClientRect()和GetW
- 下一篇: 歌星大奖赛C语言程序,C_歌星大奖赛