当前位置: 首页 > 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…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

idea大量爆红问题解决

问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

pam_env.so模块配置解析

在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...