第11章 GUI Page426~427 步骤七 设置直线前景色

2023-12-24 14:52

本文主要是介绍第11章 GUI Page426~427 步骤七 设置直线前景色,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

运行效果:

关键代码:

接口类 IItem中新增29,30行两个设置前景色纯虚方法

//item_i.hpp 抽象“图形元素”接口定义
#ifndef ITEM_I_HPP_INCLUDED
#define ITEM_I_HPP_INCLUDED#include <wx/gdicmn.h>
#include <wx/dc.h>class IItem
{
public://作为接口,记得要有虚析构virtual ~IItem(){}//使用DC画出自己//注意:“画”的方法不应该修改对象的数据virtual void Draw(wxDC& dc) const = 0; //纯虚函数//开始在某一点上绘图virtual void OnDrawStart(wxPoint const& point) = 0; //纯虚函数//结束在某一点virtual void OnDrawEnd(wxPoint const& point) = 0; //纯虚函数//设置于取得颜色的方法,纯虚方法,
//    virtual void SetFontColor(wxColor const& color) = 0;
//    virtual wxColor const& GetFrontColor() const = 0;//书上的方法,有错误,应该为:virtual void SetForegroundColor(wxColor const& color) = 0;virtual wxColor const& GetForegroundColor() const = 0;};#endif // ITEM_I_HPP_INCLUDED

新增头文件item_with_foreground_color.hpp

类ItemWithForegroundColor作为中间层,继承类IItem, 实现两个设置前景色的方法

//item_with_foreground_color.hpp
#ifndef ITEM_WITH_FOREGROUND_COLOR_HPP_INCLUDED
#define ITEM_WITH_FOREGROUND_COLOR_HPP_INCLUDED#include "item_i.hpp"class ItemWithForegroundColor : public IItem
{
public:ItemWithForegroundColor(): _foregroundColor(*wxBLACK){}virtual void SetForegroundColor(wxColor const& color){this->_foregroundColor = color;}wxColor const& GetForegroundColor() const{return _foregroundColor;}
private:wxColor _foregroundColor;
};#endif // ITEM_WITH_FOREGROUND_COLOR_HPP_INCLUDED

LineItem类修改为:

修改LineItem类的Draw()方法

主菜单下新建 “设置菜单”,其下建立“前景色”菜单项

wxMyPainter类新增一个私有成员并初始化

为“前景色”菜单项绑定回调函数

当设置前景色时,回调函数会把选择的颜色值,传递给  _foregroundColor

在鼠标按下的函数中设置图形的前景色:

第195行的代码,会把设置的颜色,传递给ItemWithForegroundColor对象(中间层)的

_foregroundColor属性值,当创建_newItem对象时,可以用来设置画笔的颜色

这篇关于第11章 GUI Page426~427 步骤七 设置直线前景色的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

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

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

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf

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

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

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

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