MFC(继续对话框,孙鑫C++第八讲笔记整理)

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函数的用法 memcopy的用法 

 

 

在CXXDlg添加ButtonDlg.h头文件

#include"ButtonDlg.h"

 

OnInitDlg添加

[cpp]  view plain copy
  1. m_btn1.m_pbtn=&m_btn2;  
  2. m_btn2.m_pbtn=&m_btn1;  


 

[cpp]  view plain copy
  1. void CButtonDlg::OnMouseMove(UINT nFlags, CPoint point)   
  2. {  
  3.     // TODO: Add your message handler code here and/or call default  
  4.       
  5.     ShowWindow(SW_HIDE);  
  6.     m_pbtn->ShowWindow(SW_SHOW);  
  7.   
  8.     CButton::OnMouseMove(nFlags, point);  
  9. }  


使用SetWindowPos方法

[cpp]  view plain copy
  1. void CDlgButton::OnMouseMove(UINT nFlags, CPoint point)   
  2. {  
  3.     // TODO: Add your message handler code here and/or call default  
  4.       
  5.     static CRect crectold,crectnew;  
  6.   
  7.     if(crectold.IsRectNull())  
  8.     {  
  9.         GetWindowRect(&crectold);  
  10.   
  11.         crectnew.left=crectold.left-100;  
  12.         crectnew.top=crectold.top+100;  
  13.         crectnew.right=crectold.right-100;  
  14.         crectnew.bottom=crectold.bottom+100;  
  15.   
  16.     }  
  17.     ScreenToClient(&crectold);  
  18.     SetWindowPos(NULL,crectold.left,crectold.top+100,crectold.right,crectold.bottom+100,SWP_SHOWWINDOW|SWP_NOSIZE );  
  19.     //ShowWindow(SW_SHOW);  
  20.       
  21.     /*CString cstring; 
  22.     cstring.Format("x=%d",crectold.left); 
  23.     MessageBox(cstring);*/  
  24.   
  25.           
  26.       
  27.     CButton::OnMouseMove(nFlags, point);  
  28. }  


只是初步测试,由于时间关系,自己改吧。

 

下面是属性列表的代码(属性选项卡)

解决中文乱码的问题:先设置propertypage的字体为Chinese,然后修改字体为宋体或其他

1新建一个MFC单文档模式

2在资源那里添加

创建三个.

3然后拉控件

4为每个Proppage添加一个类

 

5查MSDN得知,要用CPropertySheet调用AddPage

 

6在其构造函数中添加

[cpp]  view plain copy
  1. CPropSheet::CPropSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)  
  2.     :CPropertySheet(nIDCaption, pParentWnd, iSelectPage)  
  3. {  
  4.     AddPage(&m_proc1);  
  5.     AddPage(&m_proc2);  
  6.     AddPage(&m_proc3);  
  7. }  
  8.   
  9. CPropSheet::CPropSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)  
  10.     :CPropertySheet(pszCaption, pParentWnd, iSelectPage)  
  11. {  
  12.     AddPage(&m_proc1);  
  13.     AddPage(&m_proc2);  
  14.     AddPage(&m_proc3);  
  15. }  


7菜单添加一个选项:

[cpp]  view plain copy
  1. void CProccView::OnProc()   
  2. {  
  3.     // TODO: Add your command handler code here  
  4.     //MessageBox("hello");  
  5.   
  6.     CPropSheet cpst("属性列表");  
  7.     cpst.DoModal();  
  8.   
  9. }  


这样就可以显示了

 

[cpp]  view plain copy
  1. To create a wizard-type dialog box, follow the same steps you would follow to create a standard property sheet, but call SetWizardMode before you call DoModal.   


 

[cpp]  view plain copy
  1. void CProccView::OnProc()   
  2. {  
  3.     // TODO: Add your command handler code here  
  4.     //MessageBox("hello");  
  5.   
  6.     CPropSheet cpst("属性列表");  
  7.     cpst.SetWizardMode( );  
  8.     cpst.DoModal();  
  9.   
  10. }  


 

向导的按钮有问题,第一页是没有上一页的:

属性页添加到属性表单,属性表单就是属性页的父窗体

 

[cpp]  view plain copy
  1. BOOL CProc1::OnSetActive()   
  2. {  
  3.     // TODO: Add your specialized code here and/or call the base class  
  4.       
  5.      ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_NEXT);//CPropertySheet相当于CPropertyPage的父窗体  
  6.   
  7.     return CPropertyPage::OnSetActive();  
  8. }  


 

[cpp]  view plain copy
  1. BOOL CProp3::OnSetActive()   
  2. {  
  3.     // TODO: Add your specialized code here and/or call the base class  
  4.     ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_FINISH);  
  5.     return CPropertyPage::OnSetActive();  
  6. }  


 

第一个单选按钮在GROUP打钩,则后面(直到再次遇到一个GROUP打钩的)都为同一组:

 

单选关联一个数值:

 

为CListBoX赋值,WM_INITDILOG

[cpp]  view plain copy
  1. BOOL CProc1::OnInitDialog()   
  2. {  
  3.     CPropertyPage::OnInitDialog();  
  4.       
  5.     // TODO: Add extra initialization here  
  6.       
  7.     CString cst1="北京";  
  8.     CString cst2="上海";  
  9.     CString cst3="天津";  
  10.     CString cst4="南京";  
  11.     CString cst5="广州";  
  12.   
  13.     ((CListBox*)GetDlgItem(IDC_LIST1))->AddString(cst1);  
  14.     ((CListBox*)GetDlgItem(IDC_LIST1))->AddString(cst2);  
  15.     ((CListBox*)GetDlgItem(IDC_LIST1))->AddString(cst3);  
  16.     ((CListBox*)GetDlgItem(IDC_LIST1))->AddString(cst4);  
  17.     ((CListBox*)GetDlgItem(IDC_LIST1))->AddString(cst5);  
  18.   
  19.     return TRUE;  // return TRUE unless you set the focus to a control  
  20.                   // EXCEPTION: OCX Property Pages should return FALSE  
  21. }  


 

[cpp]  view plain copy
  1. LRESULT CProc1::OnWizardNext()   
  2. {  
  3.     // TODO: Add your specialized code here and/or call the base class  
  4.       
  5.     UpdateData();//参数默认为TRUE,取值的时候,参数为TRUE,要赋值的时候,参数为FALSE  
  6.     if(m_zhiye==-1)  
  7.     {  
  8.         MessageBox("请选择你的职业");  
  9.         return -1;  
  10.     }  
  11.   
  12.     if(m_gongzuodidian=="")  
  13.     {  
  14.         MessageBox("请选择你的工作地点");  
  15.         return -1;  
  16.     }  
  17.       
  18.     return CPropertyPage::OnWizardNext();  
  19. }  

 

添加关联数值:

 

[cpp]  view plain copy
  1. LRESULT CProc2::OnWizardNext()   
  2. {  
  3.     // TODO: Add your specialized code here and/or call the base class  
  4.   
  5.     UpdateData();  
  6.     if(m_zuqiu||m_lanqiu||m_paiqiu||m_youyong)  
  7.     {  
  8.         return CPropertyPage::OnWizardNext();  
  9.     }  
  10.     else  
  11.     {  
  12.         MessageBox("请选择你的兴趣爱好");  
  13.     }  
  14.   
  15.       
  16.       
  17. }  


初始化CCombox

[cpp]  view plain copy
  1. BOOL CProp3::OnInitDialog()   
  2. {  
  3.     CPropertyPage::OnInitDialog();  
  4.       
  5.     // TODO: Add extra initialization here  
  6.       
  7.     CString str1="1000元以下";  
  8.     CString str2="1000-2000元";  
  9.     CString str3="2000-3000元";  
  10.     CString str4="3000-5000元";  
  11.     CString str5="5000元以上";  
  12.   
  13.     ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(str1);  
  14.     ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(str2);  
  15.     ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(str3);  
  16.     ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(str4);  
  17.     ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(str5);  
  18.   
  19.   
  20.     return TRUE;  // return TRUE unless you set the focus to a control  
  21.                   // EXCEPTION: OCX Property Pages should return FALSE  
  22. }  


把SORT的勾去掉,使得它按照我们添加进去的顺序排序

 

数值关联:

 

VIEW中添加成员变量,用以接收数据

[cpp]  view plain copy
  1. private:  
  2.     int zhiye;  
  3.     CString gongzuodidian;  
  4.     BOOL xingqu[4];  
  5.     CString xinzishuiping;  
  6. };  


 

[cpp]  view plain copy
  1. void CProccView::OnProc()   
  2. {  
  3.     // TODO: Add your command handler code here  
  4.     //MessageBox("hello");  
  5.   
  6.     CPropSheet cpst("属性列表");  
  7.     cpst.SetWizardMode( );  
  8.     //cpst.DoModal();  
  9.   
  10.     if(ID_WIZFINISH==cpst.DoModal())  
  11.     {  
  12.         zhiye=cpst.m_proc1.m_zhiye;  
  13.         gongzuodidian=cpst.m_proc1.m_gongzuodidian;  
  14.   
  15.         xingqu[0]=cpst.m_proc2.m_zuqiu;  
  16.         xingqu[1]=cpst.m_proc2.m_lanqiu;  
  17.         xingqu[2]=cpst.m_proc2.m_paiqiu;  
  18.         xingqu[3]=cpst.m_proc2.m_youyong;  
  19.   
  20.         xinzishuiping=cpst.m_proc3.cstrxinshui;  
  21.              Invalidate();  
  22.            }  
  23. }  


 

[cpp]  view plain copy
  1. void CProccView::OnDraw(CDC* pDC)  
  2. {  
  3.     CProccDoc* pDoc = GetDocument();  
  4.     ASSERT_VALID(pDoc);  
  5.     // TODO: add draw code for native data here  
  6.   
  7.     CFont cfont;  
  8.     cfont.CreatePointFont(300,"宋体");  
  9.     CFont *oldfont=pDC->SelectObject(&cfont);  
  10.     TEXTMETRIC tm;  
  11.     pDC->GetTextMetrics(&tm);  
  12.     CString temp="你的职业是:";  
  13.     if(zhiye==0)  
  14.     {  
  15.         temp+="程序员";  
  16.     }  
  17.     if(zhiye==1)  
  18.     {  
  19.         temp+="系统工程师";  
  20.     }  
  21.     if(zhiye==2)  
  22.     {  
  23.         temp+="项目经理";  
  24.     }  
  25.     pDC->TextOut(0,0,temp);  
  26.   
  27.   
  28.     temp="你的工作地点是:";  
  29.     temp+=gongzuodidian;  
  30.     pDC->TextOut(0,tm.tmHeight,temp);  
  31.   
  32.     temp="你的兴趣爱好是:";  
  33.     if(xingqu[0])  
  34.     {  
  35.         temp+="足球 ";  
  36.     }  
  37.     if(xingqu[1])  
  38.     {  
  39.         temp+="篮球 ";  
  40.     }  
  41.     if(xingqu[2])  
  42.     {  
  43.         temp+="排球 ";  
  44.     }  
  45.     if(xingqu[3])  
  46.     {  
  47.         temp+="游泳 ";  
  48.     }  
  49.     pDC->TextOut(0,tm.tmHeight*2,temp);  
  50.   
  51.     temp="你的薪资水平是";  
  52.     temp+=xinzishuiping;  
  53.     pDC->TextOut(0,tm.tmHeight*3,temp);  
  54.   
  55.     pDC->SelectObject(oldfont);  
  56.   
  57. }  


自此,这个程序完成了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值