当前位置:C++技术网 > 精选软件 > win32背景模式背景色对画线填充和文字输出的影响

win32背景模式背景色对画线填充和文字输出的影响

更新时间:2015-12-24 15:00:56浏览次数:1+次

    在文章《设置绘图方式SetROP2会影响画线、填充和文字输出吗?》中,我们了解了设置绘图方式对画线填充和文字输出的影响,知道了文字输出并不会被绘图模式干扰。在本文中,我继续探究背景模式以及背景色对这三者的影响。

    我在客户区绘制一条线条和一个矩形,并输出提示文字。使用的背景模式就是默认的,因为我没有设置背景模式和背景颜色的代码。而画刷的颜色为蓝色,线条的颜色为红色。下面是放大后观察的截图:

使用放大镜观察到的绘图结果

【使用放大镜观察到的绘图结果】

    下面是原始效果图:

使用默认背景模式和背景色绘画的原始效果图

【使用默认背景模式和背景色绘画的原始效果图】
    从放大的图中可以看到,我用红色的点虚线画的线条,有一个短长相间的红色的线条,而在线条中间有白色的线条。对于矩形的边框,也是如此。而矩形内部则是很多条蓝色的横线铺开。蓝线之间是白色的区域。
    默认的背景填充颜色就是白色。所以虚线断开的位置和填充的颜色都是白色。那么实现的核心代码如下:
TextOut(hdc,10,150,Info,lstrlen(Info));
SelectObject(hdc,CreatePen(PS_DASHDOT,1,RGB(255,0,0)));
LineTo(hdc,600,400);
LOGBRUSH brush;
brush.lbStyle = BS_HATCHED;
brush.lbHatch = HS_HORIZONTAL;
brush.lbColor = RGB(0,0,255);
SelectObject(hdc,CreateBrushIndirect(&brush));
Rectangle(hdc,10,10,200,120);

    为了验证白色就是默认的背景颜色,那么我们来设置一下背景颜色为黄色,看看是不是可以替换掉默认的白色的背景色。只需要在最开始调用背景颜色设置函数SetBkColor即可。代码如下:
SetBkColor(hdc,RGB(255,255,0));

    然后我们看到的效果如下:

黄色背景色替换了默认的白色背景色,背景颜色同时影响了线条、区域填充和文字的背景颜色

【黄色背景色替换了默认的白色背景色,背景颜色同时影响了线条、区域填充和文字的背景颜色】
    我们发现,背景颜色同时应用在了线条虚线的背景、矩形的背景以及文字输出的背景色。如果我们不想要背景色,怎么办?
    实际上,默认的背景模式是不透明的,即OPAQUE背景模式。在这种模式下,就会使用背景色来填充。如果不想要背景颜色,那么可以将背景模式设置为TRANSPARENT模式。我们调用函数SetBkMode即可,代码如下:
SetBkMode(hdc,TRANSPARENT);

    这样的话,虚线断开处、矩形未被画刷填充的地方以及文字背景都不会有任何填充色了,只能看到背景的图形。这就是背景透明的效果。我们看看下面的效果图:

透明背景模式下的虚线、画刷填充效果和文字输出效果

【透明背景模式下的虚线、画刷填充效果和文字输出效果】
    那么总结一下,实际上对于背景来讲,会同时影响到线条、填充和文字的。而背景模式大概分为透明和不透明的两种模式,透明的情况下,背景没有任何填充,直接可以看到背景的东西,而不透明模式则会用背景色来填充。默认的背景色是白色的,你也可以自己设置背景色。