孙鑫视频---对话框应用程序

逃跑按钮的巧妙实现。如何制作属性页对话框和向导对话框,融合讲解组合框(如何调整组合框的大小)、列表框、单选按钮、复选按钮等常用对话框控件的多种使用方法。

如何限制用户在不满足设定的条件时切换到其他属性页和向导页。 

做一个逃跑按钮,需求当鼠标点击按钮,按钮会自定移动到另外一个位置

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);
}
原文地址:https://www.cnblogs.com/yangyuqing/p/10272717.html