MFC自定义控件(Custom Control)使用

分类:MFC 标签:MFC, IT, 编程

吾用的是VS2008,注意几点.
1.必须为Custom Control控件指定一个已经存在的类.
2.必须有RegisterCtrlClass()函数来注册这个控件类.
3.控件对象必须关联该类,即DDX_Control(pDX, IDC_XXX, xxx);
下面开始创建步骤:
Step1.创建控件类
在你的工程里打开类视图,右击你的项目名选择"添加"-->"类"-->MFC-->"MFC类".

填好类信息例如CTestCtrl, 基类选择CWnd.

Step2.注册控件类
添加RegisterCtrlClass()函数,注册控件类.
void CTestCtrl::RegisterCtrlClass()
{
	HINSTANCE hInstance = AfxGetInstanceHandle();

	WNDCLASS	wndclsCtrl;
	ZeroMemory(&wndclsCtrl, sizeof(WNDCLASS));

	if(::GetClassInfo(hInstance, "TESTCTRL", &wndclsCtrl))
		return;

	//设置控件类信息
	wndclsCtrl.style			= CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
	wndclsCtrl.lpfnWndProc		= ::DefWindowProc;
	wndclsCtrl.cbClsExtra		= 0;
	wndclsCtrl.cbWndExtra		= 0;
	wndclsCtrl.hInstance		= hInstance;
	wndclsCtrl.hIcon			= NULL;
	wndclsCtrl.hCursor			= AfxGetApp()->LoadStandardCursor(IDC_ARROW);
	wndclsCtrl.hbrBackground	= NULL;
	wndclsCtrl.lpszMenuName		= NULL;
	wndclsCtrl.lpszClassName	= "TESTCTRL";

	//注册控件类
	AfxRegisterClass(&wndclsCtrl);
}
此处注意!! "TESTCTRL"很重要, 在接下来添加Custom Control控件的时候, 属性一览需要填写这个"TESTCTRL", 而不是"CTestCtrl"!!

RegisterCtrlClass()需要在DoDataExchange前被调用,可以放构造函数中, 一般都放在构造函数中.
CTestCtrl::CTestCtrl()
{
	RegisterCtrlClass();
}
Step3.添加Custom Control控件到窗体
打开窗体设计器,在你的窗体上拖进一个Custom Control控件, 右键该控件,选择"属性", 在"属性"的"Class"一栏输入你注册的那个控件类名, 是"TESTCTRL", 而不是"CTestCtrl"!

Step4.添加控件变量(对象)
右键你添加的Custom Control控件, 选择"添加变量", 此处类名输入"CTestCtrl", 变量名随意.

其实也可以自己手动添加控件对象, 不过需要注意的是, 一定要将控件对象与控件类关联, 否则可能会报内存泄露的错误, 而且程序可能无法启动. 以上.

至此已经成功添加了一个空白的自定义控件, 如果想看到效果, 可以在CTestCtrl里相应WM_PAINT消息, 即重载 OnPaint()
添加点东西,例如:
void CTestCtrl::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	// TODO: 在此处添加消息处理程序代码
	dc.MoveTo(0, 0);
	dc.LineTo(100, 100);
	// 不为绘图消息调用 CWnd::OnPaint()
}
你可能还会对下列文章感兴趣:

0条评论 你不想来一发么↓

    想说点什么呢?

    您需要登录您的Google账号才能进行评论。