精选文章 vc++学习笔记08---创建属性表单和向导

vc++学习笔记08---创建属性表单和向导

作者:dingqiangzhen9665 时间: 2021-02-07 02:39:59
dingqiangzhen9665 2021-02-07 02:39:59
【摘要】MFC里面的对控件的操作都是通过对响应的类的操作; 创建属性表单时:1首先创建实例对象对话框,然后创建该对话框的类,以备于在CPropertySheet中使用;2创建属性表对象,利用CPropertySheet实例对象,然后在该类中添加实例对象类的成员变量 
 public:
	CProp3 m_prop3;
	CProp2 m_prop2;
	CProp1 m_prop1;
	
 
 3,...

MFC里面的对控件的操作都是通过对响应的类的操作;
创建属性表单时:

1首先创建实例对象对话框,然后创建该对话框的类,以备于在CPropertySheet中使用;

2创建属性表对象,利用CPropertySheet实例对象,然后在该类中添加实例对象类的成员变量

public:
	CProp3 m_prop3;
	CProp2 m_prop2;
	CProp1 m_prop1;
	

3,利用AddPage()函数初始化实例对象;
CPropSheet::CPropSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
	:CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{
	AddPage(&m_prop1);
	AddPage(&m_prop2);
	AddPage(&m_prop3);
}

4在窗口响应按钮里面,,利用doModal()模态化;

创建向导
在 Domadol之前调用setWizardMode()就可以创建一个向导;
void CPropView::OnProperty() 
{
	CPropSheet PropSheet("属性表单程序");
	PropSheet.SetWizardMode();//建立向导;
建立向导必须设置属性页的按钮(下一步,完成...)
利用此函数,但是SetwizardButton()该函数必须在OnSetActive()中被调用;可以通过添加虚函数解决

BOOL CProp1::OnSetActive() 
{

	CPropSheet*p=(CPropSheet*)GetParent();
	p->SetWizardButtons(PSWIZB_NEXT);
	return CPropertyPage::OnSetActive();
}

然后响应“下一步”消息的函数,捕捉WM_WIZARDNEXT消息
LRESULT CProp1::OnWizardNext() 
{ UpdateData(TRUE);//更新选择的消息,ture,写入,false 写出
	if (-1==m_occupation) //m_occupation是单选控件的成员变量,表明其是否被选中,注意该控件的Group要选中,否则classwizard无反应

	{
		MessageBox("选择职业");
		return -1;
	}
	if (_T("")==m_workAddr)//w——workAddr是combox的成员变量
	{
		MessageBox("请选择工作地点");
		return -1;
	}
	return CPropertyPage::OnWizardNext();
}

初始化编译控件的响应

BOOL CProp1::OnInitDialog() 
{
	CPropertyPage::OnInitDialog(); ((CListBox*)GetDlgItem(IDC_ListBox1))->AddString("北京");//对ListBox添加项,利用Addstring函数
	((CListBox*)GetDlgItem(IDC_ListBox1))->AddString("天津");
	((CListBox*)GetDlgItem(IDC_ListBox1))->AddString("山东"); return TRUE;  
}


属性页2的响应:添加控件的成员变量,以区别是否被选中;

CProp2::CProp2() : CPropertyPage(CProp2::IDD)
{
	//{{AFX_DATA_INIT(CProp2)
	m_FootBall = FALSE;
	m_BasketBall = FALSE;
	m_ValletBall = FALSE;
	m_Swimming = FALSE;
	//}}AFX_DATA_INIT
}

响应函数
LRESULT CProp2::OnWizardNext() 
{
	UpdateData(TRUE);
	if (m_BasketBall|m_FootBall|m_Swimming|m_ValletBall)
	{ return CPropertyPage::OnWizardNext();
	}
	else
	{
		MessageBox("请选择爱好!");
		return -1;
	}
}

属性页3
对combolist的控件添加信息,捕捉WM_INITDIALOG消息

BOOL CProp3::OnInitDialog() 
{
	CPropertyPage::OnInitDialog(); ((CComboBox*)GetDlgItem(IDC_COMBO3))->AddString("1000-2000");
	((CComboBox*)GetDlgItem(IDC_COMBO3))->AddString("2000-3000");
	((CComboBox*)GetDlgItem(IDC_COMBO3))->AddString("3000-5000");
	((CComboBox*)GetDlgItem(IDC_COMBO3))->AddString("5000-8000");
	((CComboBox*)GetDlgItem(IDC_COMBO3))->AddString("10000以上");
	((CComboBox*)GetDlgItem(IDC_COMBO3))->SetCurSel(0);
	return TRUE; }
响应“完成”的函数
BOOL CProp3::OnWizardFinish() 
{
	int index; //定义一个索引,保存控件combolist选择的条目
	index=((CComboBox*)GetDlgItem(IDC_COMBO3))->GetCurSel();//利用GetCurSel(0保存索引;
	((CComboBox*)GetDlgItem(IDC_COMBO3))->GetLBText(index,m_strSalary);//利用GetLBText()获得当前索引条目的内容
	return CPropertyPage::OnWizardFinish();
}


==================================================================================================================================
将客户选择好的信息保存
void CPropView::OnProperty() 
{
	CPropSheet PropSheet("属性表单程序");
	PropSheet.SetWizardMode();
	if (ID_WIZFINISH==PropSheet.DoModal())
	{
		m_iOccupition=PropSheet.m_prop1.m_occupation;
		m_strAddr=PropSheet.m_prop1.m_workAddr;
		m_strSalary=PropSheet.m_prop3.m_strSalary;
		m_strLike[0]= PropSheet.m_prop2.m_FootBall;
		m_strLike[1]=PropSheet.m_prop2.m_BasketBall;
		m_strLike[2]=PropSheet.m_prop2.m_ValletBall;
		m_strLike[3]=PropSheet.m_prop2.m_Swimming;
		Invalidate();//引起当前重画
	}
	
}
将客户选择的信息输出到界面上:
void CPropView::OnDraw(CDC* pDC)
{
	CPropDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	CFont font;
	font.CreatePointFont(300,"华文行楷");//创建字体
	CFont *poldFont;
	poldFont=pDC->SelectObject(&font);
	CString strtmp;//缓存变量
	strtmp="你的职业: ";
		switch (m_iOccupition)
		{ case 0: strtmp+="程序员"; break; case 1: strtmp+="系统工程师"; break; case 2: strtmp+="ITLeader"; break; default: break;
		}
	pDC->TextOut(0,0,strtmp);
	strtmp="你的工作地点: ";
	strtmp+=m_strAddr;
	TEXTMETRIC tm;//获得字体高度,以用于显示
	pDC->GetTextMetrics(&tm);
	pDC->TextOut(0,tm.tmHeight,strtmp);
	strtmp="你的兴趣爱好: ";
	if (m_strLike[0])
	{
		strtmp+="足球";
	}
	if (m_strLike[1])
	{
		strtmp+="篮球";
	}
	if (m_strLike[2])
	{
		strtmp+="排球";
	}
	if (m_strLike[3])
	{
		strtmp+="游泳";
	}
	pDC->TextOut(0,tm.tmHeight*2,strtmp);
	strtmp="你的薪资水平: ";
	strtmp+=m_strSalary;
	pDC->TextOut(0,tm.tmHeight*3,strtmp);
	pDC->SelectObject(poldFont);
}





转载于:https://www.cnblogs.com/HuaiNianCiSheng/archive/2012/08/24/5303266.html

勿删,copyright占位
您找到想要的结果了吗?
vc++学习笔记08---创建属性表单和向导
提交成功!非常感谢您的反馈,我们会继续努力做到更好
分享文章到微博
分享文章到朋友圈

上一篇:Java的秘密 使用全屏幕模式

下一篇:MySQL5.x处理中文全解

您可能感兴趣

  • 树莓派4B萌新学习笔记+问题记录(二)

    nexmon克隆与配置中的报错与解决方式 error: RPC failed; curl 18 transfer closed with outstanding read data remaining fatal: ...

  • JVM系列---对象的创建,定位及访问

    Java对象创建底层原理 1.虚拟机遇到一条new指令时,首先检查这个对应的类能否在常量池中定位到一个类的符号引用; 2.判断这个类是否已经被加载,解析,初始化 3.为这个新生对象在java堆中分配内存空间,其中分配内存空间的方式有两种         指针碰撞:分配内存空间包括开辟一块内存和移动指针两个步骤;非原子步骤可能出现并发问题,Ja...

  • 4.Spring创建对象

    Spring 创建对象的三种方式 通过构造方法创建 无参构造创建:默认情况.有参构造创建:需要明确配置 需要在类中提供有参构造方法在 applicationContext.xml 中设置调用哪个构造方...

  • 新手笔记——Java swing 创建简单求和工具-作业题-框架构建

    Java swing 创建简单求和工具-作业题-框架构建   作业的题目是这样子的   一开始看到这个东西的时候我的想法就是用swing中的gridlayout来完成,但是中途我发现书上写着可以使用嵌...

  • SQL Server 警告: 已创建表 XXX,但其最大行大小(8926)超过了每行的最大字节数(8060)...

    在查询分析器里创建数据库,出现警告:警告: 已创建表 XXX,但其最大行大小(8926)超过了每行的最大字节数(8060)。如果结果行长度超过 8060 字节,则此表中行的 INSERT 或 UPDATE 将失败。 一个表每行大小超过了的最大字节8060,建议使用将你表中占用字节数较多的 char (nvchar)或者varcha...

  • 易语言学习笔记——基础篇

    易语言学习笔记20180710 一、 易语言的数据类型可以分为基本数据类型和特殊数据类型 1.     其中基本数据类型分为: ①   数值型 ②   逻辑型 ③   日期时间型 ④   文本型 ⑤   字节集型 ⑥   子程序指针型 2.     然后基本数据类型中的数值类型有包含了: ①   字节型 ②   短整数型 ③   整数型 ④   长...

  • jquery 属性 text()

    text() 从匹配元素集合中得到每个元素的文本信息,并将其合并在一起返回一个String。不能对input元素使用。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/lo...

  • springcloud微服务学习笔记(二十八):OpenFeign超时控制

    springcloud微服务学习笔记目录: springcloud微服务学习笔记 1.设置超时出错情况 1.1服务提供方8001故意写暂停程序 @GetMapping("/payment/feign/ti...

CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。
vc++学习笔记08---创建属性表单和向导介绍:华为云为您免费提供vc++学习笔记08---创建属性表单和向导在博客、论坛、帮助中心等栏目的相关文章,同时还可以通过 站内搜索 查询更多vc++学习笔记08---创建属性表单和向导的相关内容。| 移动地址: vc++学习笔记08---创建属性表单和向导 | 写博客