今天学习孙鑫老师的《VC++深入编程》的第8章-对话框(二)总结一下
8.1“逃跑”按钮实现的描述:
在对话框(Dialog)上,设置两个CButton按钮控件,当鼠标从其中一个按钮上移动(OnMouseMove(UINT nFlags, CPoint point))时,此时此按钮隐藏(ShowWindow(SW_HIDE);),另外另外一个按钮显示(ShowWindow(SW_SHOW))。
一个重点:
由于要实现鼠标路过按钮才捕获消息,所以不能在对话框窗口(CTestDlg类)来捕获。也就是说,鼠标移动的消息应该由按钮(窗口)来捕获,因此,在MFC应用程序中,可以创建一个从CButton类派生的的新类,然后再CTestDlg类中把按钮控件与新类型的成员变量相关联,从而把按钮控件与一个自定义的按钮窗口类关联起来。而后在新生成的类中添加鼠标移动的消息响应函数实现按钮隐藏或显示。
一个巧妙:
1,由于在CTestDlg类中把按钮控件与新类型的成员变量相关联了,所以变量就可以调用类的成员函数或者成员变量。
2,在自定义类中定义一个成员CButton变量指针:CButton* m_pBtn;。
3,在::OnInitDialog()实现各自地址的保存。
m_btn1.m_pBtn=&m_btn2;
m_btn2.m_pBtn=&m_btn1;
4,在消息响应函数中
// TODO: 在此添加消息处理程序代码和/或调用默认值
ShowWindow(SW_HIDE);
m_pBtn->ShowWindow(SW_SHOW);
插一个学过的知识:控件与“其他变量”关联,下面是关联的过程
1,首先,在控件的父窗口类头文件中会有“其他变量”的声明“。那么,如果其他变量是一个类的对象,那么它可以调用类的成员函数或者成员变量。这是非常有用的。
2,然后,在控件的父窗口类的源文件中,有一个成员函数::DoDataExchange(CDataExchange* pDX)会真正实现控件与变量的关联。下面是实现的例子
void Ctest1Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_BUTTON1, m_btn1);
DDX_Control(pDX, IDC_BUTTON2, m_btn2);
}