孙鑫第8课--对话框的编程(属性页,属性表单)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

选择一个基于对话框的MFC工程。

下面做一个逃跑按钮。

在对话框上添加两个按钮。

新建一个CBtn,基类是CButton.为这个类添加:CBtn *pbtn;

为这两个按钮关联新建立的这个按钮类。

在BOOL CTestDlg::OnInitDialog()中添加:

m_btn1.pbtn=&m_btn2;

m_btn2.pbtn=&m_btn1;

void CBtn::OnMouseMove(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

ShowWindow(SW_HIDE);

pbtn->ShowWindow(SW_SHOW);

CButton::OnMouseMove(nFlags, point);

}

运行,达到效果,但是初始化运行的时候能看到两个按钮。为此做如下修改:

将其中一个按钮的可见性不选。

下面是属性表单和向导的创建:

创建一个MFC的单文档程序。

为菜单增加一个显示属性表单的按钮,并添加VIEW类中响应。

添加三个属性页对话框。(由于在上面要写中文,将属性改为中文),并为这三个属性页创建一个类,再新建一个对话框,为它创建一个属性表单类。

在属性表单的头文件中添加:(要包含三个属性页的头文件)

public:

CPage1 m_page1;

CPage2 m_page2;

CPage3 m_page3;

为属性表单的构造函数:

CPageSheet::CPageSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(nIDCaption, pParentWnd, iSelectPage)

{

AddPage(&m_page1);

AddPage(&m_page2);

AddPage(&m_page3);

}

CPageSheet::CPageSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(pszCaption, pParentWnd, iSelectPage)

{

AddPage(&m_page1);

AddPage(&m_page2);

AddPage(&m_page3);

}

void CTestView::OnPage()

{

// TODO: Add your command handler code here

CPageSheet ps("属性表单");

ps.SetWizardMode();//设置向导,如没这句,不是设置向导。

ps.DoModal();

}

CPageSheet类不用关联任何的对话框,直接创建这个类。

为单选按钮关联一个成员变量。

BOOL CPage1::OnSetActive()

{

// TODO: Add your specialized code here and/or call the base class

CPageSheet* psheet = (CPageSheet*) GetParent();

psheet->SetWizardButtons(PSWIZB_NEXT);

return CPropertyPage::OnSetActive();

}

BOOL CPage2::OnSetActive()

{

CPropertySheet* psheet = (CPropertySheet*) GetParent();

psheet->SetWizardButtons(PSWIZB_BACK | PSWIZB_NEXT);

return TRUE;

}

BOOL CPage3::OnSetActive()

{

// TODO: Add your specialized code here and/or call the base class

CPropertySheet* psheet = (CPropertySheet*) GetParent();

psheet->SetWizardButtons(PSWIZB_BACK | PSWIZB_FINISH);

return CPropertyPage::OnSetActive();

}

BOOL CPage1::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

}

为列表框控件关联一个列表框成员变量(CSTRING类型)。

LRESULT CPage1::OnWizardNext()

{

// TODO: Add your specialized code here and/or call the base class

//GetText( int nIndex, LPTSTR lpszBuffer ) int GetCurSel( )

UpdateData();

if (-1==m_radio1)

{

MessageBox("请选择你的职业!!");

return -1;

}

if (m_list=="")

{

MessageBox("请选择你的工作地点!!");

return -1;

}

((CListBox*)GetDlgItem(IDC_LIST1))->GetText(((CListBox*)GetDlgItem(IDC_LIST1))-> GetCurSel( ),

m_list );

UpdateData(FALSE);

return CPropertyPage::OnWizardNext();

} LRESULT CPage2::OnWizardNext()

{

// TODO: Add your specialized code here and/or call the base class

相关文档
最新文档