当前位置: 首页 > 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. 有待解决的问题

  • 已经连上的线不能取消
  • 引脚之间只能通过直线连接,不能自动变成折线

相关文章:

基于MFC绘制门电路

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

C—指针初阶(2)

如果看完阁下满意的话,能否一键三连呢,我的动力就是大家的支持与肯定,冲! 二级指针 我们先看概念以及作用:用来存放一级指针的地址的指针 先看例子,我们逐一分析 我们先分析上面那个“1” 标注那里&#x…...

Linux 基础环境的开发工具以及使用(下)

1. make / Makefile 自动化构建的工具 1)引入 在我们进行一些大型的工程的时候,代码量是极其大,当我们代码在进行一系列的编译的时候,难免会出现一些错误,当我们对错误进行一系列的更改之后,难道我们需要…...

constexpr、const和 #define 的比较

constexpr、const 和 #define 的比较 一、定义常量 constexpr 定义:constexpr用于定义在编译期可求值的常量表达式。示例:constexpr int x 5;这里,x的值在编译期就确定为5。 const 定义:const表示变量在运行期间不能被修改&…...

期末复习-Hadoop综合复习

说明 以下内容仅供参考,提到不代表考到,请结合实际情况自己复习 目录 说明 一、题型及分值 二、综合案例题-部署Hadoop集群 或 部署Hadoop HA集群 案例 1:Hadoop 基础集群部署 案例 2:Hadoop HA 集群部署 案例 3&#xff…...

禁用SAP Hana错误密码锁定用户功能

背景 公司项目适配多种数据库其中包含SAP Hana,由于有同事的数据库连接工具保存了某个在用的数据库的旧密码,导致时不时会被锁用户。通过查询官方文档已解决,这里统一记录一下。 禁用密码锁定方法 以下按系统管理员和普通用户的解法分别列…...

Ubuntu 22.04加Windows AD域

说明:   Ubuntu 22.04系统通过realmd,sssd加入到 Active Directory 域,并为域用户配置sudo权限。同时为方便用户使用为Ubuntu系统安装wps与sogou中文输入法。 1. Ubuntu 22.04加入Windows AD域 1.1 首先配置网络,Ubuntu系统能…...

qt实现窗口的动态切换

先说一下整体思路。页面布局两个widget然后再将定时器和按钮关联起来。 定时器发出信号的时候,随着信号,不断地重新设置widget的宽度,实现窗口的动态切换。 具体操作如下: class QtWidgetsApplication4 : public QMainWindow {…...

第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题②

第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题② 模块A 基础设施设置与安全加固(200分)A-1 登录安全加固(Windows, Linux)A-2 Nginx安全策略(Linux)A-3日志监控(Windows)A-4中间件…...

【Vulkan入门】09-CreateFrameBuffer

目录 先叨叨git信息关键代码VulkanEnv::FindHostVisitbaleMemoryTypeIndex()TestPipeLine::CreateFramebuffers() 与网上大多数文章不同,其他文章基本上都使用窗口框架(X11、GLFW、WSL等)提供的surface来显示Vulkan渲染出的图像。我认为那样会…...

FPGA设计-Vivado的Off-Chip Termination设置问题

目录 简介: 设置规则: output strength(输出驱动器的电流驱动能力) slew rate(输出电压压摆率) Pull type(上下拉类型) On-chip termination(输入端/输出端的内置片上端接电阻) 输出端接电阻配置 简介: 经常遇到在FPGA设计时,很多人很迷惑这些关于硬件的终…...

GC常见垃圾回收算法,JVM分代模型

如何判断是垃圾?引用计数器和Root可达性算法 如何进行清除?标记清除、复制、标记整理 堆分代模型?Eden,Surevivor,Tenuring 一个对象从创建到消亡的过程? 对象什么时候进入老年代? 一、GC&a…...

面试题整理(三)

芯冰乐知识星球入口:...

可视化建模以及UML期末复习----做题篇

一、单项选择题。(20小题,每小题2分,共40分) 1、UML图不包括( ) A、用例图 B、状态机图 C、流程图 D、类图 E、通信图 答案:C、流程图 UML中不包括传统意义上的流程图,流程图通常是指B…...

PostGIS分区表学习相关

在Postgresql中对空间数据进行表分区的实践_postgresql空间数据-CSDN博客文章浏览阅读1.4k次,点赞26次,收藏21次。Postgresql的分区功能允许将一个大表按照特定的规则拆分成多个小的分区表。这样做的好处在于,在查询数据时,可以只…...

JavaEE 【知识改变命运】03 多线程(3)

文章目录 多线程带来的风险-线程安全线程不安全的举例分析产出线程安全的原因:1.线程是抢占式的2. 多线程修改同一个变量(程序的要求)3. 原子性4. 内存可见性5. 指令重排序 总结线程安全问题产生的原因解决线程安全问题1. synchronized关键字…...

Flash操作 原子写 非原子写

原子和非原子操作 读、修改、写操作 对一个变量 A 1或上0x01,C语言写法: A 1| 0x01; 通过编译转成汇编后: LOAD R1,[#A 1] ; Read a value from A 1 into R1 MOVE R2,#0x01 ; Move the absolute constant 1 into R2 OR R1,R2 ; Bitwise O…...

厦门凯酷全科技有限公司怎么样?

随着短视频和直播带货的兴起,抖音电商平台迅速崛起,成为众多品牌和商家争夺的新战场。在这个竞争激烈的市场中,如何抓住机遇、实现销售增长,成为了每个企业面临的挑战。厦门凯酷全科技有限公司(以下简称“凯酷全”&…...

ubuntu 18.04设置命令行历史记录并同时显示执行命令的时间

以下相关详细信息请参考ubuntu官网。 在Ubuntu 18.04中,查看特定用户(例如用户broko)的命令行历史记录,并同时显示执行命令的时间,可以通过修改用户的shell配置文件来实现: • 设置HISTTIMEFORMAT环境变量…...

推荐系统里面的多任务学习概述

1. 概述 多任务学习(multi-task learning),本质上是希望使用一个模型完成多个任务的建模,在推荐系统中,多任务学习一般即指多目标学习(multi-label learning),不同目标输入相同的fe…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

day52 ResNet18 CBAM

在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版

1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...