MFC控件完全重绘从CWnd开始

本文提倡通过从CWnd基础控件开始完全重绘,而非使用自绘方式美化MFC控件。作者指出MFC对部分控件的操作存在限制,如CTabCtrl的头部高度和Item宽度。文章介绍了实现界面库设计所需的关键消息处理,并展示了如何在OnPaint函数中采用双缓存防止闪烁。此外,还展示了如何动态创建并定制控件,使得子类可以方便地重写DoPaint函数来实现自定义绘制。
摘要由CSDN通过智能技术生成

导读:

我并不推荐采用自绘的方式去完成一些控件(比如CStatic,CButton,RadioBox,CheckBox等)的美化,而是推荐大家从CWnd入手,把这些基本控件完全重新绘制一遍(当然,有些做的很好的控件还是需要继承来自绘的,比如CListCtrl)。为什么这么做?因为MFC对这些控件的某些操作是隐蔽的,某些限制是我们无法接受的(比如CTabCtrl的头部高度和每个Item的宽度)。我觉得掌握如下知识,绘制其他基本控件就不是绘制的问题,而是数据结构的事情了。

头文件:

#ifndef QCTRL_H
#define QCTRL_H
#include <afxwin.h>

class QMemDC :	// 我把双缓存封装到类中,这样就方便多了
	public CDC
{
private:
	CDC* dcSrc;
	CRect rect;
	CBitmap bmp;
public:
	QMemDC(CDC* dc,CRect rc);
	void Apply();
};

class QCtrl :
	public CWnd
{
protected:
	CString szClassName;
	bool isMouseIn;
	bool isPressed;
public:
	QCtrl();
	~QCtrl();
	bool Create(CWnd* pParent,CRect rc,CString text,DWORD id = 0,DWORD style = WS_VIS
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值