Visual C++2010中CMFCPropertySheet的用法
2014-11-12 16:29
337 查看
查了一晚上的资料,终于做出了一个标签页式样的对话框,操作系统XP sp3,环境:Visual C++2010.哈哈,怎么做出来的呢
1、新建一个MFC的对话框工程
2、加入两个对话框资源,资源类型是IDD_PROPPAGE,ID为IDD_PROPPAGE1和IDD_PROPPAGE2
3、增加两个类CPage1和Cpage2,基类是CPropertyPage,和刚才我们的对话框资源关联起来。这里基类为什么不选择CMFCPropertyPage呢,因为IDE对CMFCPropertyPage类的支持不是很好,在添加类的时候基类选CMFCPropertyPage的话无法关联对话框。。。。
4、查找所有CPropertyPage,替换为CMFCPropertyPage,这样,我们自己的两个对话框类就是从CMFCPropertyPage继承来的了。
5、新建一个类CMySheet,基类是CMFCPropertySheet,增加两个成员变量,分别是CPage1和Cpage2的对象
6、增加CMySheet类的带参构造函数为CMySheet (LPCTSTR pszCaption, CWnd* pParentWnd = NULL);为什么呢?因为类向导生成构造函数是无参的,而我们需要第一个参数pszCaption来改变属性表单对话框的标题,因此这里要修改一下。构造函数定义如下:
CMySheetCMySheet(LPCTSTR pszCaption, CWnd* pParentWnd ):CMFCPropertySheet(pszCaption,pParentWnd )
{
//m_psh该结构体成员变量中保存了propertysheet的外观样式,一定要在domodal之前调用
m_psh.dwFlags &=~PSH_HASHELP;
m_psh.dwFlags|=PSH_NOAPPLYNOW;
//如果要去掉帮助按钮,一定要每个属性页都去掉该按钮
m_Page1.m_psp.dwFlags&= ~PSP_HASHELP;
m_Page2.m_psp.dwFlags&= ~PSP_HASHELP;
BOOL b32BitIcons = TRUE;
if (afxGlobalData.m_nBitsPerPixel < 16)
{
b32BitIcons = FALSE;
}
);
//在这里设置属性表单的外观为PropSheetLook_OutlookBar
SetLook(CMFCPropertySheet::PropSheetLook_OutlookBar );
//如果设置outlook外观,则必须提供图标资源
SetIconsList(b32BitIcons ? IDB_ICONS32 : IDB_ICONS, 32 );
//将我们设计好的属性页加进属性表单中
AddPage(&m_Page2);
AddPage(&m_Page1);
}
7、如果我们要直接运行该属性表单对话框,则需要修改窗口类的InitInstance函数,去掉MFC向导产生的对话框的调用,然后添加以下代码:
CMySheet ps1(L"HELLO ");//对话框标题
m_pMainWnd = &ps1;
INT_PTR nResponse=ps1.DoModal();
如果要让你的对话框显的更漂亮,可以增加以下代码
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
8、注意:MFC向导添加的CMySheetCMySheet中,没有重载OnInitDialog();我们必须手动添加,从类向导中,选择虚函数,找到OnInitDialog,添加,同样,为我们的属性页类也添加OnInitDialog函数
1、新建一个MFC的对话框工程
2、加入两个对话框资源,资源类型是IDD_PROPPAGE,ID为IDD_PROPPAGE1和IDD_PROPPAGE2
3、增加两个类CPage1和Cpage2,基类是CPropertyPage,和刚才我们的对话框资源关联起来。这里基类为什么不选择CMFCPropertyPage呢,因为IDE对CMFCPropertyPage类的支持不是很好,在添加类的时候基类选CMFCPropertyPage的话无法关联对话框。。。。
4、查找所有CPropertyPage,替换为CMFCPropertyPage,这样,我们自己的两个对话框类就是从CMFCPropertyPage继承来的了。
5、新建一个类CMySheet,基类是CMFCPropertySheet,增加两个成员变量,分别是CPage1和Cpage2的对象
6、增加CMySheet类的带参构造函数为CMySheet (LPCTSTR pszCaption, CWnd* pParentWnd = NULL);为什么呢?因为类向导生成构造函数是无参的,而我们需要第一个参数pszCaption来改变属性表单对话框的标题,因此这里要修改一下。构造函数定义如下:
CMySheetCMySheet(LPCTSTR pszCaption, CWnd* pParentWnd ):CMFCPropertySheet(pszCaption,pParentWnd )
{
//m_psh该结构体成员变量中保存了propertysheet的外观样式,一定要在domodal之前调用
m_psh.dwFlags &=~PSH_HASHELP;
m_psh.dwFlags|=PSH_NOAPPLYNOW;
//如果要去掉帮助按钮,一定要每个属性页都去掉该按钮
m_Page1.m_psp.dwFlags&= ~PSP_HASHELP;
m_Page2.m_psp.dwFlags&= ~PSP_HASHELP;
BOOL b32BitIcons = TRUE;
if (afxGlobalData.m_nBitsPerPixel < 16)
{
b32BitIcons = FALSE;
}
);
//在这里设置属性表单的外观为PropSheetLook_OutlookBar
SetLook(CMFCPropertySheet::PropSheetLook_OutlookBar );
//如果设置outlook外观,则必须提供图标资源
SetIconsList(b32BitIcons ? IDB_ICONS32 : IDB_ICONS, 32 );
//将我们设计好的属性页加进属性表单中
AddPage(&m_Page2);
AddPage(&m_Page1);
}
7、如果我们要直接运行该属性表单对话框,则需要修改窗口类的InitInstance函数,去掉MFC向导产生的对话框的调用,然后添加以下代码:
CMySheet ps1(L"HELLO ");//对话框标题
m_pMainWnd = &ps1;
INT_PTR nResponse=ps1.DoModal();
如果要让你的对话框显的更漂亮,可以增加以下代码
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
8、注意:MFC向导添加的CMySheetCMySheet中,没有重载OnInitDialog();我们必须手动添加,从类向导中,选择虚函数,找到OnInitDialog,添加,同样,为我们的属性页类也添加OnInitDialog函数
相关文章推荐
- CMFCPropertySheet和CMFCPropertyPage增强用法
- CPropertySheet的基本用法
- CMFCPropertyGridProperty用法
- CMFCPropertySheet的使用及PROPSHEETHEADER结构体介绍
- CMFCPropertySheet的使用及PROPSHEETHEADER结构体介绍
- Android 属性动画Interpolator和ViewPropertyAnimator的用法
- 使用月历控件CMonthCalCtrl让VC2010的CMFCPropertyGridProperty支持日期选择
- 深入浅出 CPropertySheet
- java的property配置文件的用法
- Struts中的<s:property value = " name">用法
- wtl CPropertySheet 去掉 “应用”按钮
- oninput,onpropertychange,onchange的用法和区别
- Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法
- CPropertySheet和CPropertyPage中数据交换时的两种处理手段
- 【Spring配置】org.springframework.beans.factory.config.PropertyPlaceholderConfigurer 用法
- struts2 s:property 用法
- <s:property>的用法(jsp获取action中的值或者方法)
- 总结oninput、onchange与onpropertychange事件的用法和区别
- Spreadsheet电子表格控件安装及用法总结
- CPropertySheet标签页 实现各个CPropertyPage页面之间的切换