【VC++学习笔记三】控件自绘

本文详细介绍了如何在MFC应用程序中通过CWnd类派生并创建自定义窗口,重点阐述了在WM_PAINT消息中实现控件自绘的方法。同时,文章强调了注册窗口类的重要性以及父窗口WM_SIZE函数的重载以应对窗口尺寸变化。通过此教程,读者可以掌握在MFC环境中进行界面定制的基本技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      MFC应用程序中,大部分的控件类型都已经被定制好了,即便是修改,也只是小范围内的修改,而很多情况下,我们又需要对界面进行特殊定制,这时,最好的办法就是用CWnd类进行派生,自己生成新的窗体,在WM_PAINT消息中,进行控件的自绘,创建时,也只需要在主窗体的创建语句中加上就能显示了,下面是一个简单的控件创建过程:

如果什么都不处理的话,需要重载注册窗口类,才能显示,父窗口的WM_SIZE函数需要重载以相应对窗口变化的处理。

 

BOOL CCustomerWnd::PreCreateWindow(CREATESTRUCT& cs)

{

HINSTANCE hInstance = (HINSTANCE)AfxGetInstanceHandle();

ASSERT(hInstance);

 

WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

 

BOOL bRet = GetClassInfoEx(hInstance,cs.lpszClass,&wcex);

if (bRet)

{

return TRUE;

}

 

wcex.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS;

wcex.lpfnWndProc = AfxWndProc;

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0;

wcex.hInstance = hInstance;

wcex.hIcon = wcex.hIconSm = (HICON)::LoadIcon(hInstance,MAKEINTRESOURCE(IDR_MAINFRAME));

wcex.hCursor = (HCURSOR)::LoadCursor(NULL,IDC_ARROW);

wcex.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);

wcex.lpszMenuName = NULL;

wcex.lpszClassName = cs.lpszClass;

 

bRet = RegisterClassEx(&wcex);

 

return bRet;

}

转载于:https://www.cnblogs.com/OldGlory/p/3588643.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值