导读:
我并不推荐采用自绘的方式去完成一些控件(比如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_VISIBLE|WS_CHILD);
protected:
void PostClickEvent();
protected:
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnMouseHover(

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

被折叠的 条评论
为什么被折叠?



