一个Windows API SetROP2(int nDrawMode)的使用

该函数的主要的作用是根据nDrawMode设置的方式重新设定绘图的方式,下面就不同的nDrawMode值具体解释绘图模式是如何改变的。

首先就nDrawMode的取值有以下的情况:

R2_BLACK Pixel is always black. //所有绘制出来的像素为黑色

R2_WHITE Pixel is always white. //所有绘制出来的像素为白色

R2_NOP Pixel remains unchanged. //任何绘制将不改变当前的状态

R2_NOT Pixel is the inverse of the screen color. //当前绘制的像素值设为屏幕像素值的反,这样可以覆盖掉上次的绘图,(自动擦除上次绘制的图形)

R2_COPYPEN Pixel is the pen color. //使用当前的画笔的颜色

R2_NOTCOPYPEN Pixel is the inverse of the pen color. //当前画笔的反色

//下面是当前画笔的颜色和屏幕色的组合运算得到的绘图模式。

R2_MERGEPENNOT Pixel is a combination of the pen color and the inverse of the screen color (final pixel = (NOT screen pixel) OR pen).

R2_MASKPENNOT Pixel is a combination of the colors common to both the pen and the inverse of the screen (final pixel = (NOT screen pixel) AND pen).

R2_MERGENOTPEN Pixel is a combination of the screen color and the inverse of the pen color (final pixel = (NOT pen) OR screen pixel).

R2_MASKNOTPEN Pixel is a combination of the colors common to both the screen and the inverse of the pen (final pixel = (NOT pen) AND screen pixel).

R2_MERGEPEN Pixel is a combination of the pen color and the screen color (final pixel = pen OR screen pixel).

R2_NOTMERGEPEN Pixel is the inverse of the R2_MERGEPEN color (final pixel = NOT(pen OR screen pixel)).

R2_MASKPEN Pixel is a combination of the colors common to both the pen and the screen (final pixel = pen AND screen pixel).

R2_NOTMASKPEN Pixel is the inverse of the R2_MASKPEN color (final pixel = NOT(pen AND screen pixel)).

R2_XORPEN Pixel is a combination of the colors that are in the pen or in the screen, but not in both (final pixel = pen XOR screen pixel).

R2_NOTXORPEN Pixel is the inverse of the R2_XORPEN color (final pixel = NOT(pen XOR screen pixel)).

总之,上述api的一个作用是在需要改变绘图的模式时,不需要重新设置画笔,只需要设置不同的绘图的模式即可达到相应的目的。

程序橡皮筋绘图程序的使用实例:

void CXXXView::OnMouseMove(UINT nFlags, CPoint point)

{

// 按下左键移动开始画图

if (nFlags == MK_LBUTTON)

{

// 创建画笔RGB(0x00, 0x00, 0xFF)

HPEN hPen = CreatePen(PS_SOLID, m_PenWidth, m_PenColor);

// 选进DC

::SelectObject(m_hMemDC, hPen);

//设置系统色彩模式取反色

int oldRop=::SetROP2(m_hMemDC,R2_NOTXORPEN);

// 画线

::MoveToEx(m_hMemDC,m_pOrigin.x,m_pOrigin.y, NULL);

::LineTo(m_hMemDC, m_pPrev.x,m_pPrev.y);

//::SetROP2(m_hMemDC,oldRop);//回复系统默认色彩模式

::MoveToEx(m_hMemDC, m_pOrigin.x, m_pOrigin.y, NULL);

::LineTo(m_hMemDC, point.x, point.y);

m_pPrev = point;

Invalidate(FALSE);

}

}

R2_NOTXORPEN

SetROP2就是设置绘画的模式,绘画模式有很多种,比如最简单的绘画模式就是你的当前画笔是什么颜色,在屏幕上画的就是什么颜色,R2_NOTXORPEN这种绘画模式是这样的,它先把画笔颜色与屏幕颜色异或,(这里异或是数学计算,1与1为0,1与0为1,我们说颜色其实就是二进制数,)异或之后再取反最后得到一个颜色值显示在屏幕上。
举个例子,你使用R2_NOTXORPEN这种绘画模式,你用红色画笔在黑色背景上画一条直线,显示红色,但你再用这只笔在刚画的直线上重画一遍,就相当于把开始画的红线擦除掉了,划线的地方显示为背景色。
R2_NOT绘画模式同样有在同一个地方画两次相当于什么都没画的功能,不过R2_NOT绘画模式第一次画的时候显示颜色并不是你选定的画笔颜色,而是默认的颜色。
这就是这两种绘画模式的区别 

SetROP2函数 ——设置前景色与背景色相关推荐

  1. Text组件新增内容通过tag_config设置前景色、背景色

    Text组件新增内容时,可以通过tag_config给特定的字符串设定前景色.背景色等属性. self.text1.tag_config('red',foreground = 'red',backgr ...

  2. POI操作Excel设置前景色背景色

    POI中背景颜色设置方法如下: HSSFCellStyle cellStyle = wb.createCellStyle(); cellStyle.setFillBackgroundColor(HSS ...

  3. python shell怎么调字体大小_Linux_Shell 设置字体 前景色 与 背景色 的几种方法

    参考文章 1.在Linux终端输出带颜色的文字的方法 2. tput 设置字体颜色 方法一 设置字符编码,  设置 文字 的前景色 与 背景色 方法二  利用tput 指令,  设置 文字 的前景色 ...

  4. Winform中DataGridView设置前景色、单元格背景色、标题栏样式、禁止改变高宽、不显示空白行、清除选中样式、填充数据源、设置标题、设置单列宽度

    场景 Winform中使用DataGridView实现加载数据并显示在led大屏中. 需要设置整个DataGridView的前景色.背景色.单元格颜色.标题栏样式.禁止 改变行高.列宽.不显示新增行. ...

  5. MFC之学习颜色矩形填充函数的使用、设置客户区背景色

    1.笔记 1.1颜色填充矩形函数 函数原型: void CDC::FillSolidRect(LPCRECT lpRect,COLORREF clr); void CDC::FillSolidRect ...

  6. Python print函数设置字体效果和背景色

    实现过程: 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关. 转义序列是以ESC开头,即用\033来完成(ESC的ASCII码用十进制表示是27,用八进制表示就是033 ...

  7. 微信小程序:enablePullDownRefresh、onReachBottomDistance 、动态设置窗口的背景色、动态设置下拉背景字体

    一.enablePullDownRefresh 1.下拉刷新enablePullDownRefresh的支持 单页面配置json文件 {"enablePullDownRefresh" ...

  8. HTML中然后设置前景色,理解CSS前景色和透明度

    前面的话 颜色的出现让网页不再只是黑白,运用好颜色设计,能让网页增色不少.一个网页给人们留下的第一印象实际上就是它的整体颜色.颜色的应用主要分为前景色.背景色和透明三个部分.本文主要介绍前景色和透明度 ...

  9. POI导出Excel设置单元格背景色

    POI导出Excel设置单元格背景色 导出Excel的时候,没有设置背景色,用2003版本的Excel工具打开会出现文档单元格背景自动填充黑色的情况,没有找到好的解决方法,就主动给他填充一种颜色,问题 ...

最新文章

  1. 程序员带半箱辣条参加东京奥运,网友:这不是辣条,是狗粮!
  2. 电影推荐_亲和性分析_规则提取(数据挖掘入门与实践-实验6)
  3. 怎样取消Windows 2003 server 意外关机提示
  4. JavaWeb结合七牛云存储搭建个人相册服务
  5. [C++11]shared_ptr共享智能指针的初始化与使用
  6. 计算机完成逻辑运算的原理,计算机组成原理2.5.1逻辑运算.ppt
  7. CSS3 弹性盒子模型
  8. spring 处理带有特殊字符的请求_程序员笔记|常见的Spring异常分析及处理
  9. java 中文件outputstream的操作注意
  10. ubuntu 忘记root密码了不用怕,看这里
  11. 多线程—— Queue(储存进程结果)
  12. redis增加auth
  13. Windows10 如何删掉内置的 skype ?
  14. 数据挖掘之数据仓库详述
  15. windows 控制台cmd乱码的解决办法 chcp 65001
  16. C++描述 LeetCode 480. 滑动窗口中位数
  17. 迪文屏DMT12800K070_A2WTC踩坑实录(一)
  18. 机器学习之PCA原理入门
  19. Payload Inject And Fake
  20. opencv的极线几何

热门文章

  1. SQLAlchemy:python数据库连接 神器
  2. LINUX下如何查看内存品牌和速率啊?
  3. 进度条实时显示request下载文件的解决方案
  4. 计算机英语司爱侠答案,《计算机英语》司爱侠,人民邮电答案.doc
  5. Office 2013 Excel 打开文档很慢很慢的解决方法
  6. 论安防行业的扩张与收缩转型
  7. java开发利用日期+xxx生成形如20131210001的流水号下载
  8. 2.面经-中移互联网
  9. 电气设计及电工基础经验
  10. Facebook产品经理Chris Vander Mey:PM应该是一位诚实的仆人