当前位置: 首页 > news >正文

基于MFC绘制门电路

MFC绘制门电路

1. 设计内容、方法与难点

本课题设计的内容包括了基本门电路中与门和非门的绘制、选中以及它们之间的连接。具体采用的方法是在OnDraw函数里面进行绘制,并设计元器件基类,派生出与门和非门,并组合了一个引脚类,在这些类中进行移动、选中、连线的绘图刷新。

课题的难点有两个方面,一是绘制,对于不同的元器件,大多数的方法都是一致的,所以应该考虑继承于一个元器件基类;但是,每一种元器件的绘制方法不一样,那么就可以考虑用到多态的思想,即构造一个绘制的纯虚函数,可以实现绘制的统一性。除此之外,元器件都应该包含有自身的输入输出引脚,所以元器件基类应该与引脚类组合使用。

二是图像刷新时的闪烁问题。对于元器件的移动、连线等动作,都会使得全屏重绘一次,所以就会出现图像的闪烁问题。解决方案:

  • 刚开始,我在所有鼠标事件响应函数末尾都加了重绘函数,所以就算鼠标只是在界面上移动不做任何点击操作都会出现闪烁问题,所以后来我在只有要进行操作、需要重绘的时候才加了重绘函数。
  • 在用鼠标拖动选中的元器件时,记录下上次的矩形选中框和现在这次的矩形选中框,从这两个矩形共8个顶点中选出最左上角和最右下角的顶点得到一个同时包含两个矩形的矩形框(否则就选最左下角和最右上角的顶点),然后调用InvalidateRect函数只绘制该矩形框区域,也可以改善闪烁问题。

2. 作品特色

本作品的特点一是界面美观整洁;二是解决了拖动元器件时鼠标始终在元器件左上角的问题,计算鼠标移动的偏移量来计算元器件的偏移量,用这种方法来解决此问题;三是改善了绘制闪烁的问题。

3. 项目类设计

4. 重点函数简介

左键点击响应函数:主要实现了选中元器件和引脚以及引脚之间的连线。

void CGateCircuitDemoView::OnLButtonDown(UINT nFlags, CPoint point)
{//当前已选中引脚,若鼠标又点击另一个元电器的引脚,则将两引脚连线LineToPin(point);if (m_flag){m_flag = false;return;}//根据鼠标点击的位置判断是否选中元器件或元器件上的引脚SelectGateAndPin(point);CView::OnLButtonDown(nFlags, point);
}

5. 运行结果

运行界面美观简洁,包括与门和非门的添加、选中、移动及引脚的连线等内容。

6. 有待解决的问题

  • 已经连上的线不能取消
  • 引脚之间只能通过直线连接,不能自动变成折线
http://www.lryc.cn/news/501202.html

相关文章:

  • C—指针初阶(2)
  • Linux 基础环境的开发工具以及使用(下)
  • constexpr、const和 #define 的比较
  • 期末复习-Hadoop综合复习
  • 禁用SAP Hana错误密码锁定用户功能
  • Ubuntu 22.04加Windows AD域
  • qt实现窗口的动态切换
  • 第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题②
  • 【Vulkan入门】09-CreateFrameBuffer
  • FPGA设计-Vivado的Off-Chip Termination设置问题
  • GC常见垃圾回收算法,JVM分代模型
  • 面试题整理(三)
  • 可视化建模以及UML期末复习----做题篇
  • PostGIS分区表学习相关
  • JavaEE 【知识改变命运】03 多线程(3)
  • Flash操作 原子写 非原子写
  • 厦门凯酷全科技有限公司怎么样?
  • ubuntu 18.04设置命令行历史记录并同时显示执行命令的时间
  • 推荐系统里面的多任务学习概述
  • 解决uview ui赋值后表单无法通过验证
  • 【GL010】C/C++总结(二)
  • 【合作原创】使用Termux搭建可以使用的生产力环境(五)
  • 初始数据结构
  • 给我的小程序加了个丝滑的搜索功能,踩坑表情包长度问题
  • MATLAB中的合并分类数组
  • ShardingSphere-JDBC
  • 企业如何选择远程控制软件来远程IT运维?
  • Meta Llama 3.3 70B:性能卓越且成本效益的新选择
  • 【银河麒麟高级服务器操作系统】修改容器中journal服务日志存储位置无效—分析及解决方案
  • go语言zero框架对接阿里云消息队列MQ的rabbit的配置与调用