添加当前模块大概功能的描述,希望不要把所有接口文档写在一个文件中,至少按模块分类。
在资源中创建一个带有控件的窗口
// 在父窗口中通过消息映射机制响应子窗口的消息
void CMyDialog::OnBnClickedButton1()
{
MessageBox(L"父窗口的响应");
}
// 在按钮类中通过消息反射响应控件的消息
void CMyButton::OnBnClicked()
{
// 如果一个控件的类中提供了消息的反射函数,那么父窗口在
// 检测到控件自身能够处理消息的时候,会重新的将消息打包
// 并发送给控件进行处理,不会在响应父类的消息了
MessageBox(L"按钮的消息响应");
}
// 子类化控件,为控件添加新的功能,例如自动逃跑的按钮
void CMyButton::OnMouseMove(UINT nFlags, CPoint point)
{
// 移动的位置在父窗口之内,所以需要获取父窗口的客户区大小
CRect ParentRect{ 0 };
GetParent()->GetClientRect(ParentRect);
// 获取到当前按钮的矩形区域大小
CRect ButtonRect{ 0 };
GetClientRect(ButtonRect);
// 随机生成一个有效的坐标
int x = rand() % (ParentRect.Width() - ButtonRect.Width());
int y = rand() % (ParentRect.Height() - ButtonRect.Height());
// 计算移动后的按钮坐标
ButtonRect.MoveToXY({ x, y });
// 移动按钮的位置
this->MoveWindow(ButtonRect);
CButton::OnMouseMove(nFlags, point);
}