想必很多使用MFC编程的朋友都想去用微软的控件,但是很多时候我们发现控件的功能并没有想象中的那么强大,而且很多功能我们根本都用不到,我们想去自绘控件,但是又不知道如何着手。本文介绍MFC控件设计的大致步骤。
Window窗口中的控件都是有一系列的窗口组成。其实按钮就是一个窗口,至于它是如何能嵌入到其他的窗口中呢,这就关系到一个父窗口的问题了,即按钮必须是父窗口的子窗口,并且父窗口移动及时通知子窗口移动。
了解了以上,我们就来看一下自绘控件的大致步骤吧
①重载窗口类CShowDlg,在这里我们重载的基类为CDialog 对话框类
②插入对话框资源 IDD_DIALOG1,并绑定刚刚重载的窗口类CShowDlg
③定义重载的窗口类变量m_MyControl,并为定义的变量设计窗口风格,由于控件是一定要贴入到窗口中的,而不是弹出来,所以对话框设计风格一定要有WS_CHILD类型
④子窗口随父窗口一起移动,父窗口为对话框类,为此我们可以在父窗口上添加消息映射 ON_WM_MOVE()和 ON_WM_SIZE()及时获取父窗口的移动以及大小变化,并且使父窗口能够及时通知子窗口移动窗口以及改变窗口大小等命令。
⑤控件是禁止被鼠标拖动的,所以必须去掉标题栏属性,这样控件就不会移动了。
知道了MFC的基本原理,设计自己需要的控件不再那么难。
void CShowDlg::OnMove(int x, int y)
{
CDialog::OnMove(x, y);
// TODO: Add your message handler code here
//在移动窗口之前一定要确保m_MyControl已经创建
if (::IsWindow(m_MyControl.GetSafeHwnd()))
{
//x,y为父窗口左上角的坐标,子窗口CRect区域为[10,20,300,400]
m_MyControl.MoveWindow(x+10,y+20,300,400);
// m_MyControl.SetWindowPos(NULL,x+10,y+20,300,400,SW