void CBtn::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default ShowWindow(SW_HIDE); m_pBtn->ShowWindow(SW_SHOW); CButton::OnMouseMove(nFlags, point); } BOOL 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(TRUE); if(m_occupation==-1) { MessageBox("请选择你的职业"); return -1; } if(m_workAddr=="") { MessageBox("请选择你的工作地点"); return -1; } return CPropertyPage::OnWizardNext(); } BOOL CProp1::OnInitDialog() { CPropertyPage::OnInitDialog(); // TODO: Add extra initialization here ( (CListBox*)GetDlgItem(IDC_LIST1) )->AddString("北京"); ( (CListBox*)GetDlgItem(IDC_LIST1) )->AddString("天津"); ( (CListBox*)GetDlgItem(IDC_LIST1) )->AddString("上海"); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } CPropSheet::CPropSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(nIDCaption, pParentWnd, iSelectPage) { AddPage(&m_prop1); AddPage(&m_prop2); AddPage(&m_prop3); } CPropSheet::CPropSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(pszCaption, pParentWnd, iSelectPage) { AddPage(&m_prop1); AddPage(&m_prop2); AddPage(&m_prop3); } void CChildView::OnPropsheet() { // TODO: Add your command handler code here CPropSheet propSheet("属性表单"); propSheet.SetWizardMode(); if(propSheet.DoModal()==ID_WIZFINISH) { m_iOccupation=propSheet.m_prop1.m_occupation; m_strWorkAddr=propSheet.m_prop1.m_workAddr; m_bLike[0]=propSheet.m_prop2.m_football; m_bLike[1]=propSheet.m_prop2.m_basketball; m_bLike[2]=propSheet.m_prop2.m_valeyball; m_bLike[3]=propSheet.m_prop2.m_swim; Invalidate(); } } 创建两个对话框上的按钮,给按钮关联按钮类,按钮类继承自CBtton类, 为了能够给按钮写消息响应函数! 通过ShowWindow()函数完成按钮的消失与显示. 属性表类对话框继承自CPropertyPage 类, 如果是制作一个向导,那么需要重写虚函数OnSetActive(),通过GetParent()获取CPropertySheet 类指针,在属性页面被激活显示前,调用SetWizardButtons()函数设置其按钮. 通过重写CPropertyPage 类的OnWizardNext() 函数,可以在进入下一页面之前判断用户选择,返回-1表示不进入下一页面. 在初始化对话框时,给列表框添加选项,通过向导可以使选择与一个CString关联起来. 复选框通过添加一系列BOOL变量进行关联,单选按钮通过设置group属性,并且关联一个int变量表示当前选择. 属性列表类继承自:CPropertySheet , 在构造函数内添加各个属性页,各个属性页都作为一个成员变量. 在View类内相应菜单消息,弹出属性列表. 在相应函数内: 这是向导型表单,生成局部表单变量,用模态弹出对话框,这样不会因为离开函数而销毁,通过表单的最终返回值,可以判断是否完成表单填写. 填写完成,那么将表单内各个页面的选择都获取,打印消息. 由于这里是向导,所以用了SetWizardMode();