zoukankan      html  css  js  c++  java
  • vc++学习笔记08创建属性表单和向导

    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);
    }




  • 相关阅读:
    Linux下文件的三种时间标记:访问时间、修改时间、状态改动时间 (转载)
    linux下创建文件的文件权限问题
    linux下文件特殊权限设置位S和沾附位T(转载)
    c 不同类型的指针
    linux exit 和 _exit的区别
    (转)linux下错误的捕获:errno和strerror的使用,以及perror和strerror的区别
    (总结)Linux下su与su -命令的本质(转)
    linux切换shell
    mysql安装两个版本
    远程连接数据库 出现 Client does not support authentication protocol requested by server的解决方法
  • 原文地址:https://www.cnblogs.com/HuaiNianCiSheng/p/3074728.html
Copyright © 2011-2022 走看看