当前位置:C++技术网 > 精选软件 > 设置绘图方式SetROP2会影响画线、填充和文字输出吗?

设置绘图方式SetROP2会影响画线、填充和文字输出吗?

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

    所谓绘图方式,就是指以何种方式操作像素数据并将其保留下来。我们画图,首先需要一个画板,然后才是一个画笔或者画刷等。而画板和画笔画刷的颜色都是相互影响的,呈现给用户看到的将是他们作用后的结果。那么绘图方式就是指他们是如何相互起作用的。

    我用默认的画笔画刷画了一条线和一个矩形,同时也输出了一串文字。我们可以看到效果图如下:

默认画笔画刷所画的线和输出的文字效果

【默认画笔画刷所画的线和输出的文字效果】
    默认的画笔是黑色,默认的画刷是白色。而客户区作为画板,我用轻灰色画刷LTGRAY_BRUSH来设置了画板的颜色。设置的绘图方式就是画板颜色取反,即R2_NOT。效果图就是上面的。与默认的绘图方式即直接呈现画笔画刷的颜色的效果不一样。
    R2_NOT就是忽略画笔画刷的颜色,只要画笔画刷经过的地方,就让画板的颜色翻转,即形成反色。尽管我们画笔画刷有自己的颜色,画板也有自己的颜色,然后最终呈现给你的,并不是他们的显色,而是处理之后的颜色。所以你看到的线条不是黑色的,填充的矩形不是白色的,矩形的边框也不是黑色的。那么这些都是什么颜色成分呢?其实都是背景色的翻转色而已。直线和矩形相交的地方,是经过两次翻转,还是背景色。只是背景色的一次翻转和两次翻转(恢复原来的颜色)。
    那么从开始绘画,到画笔画刷和画板相互作用(只将作用的位置的像素,去画板颜色取反得到最后留下的颜色)。相互作用这个过程就是绘图方式决定的。那么绘图方式有下面这些:
#define R2_BLACK            1   /*  0       */
#define R2_NOTMERGEPEN      2   /* DPon     */
#define R2_MASKNOTPEN       3   /* DPna     */
#define R2_NOTCOPYPEN       4   /* PN       */
#define R2_MASKPENNOT       5   /* PDna     */
#define R2_NOT              6   /* Dn       */
#define R2_XORPEN           7   /* DPx      */
#define R2_NOTMASKPEN       8   /* DPan     */
#define R2_MASKPEN          9   /* DPa      */
#define R2_NOTXORPEN        10  /* DPxn     */
#define R2_NOP              11  /* D        */
#define R2_MERGENOTPEN      12  /* DPno     */
#define R2_COPYPEN          13  /* P        */
#define R2_MERGEPENNOT      14  /* PDno     */
#define R2_MERGEPEN         15  /* DPo      */
#define R2_WHITE            16  /*  1       */
#define R2_LAST             16

    对于每一种绘图方式的说明,请参考MSDN的说明或者后续相关文章说明。
    然而你可以看到,输出的文字并没有受到影响。文字输出和画线填充走的不是一条路。至于文字输出的原理,后续文章将会再分析。这里知道文字没有受到绘图方式的影响,而只是画图操作都受到了影响。