当前位置: 首页 > news >正文

MFC 属性页 总结

总结一下,也希望给用得到的人带来帮助。


1.打开资源视图(ResourceView)的对话框目录(Dialog),在“Dialog”上右键、选择insert,在弹出的对话框中选择Dialog下的IDD_PROPPAGE_LARGE、点击new,这样我们就创建了一个新的属性页。按照此方法我们再创建两个属性页。


2.为属性页添加相应的类,添加类,继承CPropertyPage,名称分别为MyPage1,MyPage2,MyPage3


3.添加一个类,继承CPropertySheet,名称为MyProSheet


4.为MyProSheet类添加三个成员:


MyPage1 m_page1;
MyPage2 m_page2;
MyPage3 m_page3;




然后在MyProSheet的构造函数中  添加三个页:


MyProSheet::MyProSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
this->AddPage(&m_prop1);this->AddPage(&m_prop2);this->AddPage(&m_prop3);
}



然后重写每个Page的OnSetActive函数:


virtual BOOL ProPage1::OnSetActive();

BOOL ProPage1::OnSetActive(){
((CPropertySheet*)this->GetParent())->SetWizardButtons(PSWIZB_NEXT);
return true;
}



完毕。
相关代码:


Page1:


#pragma once


// ProPage1 dialog


class ProPage1 : public CPropertyPage
{
DECLARE_DYNAMIC(ProPage1)


public:
ProPage1();
virtual ~ProPage1();
virtual BOOL ProPage1::OnSetActive();
// Dialog Data
enum { IDD = IDD_PROPPAGE_LARGE };


protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support


DECLARE_MESSAGE_MAP()
};






#include "stdafx.h"
#include "MfcPropTest.h"
#include "ProPage1.h"


// ProPage1 dialog


IMPLEMENT_DYNAMIC(ProPage1, CPropertyPage)


ProPage1::ProPage1()
: CPropertyPage(ProPage1::IDD)
{


}


BOOL ProPage1::OnSetActive(){
((CPropertySheet*)this->GetParent())->SetWizardButtons(PSWIZB_NEXT);
return true;
}


ProPage1::~ProPage1()
{
}


void ProPage1::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
}




BEGIN_MESSAGE_MAP(ProPage1, CPropertyPage)
END_MESSAGE_MAP()




// ProPage1 message handlers






Page2




#pragma once




// ProPage2 dialog


class ProPage2 : public CPropertyPage
{
DECLARE_DYNAMIC(ProPage2)


public:
ProPage2();
virtual ~ProPage2();
virtual BOOL ProPage2::OnSetActive();


// Dialog Data
enum { IDD = IDD_PROPPAGE_LARGE1 };


protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support


DECLARE_MESSAGE_MAP()
};




#include "stdafx.h"
#include "MfcPropTest.h"
#include "ProPage2.h"






// ProPage2 dialog


IMPLEMENT_DYNAMIC(ProPage2, CPropertyPage)


ProPage2::ProPage2()
: CPropertyPage(ProPage2::IDD)
{


}


BOOL ProPage2::OnSetActive(){
((CPropertySheet*)this->GetParent())->SetWizardButtons(PSWIZB_NEXT|PSWIZB_BACK);
return true;
}


ProPage2::~ProPage2()
{
}


void ProPage2::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
}




BEGIN_MESSAGE_MAP(ProPage2, CPropertyPage)
END_MESSAGE_MAP()




// ProPage2 message handlers






Page3:




#pragma once




// ProPage3 dialog


class ProPage3 : public CPropertyPage
{
DECLARE_DYNAMIC(ProPage3)


public:
ProPage3();
virtual ~ProPage3();
virtual BOOL ProPage3::OnSetActive();


// Dialog Data
enum { IDD = IDD_PROPPAGE_LARGE2 };


protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support


DECLARE_MESSAGE_MAP()
};




#include "stdafx.h"
#include "MfcPropTest.h"
#include "ProPage3.h"




// ProPage3 dialog


IMPLEMENT_DYNAMIC(ProPage3, CPropertyPage)


ProPage3::ProPage3()
: CPropertyPage(ProPage3::IDD)
{


}


ProPage3::~ProPage3()
{
}


BOOL ProPage3::OnSetActive(){
((CPropertySheet*)this->GetParent())->SetWizardButtons(PSWIZB_BACK);
return true;
}


void ProPage3::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
}




BEGIN_MESSAGE_MAP(ProPage3, CPropertyPage)
END_MESSAGE_MAP()




// ProPage3 message handlers






ProSheet:

#pragma once
#include "ProPage1.h"
#include "ProPage2.h"
#include "ProPage3.h"




// MyProSheet


class MyProSheet : public CPropertySheet
{
DECLARE_DYNAMIC(MyProSheet)


public:
MyProSheet(UINT nIDCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);
MyProSheet(LPCTSTR pszCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);
virtual ~MyProSheet();
members
ProPage1 m_prop1;
ProPage2 m_prop2;
ProPage3 m_prop3;
protected:
DECLARE_MESSAGE_MAP()
};




// MyProSheet.cpp : implementation file
//


#include "stdafx.h"
#include "MfcPropTest.h"
#include "MyProSheet.h"




// MyProSheet


IMPLEMENT_DYNAMIC(MyProSheet, CPropertySheet)


MyProSheet::MyProSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{


}


MyProSheet::MyProSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
this->AddPage(&m_prop1);this->AddPage(&m_prop2);this->AddPage(&m_prop3);


}


MyProSheet::~MyProSheet()
{
}




BEGIN_MESSAGE_MAP(MyProSheet, CPropertySheet)
END_MESSAGE_MAP()




// MyProSheet message handlers


相关文章:

  • MFC CStdioFile简单用法
  • MFC 表格控件的使用
  • [Web开发] xenocode 推出浏览器沙盘,无需安装直接运行各种浏览器
  • wireShark 的使用 网络抓包
  • MFC TRACE宏的使用
  • 关系数据库的死期到了?
  • vbScript 中on error resume next使用心得
  • C# 设计模式之 工厂模式
  • Linux/Unix环境下的Make和Makefile详解
  • C# 设计模式之 策略模式 示例
  • C# 设计模式之桥接模式
  • 外界与Flex Application的交互处理(之嵌入html)
  • C# 设计模式之 模板方法
  • Google世界第一机 T-Mobile G1全程评测
  • C# 设计模式之 建造者模式
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • Docker 笔记(2):Dockerfile
  • If…else
  • Javascript编码规范
  • js ES6 求数组的交集,并集,还有差集
  • Making An Indicator With Pure CSS
  • Mysql数据库的条件查询语句
  • Python 反序列化安全问题(二)
  • python学习笔记 - ThreadLocal
  • - 概述 - 《设计模式(极简c++版)》
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 基于遗传算法的优化问题求解
  • 如何学习JavaEE,项目又该如何做?
  • 写给高年级小学生看的《Bash 指南》
  • HanLP分词命名实体提取详解
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​比特币大跌的 2 个原因
  • #etcd#安装时出错
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (13)Hive调优——动态分区导致的小文件问题
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (day6) 319. 灯泡开关
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (生成器)yield与(迭代器)generator
  • (十一)图像的罗伯特梯度锐化
  • (一)RocketMQ初步认识
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)EXC_BREAKPOINT僵尸错误
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .sdf和.msp文件读取
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?