// 类变量
class CDrawView : public CView {
//……
protected:
BOOL m_bLButtonDown, m_bErase; // 判断是否按下左鼠标键
//和是否需要擦除图形的类变量
CPoint p0, pm; // 记录直线起点和动态终点的类变量
CPen * pGrayPen, * pLinePen; // 定义灰色和直线笔
//……
}
// 构造函数
CDrawView::CDrawView() {
m_bLButtonDown = FALSE; // 设左鼠标键按下为假
m_bErase = FALSE; // 设需要擦除为假
pGrayPen = new CPen(PS_SOLID, 0, #808080);// 创建灰色笔
pLinePen = new CPen(PS_SOLID, 0, #ff0000);// 创建红色的直线笔
}
// 鼠标消息响应函数
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) {
m_bLButtonDown = TRUE; // 设左鼠标键按下为真
SetCapture(); // 设置鼠标捕获
// SetCursor(LoadCursor(NULL, IDC_CROSS)); // 设置鼠标为十字
p0 = point; // 保存矩形左上角
pm = p0; // 让矩形右下角等于左上角
CView::OnLButtonDown(nFlags, point);
}
void CDrawView::OnMouseMove(UINT nFlags, CPoint point) {
SetCursor(LoadCursor(NULL, IDC_CROSS)); // 设置鼠标为十字
if (m_bLButtonDown) { // 左鼠标键按下为真
CDC* pDC = GetDC(); // 获取设备上下文
pDC->SelectObject(pGrayPen);// 选取灰色笔
pDC->SetROP2(R2_XORPEN);// 设置为异或绘图方式
if (m_bErase) { // 需要擦除为真
pDC->MoveTo(p0); pDC->LineTo(pm); // 擦除原直线
}
else // 需要擦除为假
m_bErase = TRUE; // 设需要擦除为真
pDC->MoveTo(p0); pDC->LineTo(point); // 绘制新直线
pm = point; // 记录老终点
ReleaseDC(pDC); // 释放设备上下文
}
CView::OnMouseMove(nFlags, point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) {
ReleaseCapture(); // 释放鼠标捕获
if (m_bLButtonDown) { // 左鼠标键按下为真
CDC* pDC = GetDC(); // 获取设备上下文
pDC->SelectObject(pGrayPen);// 选取灰色笔
pDC->SetROP2(R2_XORPEN); // 设置为异或绘图方式
pDC->MoveTo(p0); pDC->LineTo(pm); // 擦除原直线
pDC->SelectObject(pLinePen); // 选择直线笔
pDC->SetROP2(R2_COPYPEN);// 设置为覆盖绘图方式
pDC->MoveTo(p0); pDC->LineTo(point); // 绘制最终的直线
m_bLButtonDown = FALSE; // 重设左鼠标键按下为假
m_bErase = FALSE; // 重需要擦除为假
ReleaseDC(pDC); // 释放设备上下文
}
CView::OnLButtonUp(nFlags, point);
}

转载于:https://www.cnblogs.com/burellow/archive/2012/05/21/2511496.html

VC++用异或(XOR)方式实现拖放画动态直线相关推荐

  1. C 使用异或(xor)加密/解密文件

    C 使用异或(XOR)加密/解密文件 之前写过一篇<php 使用异或(XOR)加密/解密文件>,但php执行的速度很慢,因此这次使用C重写,速度有很大的提高. xor_encrypt.c ...

  2. python numpy 实现与(and),非与(not),或(or),异或(xor)逻辑运算!

    python numpy 实现与(and),非与(not),或(or),异或(xor)逻辑运算!- 目录 1,与,非,或,异或简单的介绍 2,python numpy实现 3,运行结果 1,与,非,或 ...

  3. 异或(XOR)运算加密/解密在线工具

    异或(XOR)运算加密/解密在线工具,工具链接:http://www.atoolbox.net/Tool.php?Id=857 异或(XOR)运算加密一种简单高效.非常安全的加密方法. 异或(XOR) ...

  4. 异或(XOR)运算加密/解密算法

    本文将介绍一个简单易用的加密/解密算法:使用异或(XOR)运算.本算法原理简单,旨在使读者对信息的加密/解密有一个更加直观的印象. XOR算法原理 从加密的主要方法看,换位法过于简单,特别是对于数据量 ...

  5. python中异或怎么算_浅谈Python逻辑运算符 异或xor

    我又来水文章了 这篇讲讲令人百思不得骑姐的异或运算 让我们先来看两段,不,是10(b)段对话:技术员:这个水坝系统的设计思路为按下紧急按钮或者水位高于危险水位时,系统发出警报 提问者:这个" ...

  6. 逻辑异或(XOR或EOR或⊕) / 逻辑与非(谢费尔竖线,Not AND,常缩写为NAND) / 逻辑或非(NOR) (网络搜集整理)

    逻辑与是两个逻辑变量的一种运算,经常是两个命题的运算.它满足:当且仅当其两个变量的真值都为真时,其结果为真 也写作AB(逻辑学),A && B(计算机科学),或AB(电子学) 逻辑或是 ...

  7. 使用 2 种方式实现动画的动态蒙版

    本篇文章作者:乐府-小明 一. 前言 本文的目的是介绍如何在场景(可能含有多个 spine 动画)上实现动画蒙版(也就是遮罩 mask 会动会变形)根据实现方式的不一样, 会有如下的效果: 二. 阅读 ...

  8. DG部署(主库rac)--rman 异机恢复方式

    环境信息 操作系统版本:AIX6.1 数据库版本:   11.2.0.3(psu5) 主库为双节点rac DG部署方案: 1.检查数据库是否支持Data Guard(只有企业版才支持DG) SQL&g ...

  9. 牛客小白月赛5 G 异或(xor) 【找规律】

    题目链接: https://www.nowcoder.com/acm/contest/135/g 题目描述 从前,Apojacsleam家的水族箱里,养了一群热带鱼. 在这几条热带鱼里,Apojacs ...

最新文章

  1. Python哈希函数hashlib
  2. 1095 Cars on Campus (30 分)【难 / 模拟 未完成】
  3. massive_record exmple
  4. 浏览器对F5的微观处理
  5. Optical_Flow(4)
  6. python3连接数据库失败_python3使用pymysql连接mysql数据库报Keyerror
  7. Scrum之 评审会议
  8. 自定义异常的两种方式
  9. 怎样使用pyinstaller打包
  10. vxp grandle 自动更新应用
  11. Vue结合uni-app实现手机端的扫码功能
  12. tomcat 的 catalina.out 日志文件,禁用
  13. 可行性分析报告 模板
  14. Computer Network Note
  15. VC++使用OD反汇编引擎(非BC做DLL或LIB包装)
  16. 云词:让英语学习平步青云
  17. android手机——刷机(卡刷、线刷)
  18. 小米助手android6版本暂未支持,小米助手连接不上小米5怎么办 小米助手显示不支持安卓6.0连接不上小米5解决方法...
  19. 识别iPad1还是iPad2
  20. 基于C语言的图书管理信息系统的设计与实现

热门文章

  1. 推荐实践:结对Review
  2. Oracle的配置文件
  3. 英语版计算机教室规章制度,计算机教室规章制度
  4. html让图片自动旋转360,html5 canvas 360图片旋转制作抽奖转盘代码
  5. linux怎么安装scp服务,linux下ssh安装与scp命令使用详解
  6. 攀达计算机usb控制器,[如何用注册表打开被屏蔽的USB插口.docx
  7. Java 算法 素数分解
  8. 鸿蒙服务卡片-哔哩哔哩弹幕姬
  9. 两位小数乘两位小数竖式_冀教版五年级数学上册2.4小数乘小数微课视频 | 练习...
  10. scrapy爬虫循环抓取同一个url,避免同一URL使爬虫关闭