第11章 GUI Page429~430 步骤八 支持“十字”形

2023-12-24 16:36

本文主要是介绍第11章 GUI Page429~430 步骤八 支持“十字”形,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

运行效果:

关键代码:

新增头文件:

//item_cruciform.hpp
#ifndef ITEM_CRUCIFORM_HPP_INCLUDED
#define ITEM_CRUCIFORM_HPP_INCLUDED#include <cmath>
#include "item_line.hpp"class CruciformItem : public IItem
{
public:CruciformItem(): _startPosition(0, 0), _endPosition(0, 0){}virtual void SetForegroundColor(wxColor const& color){_hor_line.SetForegroundColor(color);_ver_line.SetForegroundColor(color);}virtual wxColor const& GetForegroundColor() const{return _hor_line.GetForegroundColor();}void Draw(wxDC& dc) const;//在鼠标按下函数中调用,所以鼠标按下的点即为_startPositionvirtual void OnDrawStart(wxPoint const& point){_startPosition = point;}virtual void OnDrawEnd(wxPoint const& point);private:LineItem _hor_line, _ver_line;wxPoint _startPosition, _endPosition;
};#endif // ITEM_CRUCIFORM_HPP_INCLUDED

新增源文件:

//item_cruciform.cpp
#include "item_cruciform.hpp"void CruciformItem::OnDrawEnd(wxPoint const& point)
{//在鼠标移动和抬起时调用,所以鼠标抬起时的点即为_endPosition_endPosition = point;//重新调整水平线和垂直线的起点和终点int dx = std::abs(_endPosition.x - _startPosition.x);//两点水平距离_hor_line.OnDrawStart(wxPoint(_startPosition.x - dx, _startPosition.y));_hor_line.OnDrawEnd(wxPoint(_startPosition.x + dx, _startPosition.y));int dy = std::abs(_endPosition.y - _startPosition.y);_ver_line.OnDrawStart(wxPoint(_startPosition.x, _startPosition.y - dy));_ver_line.OnDrawEnd(wxPoint(_startPosition.x, _startPosition.y + dy));
}void CruciformItem::Draw(wxDC& dc) const
{_hor_line.Draw(dc);_ver_line.Draw(dc);
}

新增“十字形”菜单项

注意:菜单项类型是Radio,否则不能被选中

新增创建十字形的代码:

这篇关于第11章 GUI Page429~430 步骤八 支持“十字”形的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/532413

相关文章

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

Python3.6连接MySQL的详细步骤

《Python3.6连接MySQL的详细步骤》在现代Web开发和数据处理中,Python与数据库的交互是必不可少的一部分,MySQL作为最流行的开源关系型数据库管理系统之一,与Python的结合可以实... 目录环境准备安装python 3.6安装mysql安装pymysql库连接到MySQL建立连接执行S

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建

Python下载Pandas包的步骤

《Python下载Pandas包的步骤》:本文主要介绍Python下载Pandas包的步骤,在python中安装pandas库,我采取的方法是用PIP的方法在Python目标位置进行安装,本文给大... 目录安装步骤1、首先找到我们安装python的目录2、使用命令行到Python安装目录下3、我们回到Py

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步