孙鑫vc++ 8 对话框(2) 属性表单和向导的创建
来源:互联网 发布:老域名交易 编辑:程序博客网 时间:2024/05/18 12:03
一、基础知识
1.实现属性表和标签页的类
(1)CPropertySheet类(表示属性表)和CPropertyPage类(表示某一标签页)
2.实现的步骤
(1)实现一个从CPropertySheet类派生出来的类
(2)实现几个从CPropertyPage类派生出来的类,和对应的PROPAGE资源相关联
(3)在CPropertySheet类中添加CPropertyPage类的对象
(4)在CPropertySheet类的构造函数中调用AddPage()方法来添加标签页的对象
(5)实现一个CPropertySheet类对象,和标准对话框的使用方式相同(构造函数的参数需要注意)
(6)使用DoModal方法,即可弹出CPropertySheet类的对话框
二、代码分析
1.继承自CPropertySheet的类
#pragma once#include "Prop1.h"#include "Prop2.h"#include "Prop3.h"// CPropSheetclass CPropSheet : public CPropertySheet{DECLARE_DYNAMIC(CPropSheet)public:CPropSheet(UINT nIDCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);CPropSheet(LPCTSTR pszCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);virtual ~CPropSheet();protected:DECLARE_MESSAGE_MAP()public:CProp1 m_Prop1;CProp2 m_Prop2;CProp3 m_Prop3;};
// PropSheet.cpp : implementation file//#include "stdafx.h"#include "Prop.h"#include "PropSheet.h"// CPropSheetIMPLEMENT_DYNAMIC(CPropSheet, CPropertySheet)CPropSheet::CPropSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage):CPropertySheet(nIDCaption, pParentWnd, iSelectPage){}CPropSheet::CPropSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage):CPropertySheet(pszCaption, pParentWnd, iSelectPage){AddPage(&m_Prop1);AddPage(&m_Prop2);AddPage(&m_Prop3);}CPropSheet::~CPropSheet(){}BEGIN_MESSAGE_MAP(CPropSheet, CPropertySheet)END_MESSAGE_MAP()// CPropSheet message handlers
2.继承自CProptyPage的类
#pragma once// CProp1 dialogclass CProp1 : public CPropertyPage{DECLARE_DYNAMIC(CProp1)public:CProp1();virtual ~CProp1();// Dialog Dataenum { IDD = IDD_Prop1 };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV supportDECLARE_MESSAGE_MAP()public:virtual BOOL OnSetActive();int m_Occupation;virtual LRESULT OnWizardNext();virtual BOOL OnInitDialog();CString m_strWorkAddr;};
// Prop1.cpp : implementation file//#include "stdafx.h"#include "Prop.h"#include "Prop1.h"#include "PropSheet.h"// CProp1 dialogIMPLEMENT_DYNAMIC(CProp1, CPropertyPage)CProp1::CProp1() : CPropertyPage(CProp1::IDD) , m_Occupation(-1) , m_strWorkAddr(_T("")){}CProp1::~CProp1(){}void CProp1::DoDataExchange(CDataExchange* pDX){ CPropertyPage::DoDataExchange(pDX); DDX_Radio(pDX, IDC_RADIO1, m_Occupation); DDX_LBString(pDX, IDC_Lst_WkAddr, m_strWorkAddr);}BEGIN_MESSAGE_MAP(CProp1, CPropertyPage)END_MESSAGE_MAP()// CProp1 message handlersBOOL CProp1::OnSetActive(){ // TODO: Add your specialized code here and/or call the base class ((CPropSheet*)GetParent())->SetWizardButtons(PSWIZB_NEXT); return CPropertyPage::OnSetActive();}LRESULT CProp1::OnWizardNext(){ // TODO: Add your specialized code here and/or call the base class UpdateData(); if (-1 == m_Occupation) { MessageBox(_T("请选择职业"),_T("提示"),MB_OK); return -1; } if (_T("") == m_strWorkAddr) { MessageBox(_T("请选择工作地点"),_T("提示"),MB_OK); return -1; } return CPropertyPage::OnWizardNext();}BOOL CProp1::OnInitDialog(){ CPropertyPage::OnInitDialog(); // TODO: Add extra initialization here ((CListBox*)GetDlgItem(IDC_Lst_WkAddr))->AddString(_T("北京")); ((CListBox*)GetDlgItem(IDC_Lst_WkAddr))->AddString(_T("上海")); ((CListBox*)GetDlgItem(IDC_Lst_WkAddr))->AddString(_T("深圳")); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE}
3.属性表和标签页的使用
void CPropView::OnPropsheet(){// TODO: Add your command handler code hereCPropSheet dlgSheet(_T("属性表单"));dlgSheet.SetWizardMode();if (ID_WIZFINISH == dlgSheet.DoModal()){m_nOccupation = dlgSheet.m_Prop1.m_Occupation;m_strWorkAddr = dlgSheet.m_Prop1.m_strWorkAddr;bLike[0] = dlgSheet.m_Prop2.m_bFootball;bLike[1] = dlgSheet.m_Prop2.m_bBasketball;bLike[2] = dlgSheet.m_Prop2.m_bVollyball;bLike[3] = dlgSheet.m_Prop2.m_bSwim;m_strSalary = dlgSheet.m_Prop3.m_strSalary;Invalidate();}}
void CPropView::OnDraw(CDC* pDC){CPropDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;// TODO: 在此处为本机数据添加绘制代码CFont font;font.CreatePointFont(300,_T("华文行楷"));CFont* pOldFont;pOldFont = pDC->SelectObject(&font);CString strTemp;strTemp = _T("你的职业是:");switch(m_nOccupation){case 0:strTemp += _T("程序员");break;case 1:strTemp += _T("架构师");break;case 2:strTemp += _T("项目经理");break;default:break;}pDC->TextOut(0,0,strTemp);strTemp = _T("你的工作地点是:");strTemp += m_strWorkAddr;TEXTMETRIC tm;pDC->GetTextMetrics(&tm);pDC->TextOut(0,tm.tmHeight,strTemp);strTemp = _T("你的兴趣爱好是:");if (bLike[0]){strTemp += _T("足球 ");}if (bLike[1]){strTemp += _T("篮球 ");}if (bLike[2]){strTemp += _T("排球 ");}if (bLike[0]){strTemp += _T("游泳 ");}pDC->TextOut(0,tm.tmHeight*2,strTemp);strTemp = _T("你的薪资是:");strTemp += m_strSalary;pDC->TextOut(0,tm.tmHeight*3,strTemp);pDC->SelectObject(pOldFont);}
三、需要掌握的函数
(1)CPropSheet的构造函数(2)AddPage(3)OnSetActive(4)OnWizardNext(5)SetWizardMode(6)CreatePointFont(7)SelectObject(8)TextOut(9)TEXTMETRIC结构体(10)GetTextMetrics
- 孙鑫vc++ 8 对话框(2) 属性表单和向导的创建
- VC中属性表单和向导的创建
- vc创建属性表单向导
- 属性表单和向导的创建
- vc++学习笔记08---创建属性表单和向导
- MFC中属性表单和向导对话框的使用
- 创建属性页(CpropertyPage)对话框和向导对话框!
- MFC属性页和向导对话框的创建
- 鸡啄米vc++2010系类13(向导对话框的创建)
- 向导模式对话框的创建和显示
- 孙鑫VC学习(第8课--对话框的编程(逃跑按钮,属性表单,属性页))
- VC++控件之创建向导对话框
- 鸡啄米vc++2010系列5( 对话框:创建对话框模板和修改对话框属性)
- 属性页表单和向导页
- VC:如何创建属性对话框
- VC++中属性页(向导)的实现
- 属性表单与向导
- vc学习历程(9)--向导的创建
- HTML4标签的默认样式列表
- Java中堆内存与栈内存分配浅析
- c++ biset详解
- MySQL DELETE语句和TRUNCATE TABLE语句的区别
- linux援救模式:linux rescue使用详细图解
- 孙鑫vc++ 8 对话框(2) 属性表单和向导的创建
- 解决IE6图片缩小后出现锯齿的问题
- KMP
- SVG脚本编程的一些技巧
- linux 在 rescue 模式下修复 MBR(转)
- 222
- javascript 屏蔽页面 刷新
- Android开发之-Activity
- USACO 3.4 American Heritage