热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

新手请教一个画圆的问题(进者有分)

问题描述:我在WindowsCE操作系统中,开发一个小程序,采用mfc基于对话框来编写。简单来说,就是程序中通过串口接收(下位机发过来的)一些命令。这些命令有“画点”“画线”“绘
问题描述:
    我在Windows CE操作系统中,开发一个小程序,采用mfc基于对话框来编写。
简单来说,就是程序中通过串口接收(下位机发过来的)一些命令。这些命令有
“画点”“画线”“绘制位图”“画矩形”“清屏(其实就是将对话框背景,更改
为全红色,或者全绿色,或者全蓝色)”等等。
    现在我在接收下位机通过串口发送过来的“清屏”指令之后,通过Invalidate
函数来刷新背景,在WM_CTLCOLOR消息响应函数中,返回一个相应颜色(红或者绿
或者蓝)的刷子来达到目的。
    不过,现在问题出现了。我通过上述方法,修改了对话框背景色之后。当我再次
接收到“画圆”指令,我通过Ellipse函数来画圆。我简单的贴一些代码上来:
	
         BYTE *pbuf = (BYTE*)wParam;
CClientDC dc(this);
int iColorR = pbuf[9], iColorG = pbuf[10], iColorB = pbuf[11];
int iRadius = pbuf[7]/16*1000 + pbuf[7]%16*100 + pbuf[8]/16*10 + pbuf[8]%16;
POINT ptOri = {0};
ptOri.x = pbuf[3]/16*1000 + pbuf[3]%16*100 + pbuf[4]/16*10 + pbuf[4]%16;
ptOri.y = pbuf[5]/16*1000 + pbuf[5]%16*100 + pbuf[6]/16*10 + pbuf[6]%16;
CPen pen(PS_SOLID, 1, RGB(iColorR, iColorG, iColorB));
CPen *pOldPen = dc.SelectObject(&pen);
RECT rc = {0};
rc.left = ptOri.x - iRadius;
rc.top = ptOri.y - iRadius;
rc.right = ptOri.x + iRadius;
rc.bottom = ptOri.y + iRadius;
dc.Ellipse(&rc);  // 绘制圆形
dc.SelectObject(pOldPen);

    这样总是会画一个内部由白色来填充的圆形。在我没有修改对话框背景色之前,通过Ellipse
函数是可以绘制一个只有边框,内部无填充的圆形。现在都变为了白色。我想应该是跟之前修改
对话框背景色时返回的那个指定颜色的画刷有关。但是更改背景又是必须的功能,画圆我又不想画
内部有白色填充的。请大侠们给小弟支招。我是一个刚刚入行的菜鸟。级别低,只有100分奉上。
但只要回帖的就有分数。分数会根据功劳大小而不同。多谢。

6 个解决方案

#1


CBrush brh(RGB(x,y,z));

CBrush* poldbrh = dc.selectobject(brh);
 dc.Ellipse(&rc);  // 绘制原型
    dc.SelectObject(pOldPen);
    dc.SelectObject(pOldbrh);

#2


dc.SelectStockObject(NULL_BRUSH);
dc.Ellipse(&rc);  // 绘制圆形

#3


SelectObject一个NULL_BRUSH

#4


在 WM_PAINT中做所有的绘图操作。

void OnPaint()
{
CPaintDC dc(this);

// 填充背景
dc.FillSolidRect(&rect, RGB(x,y,z));

// 根据绘图指令绘制图形

if (绘制圆)
{
dc.Ellipse(&rc); 
}
}

#5


一是问题太简单
二是VC/MFC板块坛友很热心
问题很多解决,尤其感谢2,3楼的大侠。
剩下时间,大家可以自由接分。
呵呵。
晚上9点前结贴。

#6


一是问题太简单
二是VC/MFC板块坛友很热心
问题很快解决,尤其感谢2,3楼的大侠。
剩下时间,大家可以自由接分。
呵呵。
晚上9点前结贴。

推荐阅读
  • 本文详细介绍了 org.apache.commons.io.IOCase 类中的 checkCompareTo() 方法,通过多个代码示例展示其在不同场景下的使用方法。 ... [详细]
  • 反向投影技术主要用于在大型输入图像中定位特定的小型模板图像。通过直方图对比,它能够识别出最匹配的区域或点,从而确定模板图像在输入图像中的位置。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 本文探讨了在 OpenStack 环境中使用虚拟机部署 Ceph 集群后,外部服务器通过浮动 IP 无法访问该集群的问题,并提供了详细的解决方案。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 如何使用Ping命令来测试网络连接?当网卡安装和有关参数配置完成后,可以使用ping命令来测试一下网络是否连接成功。以winXP为例1、打开XP下DOS窗口具体操作是点击“开始”菜 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 深入解析ESFramework中的AgileTcp组件
    本文详细介绍了ESFramework框架中AgileTcp组件的设计与实现。AgileTcp是ESFramework提供的ITcp接口的高效实现,旨在优化TCP通信的性能和结构清晰度。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 本文详细探讨了JavaScript中的作用域链和闭包机制,解释了它们的工作原理及其在实际编程中的应用。通过具体的代码示例,帮助读者更好地理解和掌握这些概念。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • JavaScript 中创建对象的多种方法
    本文详细介绍了 JavaScript 中创建对象的几种常见方式,包括对象字面量、构造函数和 Object.create 方法,并提供了示例代码和属性描述符的解释。 ... [详细]
  • Java中的基本数据类型与包装类解析
    本文探讨了Java编程语言中的8种基本数据类型及其对应的包装类。通过分析这些数据类型的特性和使用场景,以及自动拆装箱机制的实现原理,帮助开发者更好地理解和应用这些概念。 ... [详细]
  • 本文详细探讨了Java中的ClassLoader类加载器的工作原理,包括其如何将class文件加载至JVM中,以及JVM启动时的动态加载策略。文章还介绍了JVM内置的三种类加载器及其工作方式,并解释了类加载器的继承关系和双亲委托机制。 ... [详细]
author-avatar
丶沈丨灬de艳本人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有