当前位置:C++技术网 > 资讯 > NULL_PEN和NULL_BRUSH有什么用

NULL_PEN和NULL_BRUSH有什么用

更新时间:2015-12-24 13:05:31浏览次数:1+次

    在win32中,我们用GDI画线条和填充区域,要用到画笔和画刷。画笔用来设置所画的线的样子,而画刷则用来设置填充区域的样子。而系统给定的NULL_PEN和NULL_BRUSH却说是什么也不画。那为什么又增加NULL_PEN和NULL_BRUSH呢?
    如果说你要画线,却设置一个NULL_PEN画笔,那么表示你什么也画不出来。这不是挺别扭的吧,是不是有点吃多了没事干呢?
    我一直很郁闷,微软为什么要这么设计,到底有什么用呢?书中讲到画矩形时设置NULL_PEN,这样让画的矩形看不到边框线。而我之前为了消除边框线,将边框线设置为了背景色,这样就看不到边框线了,和设置了NULL_PEN画的矩形看不到边框线效果一样。然而,设置NULL_PEN来的更加方便。所以我才意识到,NULL_PEN并不是用于单独划线而用的,而是用在画区块时去掉边框线的,比如画矩形、画椭圆以及各种需要填充的形状。
    默认情况下,画边框线用黑色的画笔,填充区域用白色的画刷。如果不想要边框线,你自己就得根据背景色来设置画笔的颜色。所以,如果背景色你不确定,你根本就无法设置颜色。颜色设置错误,则还是看得到边框线。这样一来,自己实现起来就特别麻烦,而且容易出错。所以NULL_PEN就是用来解决这个问题的。只要你设置的画笔是NULL_PEN,那么不管背景色如何,始终都看不到边框线。这就意味着,系统会自动识别背景色,然后将画笔的颜色设置为背景色,或者直接不化边框线。这两者是GDI的具体实现,我们只要参照MSDN的说明,看它是采用哪一种。不过似乎MSDN输入“NULL_PEN”没找到。然并卵,我们只要知道,设置了NULL_PEN后,我们再也不用担心边框线会不小心画出来的问题,系统会保证这一点。
    那么同理,NULL_BRUSH也是有这么一个效果。对于这两个的理解,我们都没有仔细的深思,也没有太在意这些细节。殊不知,这些细节也隐含了设计者们的全面的考虑问题的态度,值得我们学习。我们需要了解更多的细节,学习更多的细节,也能因此改善我们的软件的细节和提高开发效率。

    下面是用白色画笔和空画刷绘制的矩形:

用白色画笔和空画刷绘制的矩形

【用白色画笔和空画刷绘制的矩形】
    下面是绘制需要的代码:
SelectObject(hdc,GetStockObject(WHITE_PEN));
SelectObject(hdc,GetStockObject(NULL_BRUSH));
Rectangle(hdc,10,10,100,100);