IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> [C++] 模仿Android开发的FLTK类 -> 正文阅读

[移动开发][C++] 模仿Android开发的FLTK类

FLTKAPP.hpp

#ifndef FLTKAPP_HPP_
#define FLTKAPP_HPP_
#include "FL.h" //上篇文章的那个
#include <fstream>
#include <string>
#include <map>
#include <vector>
#include <sstream>
#include <regex>

enum WIDGET_ITEM_TYPE
{
	FL_NO_WIDGET,
	FL_BUTTON,
	FL_INPUT,
	FL_OUTPUT
};

struct WidgetItem
{
	public:
	Fl_Button * button = NULL;
	Fl_Input * input = NULL;
	Fl_Output * output = NULL;
	int type = FL_NO_WIDGET;
	std::string name = "";
	
	public:
	int x = 0;
	int y = 0;
	int w = 0;
	int h = 0;
	std::string label;
	
	public:
	bool compareName(std::string name2)
	{
		return (name == name2);
	}
	void createWidget()
	{
		switch(type)
		{
			case FL_BUTTON:
			button = new Fl_Button(x,y,w,h,label.data());
			break;
			case FL_INPUT:
			input = new Fl_Input(x,y,w,h,label.data());
			break;
			case FL_OUTPUT:
			output = new Fl_Output(x,y,w,h,label.data());
			break;
		}
	}
	void* getWidget()
	{
		switch(type)
		{
			case FL_BUTTON:
			return (void*)button;
			break;
			case FL_INPUT:
			return (void*)input;
			break;
			case FL_OUTPUT:
			return (void*)output;
			break;
		}
	}
};

class Activity
{
	private:
	Fl_Window * _window;
	std::map<std::string,WidgetItem*> _widgets_map;
	bool _loadWidgets(std::vector<std::string> widgets)
	{
		for(auto widget : widgets)
		{
			if(!_loadWidget(widget))
			return false;
		}
		return true;
	}
	bool _loadWidget(std::string str)
	{
		std::regex reg("type=(.*),name=(.*),x=(.*),y=(.*),w=(.*),h=(.*),label=(.*)");
		std::smatch m;
		bool search_success = std::regex_search(str,m,reg);
		if(search_success == 0)
		return false;
		
		WidgetItem wi;
		
		if(m[1] == "FL_BUTTON")
		{
			wi.type = FL_BUTTON;
		}
		else if(m[1] == "FL_INPUT")
		{
			wi.type = FL_INPUT;
		}
		else if(m[1] == "FL_OUTPUT")
		{
			wi.type = FL_OUTPUT;
		}
		
		wi.name = m[2];
		wi.x = stoi(m[3]);
		wi.y = stoi(m[4]);
		wi.w = stoi(m[5]);
		wi.h = stoi(m[6]);
		wi.label = m[7].str();
		
		wi.createWidget();
		_widgets_map.insert(std::pair<std::string,WidgetItem*>(wi.name,&wi));
		
		return true;
	}
	
	public:
	Activity()
	{
		_window = new Fl_Window(600,800,"");
	}
	
	public:
	bool setContentWidget(std::string widgetStr)
	{
		std::vector<std::string> widgets;
		for(int i = 0;i < widgetStr.size();i++)
		{
			std::stringstream str;
			for(;widgetStr.at(i) != '\n';i++)
			{
				str << widgetStr.at(i);
			}
			widgets.push_back(str.str());
		}
		return _loadWidgets(widgets);
	}
	bool setContentWidgetFromTXT(std::string path)
	{
		std::stringstream str;
		std::ifstream fin;
		fin.open(path);
		str << fin.rdbuf();
		fin.close();
		return this->setContentWidget(str.str());
	}
	void* findWidgetByName(std::string name)
	{
		return _widgets_map.at(name)->getWidget();
	}
};

#endif

test.cpp

#include <FL/Fl.H>
#include "FLTKAPP.hpp"
class MainActivity : public Activity
{
	public:
	MainActivity() : Activity()
	{
		this->setContentWidget("widget.txt");
		Fl_Button * button1 = (Fl_Button*)this->findWidgetByName("button1");
		button1->callback([](Fl_Widget * widget,void* data)
		{
			Fl_Button * button1 = (Fl_Button*)widget;
			button1->label("666");
		},this);
	}
};
int main()
{
	MainActivity ma; //机动装甲(Mobile ARMOUR)(确信)
	return 0;
}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 11:02:31  更:2021-07-14 11:02:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 5:23:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码