标签页式样的对话框参考

104 篇文章 5 订阅

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),名称分别如CPage1Cpage2
4.然后替换所有的CPropertyPage成为CMFCPropertyPage
5.在CMyPropertySheet.h头文件里添加两个属性页的头文件,然后声明两个属性页对象:

CPage1 m_Page1; 
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_AEROWIZARD 0x00004000
Version 6.00 and Windows Vista,透明风格
PSH_HASHELP显示“帮助”按钮
PSH_HEADER版本5.80和更高版本。头位图表示用于Wizard97向导
PSH_HEADERBITMAP 0x00004000
Version 6.00 and Windows Vista,该pszbmHeader成员指定一个在标题区域显示位图
PSH_MODELESS指定创建非模态标签对话框
PSH_NOAPPLYNOW“应用”按钮不可见
PSH_NOCONTEXTHELP版本5.80和更高版本,上下文敏感帮助按钮不可见
PSH_NOMARGIN 0x00004000
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();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值