8属性表对话框

转自 http://blog.sina.com.cn/s/articlelist_1815328704_0_1.html

1.如何改变按纽的字体?在对话框的属性中改变字体的属性即可
2.逃跑按纽的实现
  1.从CButton派生一个类,CWeixinBtn
  2.将IDC_EDIT1关联成员变量m_btn1,类型为CWeixinBtn,注意要包含头文件。
  3.在CWeixinBtn中加一个指针成员变量CWeixinBtn *pWeixinBtn,然后将其地址初始化。
  4.在新类中增加鼠标移动的消息处理。
3.属性表单
  1.插入属性页资源。Insert->new Resource->Dialog
  2.当选择Classwizard菜单时,系统提示是否为创建新的类,我们将其从CPropertyPage派生!这样可以为
方便为其增加消息响应函数。
  3.插入新的从CPropertySheet派生的类,在类中增加3个CPropertyPage的实例。
  4.在view中增加菜单项,当点击时显示属性表单,出现中文乱码,修改CPropertyPage属性为中文,另外将
其字体设为宋体。
  5.在CPropertyPage中设置SetWizardButtons可将其属性改为上一步、完成!
  6.为IDC_RADIO1关联成员变量,需要先设置Group属性才行。另外别忘记调用UpdateData().
  7.为CPropertyPage增加虚函数,OnWizardNext,如果用户点击下一步时,不想让他进入下一步,刚返回-1!
  8.将用户的选择输出到屏幕上,此时可以在View中增加几个成员变量,用来接收用户选择的数据。
4.memset()的用法! memset(m_bLike,0,sizeof(m_bLike));
 
多页对话框:
选择最终内容:
void CPropView::OnDraw(CDC* pDC)
{
       CPropDoc* pDoc = GetDocument();
       ASSERT_VALID(pDoc);
       // TODO: add draw code for native data here
       CFont font;
       font.CreatePointFont(300,"华文行楷");
 
       CFont *pOldFont;
       pOldFont=pDC->SelectObject(&font);
 
       CString strTemp;
       strTemp="你的职业:";
 
       switch(m_iOccupation)
       {
       case 0:
              strTemp+="程序员";
              break;
       case 1:
              strTemp+="系统工程师";
              break;
       case 2:
              strTemp+="项目经理";
              break;
       default:
              break;
       }
       pDC->TextOut(0,0,strTemp);
 
       strTemp="你的工作地点:";
       strTemp+=m_strWorkAddr;
 
       TEXTMETRIC tm;
       pDC->GetTextMetrics(&tm);
 
       pDC->TextOut(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->TextOut(0,tm.tmHeight*2,strTemp);
 
       strTemp="你的薪资水平:";
       strTemp+=m_strSalary;
       pDC->TextOut(0,tm.tmHeight*3,strTemp);
 
       pDC->SelectObject(pOldFont);
}
 
页框选择:
void CPropView::OnPropertysheet()
{
       // TODO: Add your command handler code here
       CPropSheet propSheet("维新属性表单程序");
       propSheet.SetWizardMode();
       if(ID_WIZFINISH==propSheet.DoModal())
       {
              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_volleyball;
              m_bLike[3]=propSheet.m_prop2.m_swim;
              m_strSalary=propSheet.m_prop3.m_strSalary;
              Invalidate();
       }
}
 
 
在页Sheet框中:
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);
}
 
在具体的页面中:
LRESULT CProp1::OnWizardNext()
{
       // TODO: Add your specialized code here and/or call the base class
       UpdateData();
       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
}
 
 
抓住按扭的例子:
void CWeiXinBtn::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 CTestDlg::OnInitDialog()中:
       m_btn1.m_pBtn=&m_btn2;
       m_btn2.m_pBtn=&m_btn1;
 
并在CTestDlg 中关联两个:CWeiXinBtn类型的按扭。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值