博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
再探MFC(二)多标签对话框
阅读量:4120 次
发布时间:2019-05-25

本文共 2042 字,大约阅读时间需要 6 分钟。

包含控件页的标签式对话框,用户可通过单击鼠标在其间切换.

  • 属性表
  • Tab控件
本篇我们只介绍使用属性表实现多标签页对话框.这也是本系列文章的风格,即为了尽可能的简单化,只提供必要的,必要的只提供最通用的.

 

属性表

 

属性表的功能都合理地封装在一对MFC,CPropertySheetCPropertyPage.CPropertySheet代表属性表自身,是从CWnd派生出来的.CPropertyPage代表属性表的页,是从CDialog派生出来的.

 

和对话框一样,属性表可以是模式和无模式的.CPropertySheet::DoModal创建模式属性表,CPropertySheet::Create创建无模式属性表.

 

创建模式属性表的步骤如下:

  1. 针对属性表的每一页创建一个对话框模板,定义页的内容和特性.将对话框标题设置成您希望在属性表页上方标签中显现的标题.
  1. 针对属性表的每一页由CPropertyPage派生出一个类似对话框的类.其中包含通过DDXDDV与页面中控件相联系的公用数据成员.
  1. CPropertySheet派生出一个属性表类.将该属性表类和第2步中得到的属性表页类实例化.利用CPropertySheet::AddPage将各页按期望中的显示顺序添加到属性表中.
  1. 调用属性表的DoModal函数将属性表显示在屏幕上.

 

简单示例代码 

 

 

#pragma once

#include"resource.h"

 

// CFirstPage 对话框

 

class CFirstPage :public CPropertyPage

{

DECLARE_DYNAMIC(CFirstPage)

 

public:

CFirstPage();

virtual~CFirstPage();

 

// 对话框数据

enum{ IDD = IDD_PROPPAGE_FIRST };

 

protected:

virtualvoid DoDataExchange(CDataExchange* pDX);   // DDX/DDV 支持

 

DECLARE_MESSAGE_MAP()

};

 

 

// FirstPage.cpp :实现文件

//

 

#include"stdafx.h"

#include"MFCExplore.h"

#include"FirstPage.h"

#include"afxdialogex.h"

 

 

// CFirstPage 对话框

 

IMPLEMENT_DYNAMIC(CFirstPage,CPropertyPage)

 

CFirstPage::CFirstPage()

:CPropertyPage(CFirstPage::IDD)

{

 

}

 

CFirstPage::~CFirstPage()

{

}

 

voidCFirstPage::DoDataExchange(CDataExchange* pDX)

{

CPropertyPage::DoDataExchange(pDX);

}

 

 

BEGIN_MESSAGE_MAP(CFirstPage,CPropertyPage)

END_MESSAGE_MAP()

 

 

// CFirstPage 消息处理程序

 

CSecondPage类似于CFirstPage,.

 

#pragma once

#include"afxdlgs.h"

#include"FirstPage.h"

#include"SecondPage.h"

classCMyPropertySheet :

publicCPropertySheet

{

public:

CMyPropertySheet(LPCTSTRpszCaption, CWnd* pParentWnd = NULL);

~CMyPropertySheet();

//第一页属性页

CFirstPagem_firstPage;

//第二页属性页

CSecondPagem_secondPage;

};

 

#include"stdafx.h"

#include"MyPropertySheet.h"

 

 

CMyPropertySheet::CMyPropertySheet(LPCTSTRpszCaption, CWnd* pParentWnd)

:CPropertySheet(pszCaption,pParentWnd, 0)

{

AddPage(&m_firstPage);

AddPage(&m_secondPage);

}

 

 

CMyPropertySheet::~CMyPropertySheet()

{

}

 

 

CxxxApp::InitInstance()中创建模态属性表.

CMyPropertySheetps(_T("Properties"));

m_pMainWnd =&ps;

INT_PTR nResponse =ps.DoModal();

 

参考自MFC Windows程序设计 8.4属性表.

你可能感兴趣的文章
Linux设备模型(总线、设备、驱动程序和类)之四:class_register
查看>>
git中文安装教程
查看>>
虚拟机 CentOS7/RedHat7/OracleLinux7 配置静态IP地址 Ping 物理机和互联网
查看>>
弱类型、强类型、动态类型、静态类型语言的区别是什么?
查看>>
Struts2技术内幕图书 转载
查看>>
Java异常分类
查看>>
项目中的jackson与json-lib使用比较
查看>>
Jackson Tree Model Example
查看>>
j2ee-验证码
查看>>
日志框架logj的使用
查看>>
js-高德地图规划路线
查看>>
常用js收集
查看>>
mydata97的日期控件
查看>>
如何防止sql注入
查看>>
maven多工程构建与打包
查看>>
springmvc传值
查看>>
Java 集合学习一 HashSet
查看>>
在Eclipse中查看Android源码
查看>>
Android使用webservice客户端实例
查看>>
层在页面中的定位
查看>>