孙鑫Lesson8 Dialog2

两个例子:

1、两个按钮抓不住:新建一个从CButton派生的类,并创建一个指针变量,然后在dialog创建两个button按键的新类对象,并把各自指针指向对方。然后在新类新建一个wm_mousemove消息处理函数,用showwindow实现;

2、创建属性页(两种)并选择提示,最终把选择结果显示在窗口中:

   1)创建三个属性页propertypage,并建立相应的类;

   2)在菜单中添加属性表单,创建表单propertysheet类,并把三个属性页添加进去;

   3)在视图中添加属性表单对应的菜单ID函数,并建立表单对象与显示;

   4)各表单中添加onsetactive(哪些按钮可用),onwizardnext(下一步时判断条件),onitidialog(初始化前添加的内容)虚函数,并添加相应的内容与说明

   5)在view中添加变量把对应各属性页的变量取过来,并在视图中显示textout出来。


代码:

example1:

在 CTestDlg2Dlg的OnInitDialog()中初始按钮指针,互相指向对方:

m_btn1.m_pBtn=&m_btn2;
m_btn2.m_pBtn=&m_btn1;

创建一个新建一个继承自button的类,并在其中添加隐藏与显示的代码

void CWeiXinBtn::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
ShowWindow(SW_HIDE);
m_pBtn->ShowWindow(SW_SHOW);
CButton::OnMouseMove(nFlags, point);
}


example2:

propertysheet.cpp中添加三个属性页

IMPLEMENT_DYNAMIC(CPropSheet, CPropertySheet)


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

}


propertyview中添加打开属性表单,并显示最终操作结果:

void CPropView::OnPropertysheet()
{
// TODO: 在此添加命令处理程序代码
CPropSheet propSheet(_T("维新属性表单程序"));
propSheet.SetWizardMode();
//propSheet.DoModal();
if(ID_WIZFINISH==propSheet.DoModal())
{
m_i0ccupation=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_paint;
m_bLike[3]=propSheet.m_prop2.m_swim;
m_strSalary=propSheet.m_prop3.m_strSalary;
Invalidate();
}
}

void CPropView::OnDraw(CDC* pDC)
{
CPropDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
CFont font;
font.CreatePointFont(200,_T("华文行楷"));
CFont * pOldFont;
pOldFont=pDC->SelectObject(&font);


CString strTemp;
strTemp="你的职业: ";


switch(m_i0ccupation)
{
case 0:
strTemp+="程序员";
case 1:
strTemp+="系统工程师";
case 2:
strTemp+="项目经理";
default:
break;
}
pDC->TextOutW(0,0,strTemp);


strTemp="你的工作地址: ";
strTemp+=m_strWorkAddr;
TEXTMETRIC tm;
pDC->GetTextMetrics(&tm);
pDC->TextOutW(0,tm.tmHeight,strTemp);


strTemp="你的兴趣爱好: ";
if(m_bLike[0])
{strTemp+="足球 ";}
if(m_bLike[1])
{strTemp+="篮球 ";}
if(m_bLike[2])
{strTemp+="画画 ";}
if(m_bLike[3])
{strTemp+="游泳 ";}
pDC->TextOutW(0,tm.tmHeight*2,strTemp);


strTemp="你的薪资水平: ";
strTemp+=m_strSalary;
pDC->TextOutW(0,tm.tmHeight*3,strTemp);
pDC->SelectObject(pOldFont);
}

//属性页1的代码:

BOOL CProp1::OnSetActive()
{
// TODO: 在此添加专用代码和/或调用基类
((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_NEXT);
return CPropertyPage::OnSetActive();
}




LRESULT CProp1::OnWizardNext()
{
// TODO: 在此添加专用代码和/或调用基类
UpdateData();
if(m_occupation==-1)
{
MessageBox(_T("请选择你的职业"));
return -1;
}


if(m_workAddr=="")
{
MessageBox(_T("请选择你的工作地点"));
return -1;
}
return CPropertyPage::OnWizardNext();
}




BOOL CProp1::OnInitDialog()
{
CPropertyPage::OnInitDialog();


// TODO:  在此添加额外的初始化


((CListBox*)GetDlgItem(IDC_LIST1))->AddString(_T("北京"));
((CListBox*)GetDlgItem(IDC_LIST1))->AddString(_T("天津"));
((CListBox*)GetDlgItem(IDC_LIST1))->AddString(_T("武汉"));
return TRUE;  // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}


//属性页2中的代码:

BOOL CProp2::OnSetActive()
{
// TODO: 在此添加专用代码和/或调用基类
((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK |PSWIZB_NEXT);
return CPropertyPage::OnSetActive();
}


LRESULT CProp2::OnWizardNext()
{
// TODO: 在此添加专用代码和/或调用基类
UpdateData();

if(m_football ||m_basketball ||m_paint ||m_swim)
{
return CPropertyPage::OnWizardNext();
}
else
{
MessageBox(_T("请选择你的兴趣爱好"));
return -1;
}

}


//属性页3中的代码:

BOOL CProp3::OnSetActive()
{
// TODO: 在此添加专用代码和/或调用基类
((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK |PSWIZB_FINISH);
return CPropertyPage::OnSetActive();
}

BOOL CProp3::OnInitDialog()
{
CPropertyPage::OnInitDialog();

// TODO:  在此添加额外的初始化
((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(_T("1000元以下"));
((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(_T("1000~200元"));
((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(_T("2000~3000元"));
((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(_T("3000元以上"));
((CComboBox*)GetDlgItem(IDC_COMBO1))->SetCurSel(0);
return TRUE;  // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}

BOOL CProp3::OnWizardFinish()
{
// TODO: 在此添加专用代码和/或调用基类
int index;
index=((CComboBox*)GetDlgItem(IDC_COMBO1))->GetCurSel();
((CComboBox*)GetDlgItem(IDC_COMBO1))->GetLBText(index,m_strSalary);
return CPropertyPage::OnWizardFinish();
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值