GUI-Menu菜单实例(颜色+线型菜单)

运行代码:

//GUI-Menu菜单实例(颜色+线型菜单)
#include"std_lib_facilities.h"
#include"GUI/Simple_window.h"
#include"GUI/GUI.h"
#include"GUI/Graph.h"
#include"GUI/Point.h"struct Lines_window :Window
{Lines_window(Point xy, int w, int h, const string& title);Open_polyline lines;
private:Menu color_menu;Menu Line_style_menu;Button menu_button;Button Line_style_button;Button next_button;Button quit_button;In_box next_x;In_box next_y;Out_box xy_out;void change(Color c) { lines.set_color(c); }void change_Line_style(Line_style l) { lines.set_style(l); }void hide_menu() { color_menu.hide(); menu_button.show(); }void hide_Line_style_menu() { Line_style_menu.hide(); Line_style_button.show(); }static void cb_red(Address, Address);void red_pressed() { change(Color::red); hide_menu(); }static void cb_blue(Address, Address);void blue_pressed() { change(Color::blue); hide_menu(); }static void cb_black(Address, Address);void black_pressed() { change(Color::black); hide_menu(); }static void cb_solid(Address, Address);void solid_pressed() { change_Line_style(Line_style::solid); hide_Line_style_menu(); }static void cb_dash(Address, Address);void dash_pressed() { change_Line_style(Line_style::dash); hide_Line_style_menu(); }static void cb_dot(Address, Address);void dot_pressed() { change_Line_style(Line_style::dot); hide_Line_style_menu(); }static void cb_menu(Address, Address);void menu_pressed() { menu_button.hide(); color_menu.show(); }static void cb_Line_style_menu(Address, Address);void Line_style_menu_pressed() { Line_style_button.hide(); Line_style_menu.show(); }static void cb_next(Address, Address);void next();static void cb_quit(Address, Address);void quit();
};Lines_window::Lines_window(Point xy, int w, int h, const string& title):Window(xy, w, h, title),color_menu(Point(x_max() - 70, 40), 70, 20, Menu::vertical, "color"),Line_style_menu(Point(x_max()-190,40),70,20,Menu::vertical,"line style"),menu_button(Point(x_max() - 80, 30), 80, 20, "color menu", cb_menu),Line_style_button(Point(x_max()-190,30),100,20,"line style menu",cb_Line_style_menu),next_button(Point(x_max() - 150, 0), 70, 20, "Next point", cb_next),quit_button(Point(x_max() - 70, 0), 70, 20, "Quit", cb_quit),next_x(Point(x_max() - 310, 0), 50, 20, "next x:"),next_y(Point(x_max() - 210, 0), 50, 20, "next y:"),xy_out(Point(100, 0), 100, 20, "current(x,y):")
{color_menu.attach(new Button(Point(0, 0), 0, 0, "red", cb_red));color_menu.attach(new Button(Point(0, 0), 0, 0, "blue", cb_blue));color_menu.attach(new Button(Point(0, 0), 0, 0, "black", cb_black));Line_style_menu.attach(new Button(Point(0, 0), 0, 0, "solid", cb_solid));Line_style_menu.attach(new Button(Point(0, 0), 0, 0, "dash", cb_dash));Line_style_menu.attach(new Button(Point(0, 0), 0, 0, "dot", cb_dot));attach(color_menu);attach(Line_style_menu);attach(next_button);attach(quit_button);attach(next_x);attach(next_y);attach(xy_out);xy_out.put("no point");color_menu.hide();Line_style_menu.hide();attach(menu_button);attach(Line_style_button);lines.set_color(Color::black);attach(lines);
}void Lines_window::cb_red(Address, Address pw)
{reference_to<Lines_window>(pw).red_pressed();
}void Lines_window::cb_blue(Address, Address pw)
{reference_to<Lines_window>(pw).blue_pressed();
}void Lines_window::cb_black(Address, Address pw)
{reference_to<Lines_window>(pw).black_pressed();
}void Lines_window::cb_solid(Address, Address pw)
{reference_to<Lines_window>(pw).solid_pressed();
}void Lines_window::cb_dash(Address, Address pw)
{reference_to<Lines_window>(pw).dash_pressed();
}void Lines_window::cb_dot(Address, Address pw)
{reference_to<Lines_window>(pw).dot_pressed();
}void Lines_window::cb_menu(Address, Address pw)
{reference_to<Lines_window>(pw).menu_pressed();
}void Lines_window::cb_Line_style_menu(Address, Address pw)
{reference_to<Lines_window>(pw).Line_style_menu_pressed();
}void Lines_window::cb_quit(Address, Address pw)
{reference_to<Lines_window>(pw).quit();
}void Lines_window::quit()
{hide();
}void Lines_window::cb_next(Address, Address pw)
{reference_to<Lines_window>(pw).next();
}void Lines_window::next()
{int x = next_x.get_int();int y = next_y.get_int();lines.add(Point(x, y));stringstream ss;ss << '(' << x << ',' << y << ')';xy_out.put(ss.str());redraw();
}int main()
try
{Lines_window win(Point(100, 100), 600, 400, "lines");return gui_main();
}
catch (exception& e) {cerr << "error:" << e.what() << '\n';keep_window_open();return 1;
}
catch (...) {cerr << "Oops:unknown exception!\n";keep_window_open();return 2;
}

运行结果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/4085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS-27 前端数据请求方式;HTTP协议的解析;JavaScript XHR、Fetch的数据请求与响应函数;前端文件上传XHR、Fetch;安装浏览器插件FeHelper

目录 1_前端数据请求方式1.1_前后端分离的优势1.2_网页的渲染过程 – 服务器端渲染1.3_网页的渲染过程 – 前后端分离 2_HTTP协议的解析2.1_HTTP概念2.2_网页中资源的获取2.3_HTTP的组成2.4_HTTP的版本2.5_HTTP的请求方式2.6_HTTP Request Header2.7_HTTP Response响应状态码 3…

创建、发布npm包,并且应用在项目里面

实现一个函数去监听dom宽高的变化&#xff0c;并且发布NPM包&#xff0c;然后使用到项目中 步骤 1.5W3H 八何分析法 2.如何监听dom宽高变化 3.如何用vite 打包库 4.如何发布npm 一、NPM包新建过程 查看完整目录 1.生成 package.json npm init生成TS配置文件 tsconfig.js…

第二十一章:CCNet:Criss-Cross Attention for Semantic Segmentation ——用于语义分割的交叉注意力

0.摘要 全图像依赖关系为视觉理解问题提供了有用的上下文信息。在这项工作中&#xff0c;我们提出了一种称为Criss-Cross Network&#xff08;CCNet&#xff09;的方法&#xff0c;以更有效和高效的方式获取这种上下文信息。具体而言&#xff0c;对于每个像素&#xff0c;CCNet…

禁止浏览器自动填充密码功能,设置自动填充背景色。

禁止浏览器自动填充密码功能&#xff0c;设置自动填充背景色 1、禁止浏览器自动填充密码功能2、设置自动填充背景色&#xff08;阴影效果&#xff09; 1、禁止浏览器自动填充密码功能 text设置autocomplete“off” password设置 autocomplete“new-password” 两个一起设置&am…

Python Web框架 Flask 安装、使用

Python Web框架 Flask 安装 安装 Flask 框架 首先需要安装 Flask 框架, 可以通过以下命令安装: [rootlocalhost web]# pip3 install Flask Collecting FlaskDownloading Flask-2.0.3-py3-none-any.whl (95 kB)|██████████████████████████████…

websoket

websoket是html5新特性&#xff0c; 它提供一种基于TCP连接上进行全双工通讯的协议; 全双工通信的意思就是:允许客户端给服务器主动发送信息,也支持服务端给另一个客户端发送信息. Websoket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在we…

Appium: Windows系统桌面应用自动化测试(四) 【辅助工具】

[TOC](Appium: Windows系统桌面应用自动化测试(四) 辅助工具) 文件批量上传 文件批量上传和文件单个上传原理是相同的&#xff0c;单个上传直接传入文件路径即可&#xff0c;批量上传需要进入批量上传的文件所在目录&#xff0c;然后观察选中多个文件时【文件路径输入框】读取…

抖音seo源码-源代码开发搭建-开源部署(不加密)

抖音SEO矩阵系统源码开发功能模型是指在抖音平台上提高视频搜索排名的一种算法模型。该功能模型包括多个部分&#xff0c;如内容优化、用户交互、社交化推广等&#xff0c;通过对这些因素的优化和提升&#xff0c;达到提高视频搜索排名的目的。具体实现包括使用关键词、标签等优…

Elasticsearch--查询(nested、join)

nested 嵌套类型 数据的某个值是json、object对象&#xff1b;不再是简单的数据类型&#xff0c;或者简单数据类型的数组&#xff1b;那么还用之前的查询方式就有问题了。因为ES在存储复杂类型的时候会把对象的复杂层次结果扁平化为一个键值对列表 。此时&#xff0c;需要用n…

<Linux开发> linux开发工具-之-I2C TOOLS工具使用

&#xff1c;Linux开发&#xff1e; linux开发工具-之-I2C TOOLS工具使用 &#xff1c;Android开发&#xff1e; Android开发工具- 之-I2C TOOLS工具使用 &#xff1c;Linux开发&#xff1e;驱动开发 -之- Linux I2C 驱动 一 前言 在笔者的另一篇文章 &#xff1c;Android开…

MySQL 第七天作业 nosql作业

作业一&#xff1a;string list hash结构中&#xff0c;每个至少完成5个命令&#xff0c;包含插入 修改 删除 查询&#xff0c;list 和hash还需要增加遍历的操作命令 1、 string类型数据的命令操作&#xff1a; &#xff08;1&#xff09; 设置键值&#xff1a; set key1 re…

Spring Boot集成Redisson实现分布式锁

Spring Boot集成Redisson实现分布式锁 在分布式系统中&#xff0c;为保证数据的一致性和并发访问的安全性&#xff0c;我们经常会使用分布式锁来协调多个节点之间对共享资源的访问。Redisson是一个基于Redis的Java驻内存数据网格&#xff08;In-Memory Data Grid&#xff09;和…

centos 安装pyzbar

需求&#xff1a; 运行程序报错 ImportError: Unable to find zbar shared library 进程&#xff1a; 直接使用yum 安装 yum install python-devel && yum install zbar-devel 有时候会能成功&#xff0c;大多数时候python-devel 能成功但是 zbar-devel 会失败 下载…

TCP四次挥手过程

TCP 断开连接是通过四次挥手方式。 双方都可以主动断开连接&#xff0c;断开连接后主机中的「资源」将被释放&#xff0c; 刚开始双方都处于 establised 状态&#xff0c;假如是客户端先发起关闭请求&#xff0c;过程如下图&#xff1a; 第一次挥手&#xff1a;客户端打算关闭…

Ae 效果:CC Mr. Smoothie

风格化/CC Mr. Smoothie Stylize/CC Mr. Smoothie CC Mr. Smoothie&#xff08;平滑先生&#xff09;效果可以从一个图层上的两个点进行颜色采样&#xff0c;并将这个两点之间的颜色重映射到另一个图层上&#xff0c;可通过控制重映射的平滑度从而创建迷幻的外观效果。 ◆ ◆ …

JVM中的堆和栈到底存储了什么

JVM数据区 先上一张Java虚拟机运行时数据区中堆、栈以及方法区存储数据的概要图&#xff0c;如下所示&#xff1a; 然后我们来具体解析一下堆和栈 堆 堆是存储时的单位&#xff0c;对于绝大多数应用来说&#xff0c;这块区域是 JVM 所管理的内存中最大的一块。线程共享&#…

基于 ChatGPT 的 helm 入门

1. 写在最前面 公司最近在推业务上云&#xff08;底层为 k8s 管理&#xff09;&#xff0c;平台侧为了简化业务侧部署的复杂度&#xff0c;基于 helm 、chart 等提供了一个发布平台。 发布平台的使用使业务侧在不了解 helm 、chart 等工具的时候&#xff0c;「只要点点」就可…

在DELL/HP server的UEFI mode下指定ISO安装Ubuntu

1.重启系统 在蓝色界面出现提示后选择F2进入 然后保存设置即可 下面是惠普server的iol5界面 输入f9进入system utilities 选择ISO 选择reset

微服务系列文章 之 SpringCloud中遇到的一些bug

1、There was a problem with the instance info replicator 错误原因&#xff1a; 该服务尝试将自己作为客服端注册解决办法&#xff1a; 在application.yml配置文件中&#xff0c;设置 # 注册Eureka服务 eureka:client:# Eureka服务注册中心会将自己作为客户端来尝试注册它自…

Django实现接口自动化平台(十四)测试用例模块Testcases序列化器及视图【持续更新中】

相关文章&#xff1a; Django实现接口自动化平台&#xff08;十三&#xff09;接口模块Interfaces序列化器及视图【持续更新中】_做测试的喵酱的博客-CSDN博客 本章是项目的一个分解&#xff0c;查看本章内容时&#xff0c;要结合整体项目代码来看&#xff1a; python django…