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添加
- m_btn1.m_pbtn=&m_btn2;
- m_btn2.m_pbtn=&m_btn1;
- void CButtonDlg::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);
- }
使用SetWindowPos方法
- void CDlgButton::OnMouseMove(UINT nFlags, CPoint point)
- {
- // TODO: Add your message handler code here and/or call default
- static CRect crectold,crectnew;
- if(crectold.IsRectNull())
- {
- GetWindowRect(&crectold);
- crectnew.left=crectold.left-100;
- crectnew.top=crectold.top+100;
- crectnew.right=crectold.right-100;
- crectnew.bottom=crectold.bottom+100;
- }
- ScreenToClient(&crectold);
- SetWindowPos(NULL,crectold.left,crectold.top+100,crectold.right,crectold.bottom+100,SWP_SHOWWINDOW|SWP_NOSIZE );
- //ShowWindow(SW_SHOW);
- /*CString cstring;
- cstring.Format("x=%d",crectold.left);
- MessageBox(cstring);*/
- CButton::OnMouseMove(nFlags, point);
- }
只是初步测试,由于时间关系,自己改吧。
下面是属性列表的代码(属性选项卡)
解决中文乱码的问题:先设置propertypage的字体为Chinese,然后修改字体为宋体或其他
1新建一个MFC单文档模式
2在资源那里添加
创建三个.
3然后拉控件
4为每个Proppage添加一个类
5查MSDN得知,要用CPropertySheet调用AddPage
6在其构造函数中添加
- CPropSheet::CPropSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
- :CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
- {
- AddPage(&m_proc1);
- AddPage(&m_proc2);
- AddPage(&m_proc3);
- }
- CPropSheet::CPropSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
- :CPropertySheet(pszCaption, pParentWnd, iSelectPage)
- {
- AddPage(&m_proc1);
- AddPage(&m_proc2);
- AddPage(&m_proc3);
- }
7菜单添加一个选项:
- void CProccView::OnProc()
- {
- // TODO: Add your command handler code here
- //MessageBox("hello");
- CPropSheet cpst("属性列表");
- cpst.DoModal();
- }
这样就可以显示了
- 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.
- void CProccView::OnProc()
- {
- // TODO: Add your command handler code here
- //MessageBox("hello");
- CPropSheet cpst("属性列表");
- cpst.SetWizardMode( );
- cpst.DoModal();
- }
向导的按钮有问题,第一页是没有上一页的:
属性页添加到属性表单,属性表单就是属性页的父窗体
- BOOL CProc1::OnSetActive()
- {
- // TODO: Add your specialized code here and/or call the base class
- ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_NEXT);//CPropertySheet相当于CPropertyPage的父窗体
- return CPropertyPage::OnSetActive();
- }
- BOOL CProp3::OnSetActive()
- {
- // TODO: Add your specialized code here and/or call the base class
- ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_FINISH);
- return CPropertyPage::OnSetActive();
- }
第一个单选按钮在GROUP打钩,则后面(直到再次遇到一个GROUP打钩的)都为同一组:
单选关联一个数值:
为CListBoX赋值,WM_INITDILOG
- BOOL CProc1::OnInitDialog()
- {
- CPropertyPage::OnInitDialog();
- // TODO: Add extra initialization here
- CString cst1="北京";
- CString cst2="上海";
- CString cst3="天津";
- CString cst4="南京";
- CString cst5="广州";
- ((CListBox*)GetDlgItem(IDC_LIST1))->AddString(cst1);
- ((CListBox*)GetDlgItem(IDC_LIST1))->AddString(cst2);
- ((CListBox*)GetDlgItem(IDC_LIST1))->AddString(cst3);
- ((CListBox*)GetDlgItem(IDC_LIST1))->AddString(cst4);
- ((CListBox*)GetDlgItem(IDC_LIST1))->AddString(cst5);
- return TRUE; // return TRUE unless you set the focus to a control
- // EXCEPTION: OCX Property Pages should return FALSE
- }
- LRESULT CProc1::OnWizardNext()
- {
- // TODO: Add your specialized code here and/or call the base class
- UpdateData();//参数默认为TRUE,取值的时候,参数为TRUE,要赋值的时候,参数为FALSE
- if(m_zhiye==-1)
- {
- MessageBox("请选择你的职业");
- return -1;
- }
- if(m_gongzuodidian=="")
- {
- MessageBox("请选择你的工作地点");
- return -1;
- }
- return CPropertyPage::OnWizardNext();
- }
添加关联数值:
- LRESULT CProc2::OnWizardNext()
- {
- // TODO: Add your specialized code here and/or call the base class
- UpdateData();
- if(m_zuqiu||m_lanqiu||m_paiqiu||m_youyong)
- {
- return CPropertyPage::OnWizardNext();
- }
- else
- {
- MessageBox("请选择你的兴趣爱好");
- }
- }
初始化CCombox
- BOOL CProp3::OnInitDialog()
- {
- CPropertyPage::OnInitDialog();
- // TODO: Add extra initialization here
- CString str1="1000元以下";
- CString str2="1000-2000元";
- CString str3="2000-3000元";
- CString str4="3000-5000元";
- CString str5="5000元以上";
- ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(str1);
- ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(str2);
- ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(str3);
- ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(str4);
- ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(str5);
- return TRUE; // return TRUE unless you set the focus to a control
- // EXCEPTION: OCX Property Pages should return FALSE
- }
把SORT的勾去掉,使得它按照我们添加进去的顺序排序
数值关联:
VIEW中添加成员变量,用以接收数据
- private:
- int zhiye;
- CString gongzuodidian;
- BOOL xingqu[4];
- CString xinzishuiping;
- };
- void CProccView::OnProc()
- {
- // TODO: Add your command handler code here
- //MessageBox("hello");
- CPropSheet cpst("属性列表");
- cpst.SetWizardMode( );
- //cpst.DoModal();
- if(ID_WIZFINISH==cpst.DoModal())
- {
- zhiye=cpst.m_proc1.m_zhiye;
- gongzuodidian=cpst.m_proc1.m_gongzuodidian;
- xingqu[0]=cpst.m_proc2.m_zuqiu;
- xingqu[1]=cpst.m_proc2.m_lanqiu;
- xingqu[2]=cpst.m_proc2.m_paiqiu;
- xingqu[3]=cpst.m_proc2.m_youyong;
- xinzishuiping=cpst.m_proc3.cstrxinshui;
- Invalidate();
- }
- }
- void CProccView::OnDraw(CDC* pDC)
- {
- CProccDoc* pDoc = GetDocument();
- ASSERT_VALID(pDoc);
- // TODO: add draw code for native data here
- CFont cfont;
- cfont.CreatePointFont(300,"宋体");
- CFont *oldfont=pDC->SelectObject(&cfont);
- TEXTMETRIC tm;
- pDC->GetTextMetrics(&tm);
- CString temp="你的职业是:";
- if(zhiye==0)
- {
- temp+="程序员";
- }
- if(zhiye==1)
- {
- temp+="系统工程师";
- }
- if(zhiye==2)
- {
- temp+="项目经理";
- }
- pDC->TextOut(0,0,temp);
- temp="你的工作地点是:";
- temp+=gongzuodidian;
- pDC->TextOut(0,tm.tmHeight,temp);
- temp="你的兴趣爱好是:";
- if(xingqu[0])
- {
- temp+="足球 ";
- }
- if(xingqu[1])
- {
- temp+="篮球 ";
- }
- if(xingqu[2])
- {
- temp+="排球 ";
- }
- if(xingqu[3])
- {
- temp+="游泳 ";
- }
- pDC->TextOut(0,tm.tmHeight*2,temp);
- temp="你的薪资水平是";
- temp+=xinzishuiping;
- pDC->TextOut(0,tm.tmHeight*3,temp);
- pDC->SelectObject(oldfont);
- }
自此,这个程序完成了