设为首页 加入收藏

TOP

14.4.3 使用鼠标绘图(9)
2013-10-07 16:12:14 来源: 作者: 【 】 浏览:63
Tags:14.4.3 使用 鼠标 绘图

14.4.3  使用鼠标绘图(9)

绘图模式确定绘图时使用的钢笔颜色如何与背景色相组合,以产生要显示的实体的颜色。绘图模式由这个函数的一个参数指定,它可以是表14-6中的任一个值。

表  14-6

绘 图 模 式
   
R2_BLACK
所有绘图颜色都是黑色
R2_WHITE
所有绘图颜色都是白色

(续表)

绘 图 模 式
   
R2_NOP
不进行任何绘图操作
R2_NOT
绘图颜色是屏幕颜色的反色。这将确保输出
清晰可见,因为它防止绘图颜色与背景色相同
R2_COPYPEN
绘图颜色是钢笔颜色。如果不进行设置,
这就是默认的绘图模式
R2_NOTCOPYPEN
绘图颜色是钢笔颜色的反色
R2_MERGEPENNOT
绘图颜色是钢笔颜色和背景色的反色
“相或”以后产生的颜色
R2_MASKPENNOT
绘图颜色是钢笔颜色和背景色的反色
“相与”以后产生的颜色
R2_MERGENOTPEN
绘图颜色是背景色和钢笔颜色的反色
“相或”以后产生的颜色
R2_MASKNOTPEN
绘图颜色是背景色和钢笔颜色的反色
“相与”以后产生的颜色
R2_MERGEPEN
绘图颜色是背景色和钢笔颜色“相或”
以后产生的颜色
R2_NOTMERGEPEN
绘图颜色是R2_MERGEPEN颜色的反色
R2_MASKPEN
绘图颜色是背景色和钢笔颜色“相与”
以后产生的颜色
R2_NOTMASKPEN
绘图颜色是R2_MASKPEN颜色的反色
R2_XORPEN
绘图颜色是钢笔色和背景色“异或”以后
产生的颜色,结果是由钢笔色和背景色中的
RGB成分组成的颜色,但不是这两种颜色
R2_NOTXORPEN
绘图颜色是R2_XORPEN 颜色的反色

每种符号都是int类型的预定义值。虽然此处有很多选项,但是可以带来一些特殊效果的选项是最后的R2_NOTXORPEN选项。

将绘图模式设置为R2_NOTXORPEN以后,第一次在默认的白色背景上绘制特定形状时,通常是以指定的钢笔颜色绘制。如果再次绘制的相同形状覆盖在第一次绘制的形状上,那么形状将消失,因为这次形状的颜色对应于钢笔颜色和它自身颜色"异或"以后产生的颜色。这时产生的绘图颜色是白色。利用一个示例可以看得更为清楚一些。

白色是由相同比例、"最大"数量的红色、蓝色和绿色(255, 255, 255)构成的,所以每种成分值的位都是1。为了简化问题,可以把白色表示为(1,1,1)-- 这3个值代表颜色的RGB成分。在相同的方案中,红色定义为(1,0,0),而不是(255, 0, 0)。这些颜色的组合如表14-7所示。

表  14-7

计 算 过 程
R
G
B
背景色(白色,窗口背景色)
1
1
1
钢笔颜色(红色)
1
0
0
XOR(产生红色成分)
0
1
1
NOT XOR(产生红色,绘制颜色)
1
0
0

因此,第一次在白色背景上绘制红色直线时,如表14-7的最后一行所示,直线显示的颜色是红色。如果第二次绘制的相同直线覆盖在现有的直线上,那么重写的背景像素将是红色。产生的绘图颜色将作如表14-8所示的计算。

表  14-8

计 算 过 程
R
G
B
背景色(红色最后一次绘制的像素)
1
0
0
钢笔(红色)
1
0
0
XOR(产生黑色)
0
0
0
NOT XOR(产生白色,窗口背景色)
1
1
1

如最后一行所示,直线显示的颜色是白色,因为窗口的背景色是白色,所以直线消失。

此处需要注意使用正确的背景色。应当看到,使用白色钢笔在红色背景上绘图的效果不太好,如第一次绘制的形状是红色,其结果是看不见的。它第二次出现时是白色。如果在黑色背景上进行绘制,如同在白色背景上那样,形状将出现,然后消失,但是它们不是以选择的钢笔颜色绘制的。

编写OnMouseMove()处理程序

首先在鼠标移动消息后面添加创建元素的代码。因为打算利用这个处理程序函数绘制元素,所以需要创建一个可在其中绘图的设备上下文。这时最便于使用的类是CClientDC,它是CDC的派生类。这个类型的对象会在工作完成后自动销毁设备上下文。所以可以创建一个CClientDC对象,使用它,然后不再管它。创建CClientDC对象时,可以给CClientDC构造函数传递一个指向设备上下文所在窗口的指针,它创建的设备上下文对应于窗口的工作区,所以如果传递一个指向视图的指针,就得到了我们需要的。
 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇14.4.3 使用鼠标绘图(8) 下一篇14.4.3 使用鼠标绘图(10)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)