VC设置视图背景颜色的方式

视图的背景通常为白色,默认情况下与COLOR_WINDOW系统中定义的颜色相匹配。
设计师通常希望准备自己的程序,以便用户可以轻松地更改窗口的背景颜色或用美丽的图像填充背景。
重新指定对应于使用Windows的SetSysColors功能COLOR_WINDOW实际的颜色,可以达到改变视图的背景颜色的目的。
但是,这也会同时改变其他应用程序的显示窗口的背景,使整个Windows系统的颜色设置混乱。
此外,您可以使用以下方法设置视图的背景颜色。换句话说,将以下程序代码添加到CView的OnDraw函数中。
voidCTestView:OnDraw(CDC * pDC)
CTestDoc * pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRectrectClient;
CBrushbrushBkColor;
GetClientRect(rectClient);
brushBkColor
CreateSolidBrush(RGB(255,0,0));
pDC-DPtoLP(rectClient);
pDC - FillRect(rectClient,&brushBkColor);
&Hellip;
这将实现改变当前应用程序视图的背景的目的,但同时存在一些不利影响并且程序运行不充分。
问题分析VC ++可视化和文档结构使用CView的OnDraw函数来完成大部分图形渲染工作。
当用户调整窗口大小或显示隐藏区域时,将调用OnDraw函数并重新绘制窗口。
另外,如果在文档中的程序的数据发生变化时,通常情况下,你必须通知该是当你调用invalidate(或InvalidateRect)视图到Windows的成员函数所做的更改。调用Invalidate还会激活对OnDraw函数的调用。
由于经常调用OnDraw函数,因此每次在运行时更新视图的客户端区域时,屏幕都会变得不稳定并闪烁。
当仔细调查VC ++应用程序和Windows消息映射系统的框架结构,发现了另一种方式来改变视角的背景下,执行效果比前两种方法更好。
事实上,在程序调用OnDraw函数之前,窗口的消息变为活动状态。WM_ERASEBKGND清除视图的更新区域。
默认情况下,窗口系统在注册视图窗口时使用窗口类的hbrBackground成员描述的画笔清除屏幕。这通常会将屏幕更新为与COLOR_WINDOW对应的颜色。
因此,使用OnDraw功能设置背景颜色的过程如下。首先,更新屏幕,以对应于COLOR_WINDOW(白色)的颜色,并且是随后在其它颜色(与绿色刷背景或其他用户沿着显示器)来完成OnDraw函数。颜色)),这是屏幕闪烁的根本原因。
WM_PAINT处理主要以BeginPaint调用开始。hdc = BeginPaint(hwnd,ps),EndPaint以调用结束。中间栏使用OnPaint()函数。显示尚未删除,将被Windows删除。
(换言之,以与默认的白色刷一次刷屏幕,也就是重画背景颜色)使用已经在所述记录窗口类WNDCLASS结构的hbrBackground字段指定了刷擦除背景我会的。
通常,这是备用的白色刷子。
也就是说,Windows通过设置空白窗口的背景来删除窗口的背景。
在解决这个直到对问题的分析,视背景色填充,而不是OnDraw函数,有必要以移动到对应于Windows消息的消息分配功能WM_ERASEBKGND。
添加一个成员变量m_viewBkColor为了挽救当前背景色,通过增加两个成员函数GetViewBkColor和SetViewBkColor读写记录类,就可以实现这一过程。
这样做的好处是您可以序列化m_viewBkColor成员并将其与文档相关联。打开文档时,背景与上次操作文档时的背景相同。
将消息分配函数OnEraseBkgnd添加到视图类视图中的Windows WM_ERASEBKGND消息。代码如下。
BOOLCTestView:OnEraseBkgnd(CDC * pDC)
它是直立的。
CBrushbrush;

CreateSolidBrush(GetDocument() - GetViewBkColor());
pDC - GetClipBox(rect);
pDC - FillRect(rect,&brush);
在回家的路上;