逃跑按钮的巧妙实现。如何制作属性页对话框和向导对话框,融合讲解组合框(如何调整组合框的大小)、列表框、单选按钮、复选按钮等常用对话框控件的多种使用方法。
如何限制用户在不满足设定的条件时切换到其他属性页和向导页。
做一个逃跑按钮,需求当鼠标点击按钮,按钮会自定移动到另外一个位置
1. 新增按钮
2. 做两个一样的按钮,当鼠标移动按钮上时,首先让其中一个按钮隐藏,另一个按钮显示出来
鼠标移动的消息由按钮来捕获
添加新类
3. 使两个按钮控件分别关联一个成员变量
4. 增加控件消息处理
MW__MOUSEMOVE
让一个控件隐藏,另一个按钮显示
需要知道这个控件所关联的对象的内存地址,这样就可以调用内部成员函数showWindow将它显示出来
获取指针:
在CWeiXinBtn中定义成员变量,类型是CWeiXinBtn这个类的指针,在这个类中有了一个成员变量,它的类型就是CWeiXinBtn*
当我们用CWeiXinBtn这个类去实例化两个对象的时候,每个对象它们的内部都会有这个成员变量,它的类型就是CWeiXinBtn*
将这两个对象的地址互相交换一下,这样的话对于每一个对象内部的指针就保存了对方对象的首地址
用CWeiXinBtn实例化了两个对象m_btn1,m_btn2
在其中一个对象的内部,定义了一个CWeiXinBtn这个类的指针,保存了第二个对象的首地址
因为在CWeiXinBtn这个类中所定义了一个指针变量,它所实例化的每一个对象都会有这样一个指针变量,可以将m_btn1的首地址赋给m_btn2的指针变量
相当于这两个对象互相交换了自己的首地址,当m_btn1隐藏的时候就可以利用指针变量去调用showWindow传递一个XX,让m_btn2显示出来
OnInitDialog()用来显示消息要显示之前发送的
// TODO: 在此添加额外的初始化代码 m_btn1.m_pBtn=&m_btn2; m_btn2.m_pBtn=&m_btn1;
void CWeiXinBtn::OnMouseMove(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 ShowWindow(SW_HIDE);//让自己隐藏起来 m_pBtn->ShowWindow(SW_SHOW);//将对方显示出来 CButton::OnMouseMove(nFlags, point); }
然后将其中按钮Visible的属性改成false(将其中一个按钮隐藏)
属性表单和向导的创建
创建属性页资源
更改id和属性名
为每个属性对话框生成三个类,基类选择CPropetypage
创建属性表单CpropSheet
在属性表单的构造函数之中利用AddPage将三个属性对象增加到属性表单当中
void CPropView::OnPropertysheet() { // TODO: 在此添加命令处理程序代码 CPropSheet propSheet("属性表单程序"); propSheet.DoModal(); }
VS2010里的class wizard里没有WM_INITDIALOG消息? vs2003后面就取消了,直接添加BOOL OnInitDialog();就可以了
对获取的数据进行处理
{ CPropDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此处为本机数据添加绘制代码 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->TextOutA(0,tm.tmHeight*3,strTemp); pDC->SelectObject(pOldFont); }