# demo **Repository Path**: huiyicc/demo ## Basic Information - **Project Name**: demo - **Description**: 炫彩界面库 - 示例 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 8 - **Created**: 2020-11-07 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 简介 - 界面库设计器与编程语言结合, 高度集成化开发, 提高开发效率, 减少工具切换, 减少代码输入, 降低重复工作 - 炫彩编程python风格精简语法, 支持全中文开发,轻量级开发环境, c++运行效率 - 帮助想学编程,又不懂英文的用户 - 帮助业余编程人员学习编程 - 帮助个人开发者简单快速开发软件 - 帮助专业程序员更好的享受编程 - 从入门 ->到进阶 -> 到大神, 适合不同层次专业或业余编程人员, 个人或团队开发 - 炫彩IDE 集界面设计 编码 编译 调试 发布, - 未来将支持跨平台,跨语言 - 编程开发学习一个工具就够了,不必浪费精力学习其他编程语言和工具 >UI, 编码, 集成, 可视化, 简单, 快速, 运行效率,中文,英文, 从入门到大神之路 ---------- - *.xh 特殊头文件 包含外部C/C++头文件, 声明外部函数,数据类型, 宏定义 - *.xc 源文件 源代码文件 - 代码对齐TAB: 强制使用TAB对齐代码块, 不可用空格对齐 - pass: 空行占用 - 支持与C++代码混合, 支持调用外部DLL ## 特性 - 炫彩编程IDE,集成化, UI可视化, 减少开发中工具的切换, 增加集成度, 智能化, 减少重复工作 - 内置炫彩界面库支持 - 支持中文编程, 支持英文编程, 满足不同的人群 - 新的语法和封装, 相比C++入门更简单, 去除头文件及前置声明概念, 精简语法, 减少代码输入量 - 与C++相同的性能, 本身底层就是C++编译 - 可扩展 支持与C++代码混合, 支持调用DLL, C++的库都可以拿来用 - 支持UNICODE, x64 - python 代码风格, 代码更加精简整洁 - 未来支持跨平台, 支持转换为其他编程语言程序 - 代码编辑器双模式; 支持代码模式(纯文本)与代码表格模式(类似易语言代码表格)切换 #### 环境安装 ##### 下载IDE 炫彩QQ群共享下载, 群号:1653999 ##### 环境设置 将 "data\VC\VC14.0-Debug-DLL\\" 目录下DLL文件复制到: "C:\Windows\\" 或者""C:\Windows\System32\\" 或者 添加到环境变量PATH里 (如果已安装了VC14 可忽略) 模块文件夹路径: data\VC\XC\ >发布Release模式下编译的exe, 默认是静态编译, 不依赖VC环境DLL >默认带的运行环境vs2015 - VC14.0, 如果使用其他VC版本环境需修改配置文件 "data\config\config.config" ### 运算符 \+ | 加 |--|--| \- | 减 \* | 乘 / | 除 = | 等于 %| 求余 ++ | 自增1 \-\- | 1 自减1 += | 加等于 -= | 减等于 == | 等于 |--|--| != | 不等于| \< | 小于| \> | 大于| \<= | 小于等于 \>= | 大于等于 && | 逻辑与 |--|--| \|\| | 逻辑或 ! | 取反 & | 位与 |--|--| \| | 位或 \<\< | 位左移 \>\> | 位右移 #### 注释 单行注释 ```c 整型 a //单行注释 ``` 多行注释(开发中...) ```c 整型 a /* 多行注释内容 整型 b 整型 c */ 整型 d 整型 e ``` #### [+]流程控制 ##### 如果...否则 if...else ```c //如果 判断条件 // 条件成立 //否则 // 条件不成立 整型 a = 1 整型 b = 2 如果 a == 1 调试输出("a==1 成立") //此语句将被执行 否则 调试输出("a==1 不成立") 如果 (a==1) && (b==2) //当 a=1 并且 b=2 时 条件成立 pass ``` ##### 循环 while ```c //循环 条件 // 执行代码 整型 i=0 循环 i<5 调试输出(i) i++ ``` ##### 变量循环 for ```c 变量循环 整型 i=0; i<3; i++ 调试输出(i) ``` ##### 计次循环 for ```c 计次循环 整型 i=0; 3 //变量i: 为循环索引; 数字3: 为循环次数; 当i=0时循环3次(0,1,2), 当i=1时循环2次(1,2) 调试输出(i) //输出索引 i 的值 ``` ##### 列表循环 for //普通数组循环 ```c 整型 数组A[3]={0} 列表循环 整型 i; 数组A //将循环3次 0-3; 变量i: 接收当前索引值, 数组A: 数组变量 调试输出(数组A[i]) ``` //动态数组循环 ```c 动态数组<整型> 数组A // 尖括号<>内, 可以是任意数据类型, 比如: 整型, 文本, 指针, 对象; 理解为C++的模板 数组A.添加项(1) 数组A.添加项(2) 数组A.添加项(3) 列表循环 整型 i; 数组A 调试输出(数组A[i]) ``` //字典循环 ```c 字典<整型, 整型> 字典A 字典A[1]=10 字典A[2]=20 字典A[3]=30 列表循环 迭代器 迭代器项; 字典A //迭代器项: 接收当前返回的结果 调试输出( 迭代器项.键, " | ", 迭代器项.值) //打印当前项的键和值 ``` #### [+]程序入口 ##### 控制台程序 示例 ```c 整型 入口函数() 调试输出("你好! 炫彩编程") 返回 0 ``` ##### 窗口程序 示例 ```c #库文件 "xcgui.lib" #头文件 "xcgui.h" #宏定义 SW_SHOW 5 HWINDOW hWindow=0 回调 整型 My_EventBtnClick(整型* pbHandled) //按钮点击事件 调试输出("按钮-关闭窗口") *pbHandled=1 返回 0 整型 入口函数_窗口() XInitXCGUI() //初始化界面库 hWindow=XWnd_Create(0,0,500,300, "xcgui-window") //创建窗口 如果 hWindow HELE hButton=XBtn_Create(20,60,80,25,"关 闭",hWindow) //创建按钮 XBtn_SetTypeEx(hButton, button_type_close) XEle_RegEventC(hButton,XE_BNCLICK,My_EventBtnClick) //注册事件 XWnd_AdjustLayout(hWindow) //调整布局 XWnd_ShowWindow(hWindow,SW_SHOW) //显示窗口 XRunXCGUI() XExitXCGUI() 返回 0 ``` #### 数据类型 - 整型(int) 4字节 - 短整型(short) 2字节 - 字节型(byte) 1字节 - 浮点型(float) 4字节 - 文本(字符串操作对象) - 指针 4字节 例如: wchar_t*, int* - 字符型(wchar_t) 2字节 - 无类型(void) - 数组 - 字典<键,值> - 类/结构体 ```c 整型 type_int= 1000 短整型 type_short=100 字节型 type_byte=10 浮点型 type_float=3.14 整型 type_array_int[10]={0} 文本 type_text = "123-ABC" 调试输出("测试_数据类型 整型: ", type_int, " 大小:",sizeof(type_int)) 调试输出("测试_数据类型 短整型: ", type_short, " 大小:",sizeof(type_short)) 调试输出("测试_数据类型 字节型: ", type_byte, " 大小:",sizeof(type_byte)) 调试输出("测试_数据类型 浮点型: ", type_float, " 大小:",sizeof(type_float)) 调试输出("测试_数据类型 数组: ", type_array_int, " 大小:",sizeof(type_array_int)) 调试输出("测试_数据类型 文本: ", type_text, " 大小:",sizeof(type_text)) ``` #### [+]数据容器 ##### 高级数组 高级动态数组 待补充... ##### 高级字典 待补充... ##### 数组 ```c 整型 整型数组[10]={0} //定义10个成员的整型数组, 初始每个成员值为0 浮点型 浮点数组[10]={0} ``` ##### C++容器字典 std::map 对应模块文件 map_wrap.h 用户可修改文件对其扩展 字典<键,值> 变量名 ```c 字典<键,值> 变量名 ``` ```c 字典<文本, 整型> 字典A 字典A["aaa"] = 1 字典A["bbb"] = 2 字典A["ccc"] = 3 整型 大小 = 字典A.大小() //取字典成员数量 整型 a = 字典A["aaa"] //取键"aaa" 对应的值 迭代器 迭代器_查找_a = 字典A.查找("aaa") //或者: 字典<文本, 整型>::迭代器 迭代器_查找_a = 字典A.查找("aaa") 如果 迭代器_查找_a != 字典A.空值() 调试输出("找到") 否则 调试输出("未找到") 列表循环 迭代器 迭代器项; 字典A 调试输出( 迭代器项.键, " | ", 迭代器项.值) ``` ##### C++动态数组 std::vector 对应模块文件vector_wrap.h 用户可修改文件对其扩展 动态数组<类型> 变量名 ```c 动态数组<整型> 数组A; 数组A.添加项(1) 数组A.添加项(2) 数组A.添加项(3) 整型 数组大小 = 数组A.大小() 列表循环 整型 i; 数组A 调试输出(数组[i]) 列表循环 整型 i; 数组A 调试输出(数组A[i]) ``` #### 函数 function 如果不检查参数, 声明函数时参数"..." ```c 返回值 函数名(...) //IDE不检查参数; 例如当参数类型为任意型时或参数数量不固定时 ``` ```c 整型 相加(整数 a, 整数 b) 返回 a+b 事件 整型 按钮点击事件(整型* pbHandled) 调试输出("按钮被点击") 返回 0 ``` #### [+]类 class 构造函数 和 析构函数没有返回值 ```c 类 测试类 整型 _a //成员变量 构造() //构造函数 _a = 10 析构() //析构函数 pass //pass占位行, 没有实际意义 整型 Add(整型 a, 整型 b) //成员函数 返回 a+b+_a 测试类 测试类_ 整型 c = 测试类_.Add(1,2) 调试输出(c) ``` ```c 类 大小 整型 宽度 整型 高度 大小 大小_ 调试输出("宽度=", 大小_.宽度) 调试输出("高度=", 大小_.高度) ``` ##### 类的继承 ```c 类 CA 无返回 Add(整型 a, 整型 b) 调试输出("CA::Add()") 类 CB 继承 CA 无返回 Add() 调试输出("CB::Add()") 整型 入口函数_窗口() CB cb cb.Add() CA* ca = &cb //取地址 ca->Add(1,3) 返回 0 ``` ##### 类虚函数 虚函数: 子类有的调用子类, 子类没有的调用父类的 子类重写虚函数可以覆盖父类的函数功能 析构函数也可以为虚函数, 好处是用基类的指针释放时自动调用子类析构函数,否则子类析构函数不会被触发 ```c 类 CA 虚函数 无返回 Add(整型 a, 整型 b) 调试输出("CA::Add()") 类 CB 继承 CA 虚函数 无返回 Add() CA::Add() //可强制调用父类中的CA::Add()函数 调试输出("CB::Add()") 整型 入口函数_窗口() CB cb cb.Add() //调用CB类中的Add()函数 CA ca= cb //转换对象类型为CA, 因为CA是CB的基类,所以可以转换 ca.Add() //调用CB类中的Add() 函数 //因为CB类重写了CA类中的Add()函数, 所以覆盖了CA::Add() 返回 0 ``` #### new delete 操作 ```c RECT* rc=new RECT //new 对象 rc->left=10 //赋值 调试输出(rc->left) //打印输出 delete rc //删除对象 ``` #### 取变量地址 取普通变量地址 ```c 整型 a = 10 //定义整型变量 整型* pA = &a //取变量地址 调试输出(pA) //打印地址 调试输出(*PA) //打印值 ``` 取类变量地址 ```c RECT rc //定义对象 RECT* pRc = &rc //取对象地址 调试输出(&rc) //打印对象地址 ``` #### 定义宏(内部定义宏 与 声明外部宏) ```c #宏定义 SW_SHOW 5 #外部宏 SW_SHOW //声明在外部文件中已经存在的宏 ``` #### [+]技巧 ##### 调试输出 ```c 调试输出("打印一行信息到输出窗口") 整型 a 文本 text="你好! 炫彩编程" 调试输出("a=",a, ", text=", text) //打印变量值 ``` ##### 占位空行 pass ```c 无返回 函数名() pass ``` ##### 一行写多条语句 分号";"代表后面语句不换行 冒号":"代表后面语句是子集块 ```c 整型 a = 1; 整型 b = 2 //一行写多条语句用 ; 分开 整型 c = a + b ``` ##### 子集块不换行写法 ```c 整型 a=10 如果 10==a : 调试输出("a==10"); 调试输出("条件成立") //将子集块写在同行 如果 10!=a : 调试输出("a!=10"); 否则 : 调试输出("a==10") ``` ##### 多段字符串拼接 ```c 文本 text = "123""456" "789" //结果为:text = "123456789" ``` #### [+]扩展 ##### 包含外部头文件 ```c #头文件 //系统头文件, 不解析文件内容 #头文件 "xcgui.h" //普通头文件, 解析文件内容 #库文件 "xcgui.lib" //静态库或动态库lib文件 ``` ##### 外部函数及类型声明 如果某个函数已存在外部代码或库中, 只需要在在*.xh文件中声明类型 例如: 声明外部函数, 参数中 "..."三个点代表不检查参数,省略掉 ```c int sizeof(...) //声明外部函数 void Sleep(int dwMilliseconds) ``` 声明外部类 ```c 类 RECT 类 CSize ``` 声明外部基础类型, 或未知类型 ```c #外部类型 HDC //声明外部定义的类型 #外部类型 HANDLE //声明外部定义的类型 ``` ##### 调用外部库 DLL >例如: 调用炫彩界面库DLL DLL-头文件: xcgui.h DLL-lib文件:xcgui.lib ![](https://img-blog.csdnimg.cn/20190817180429632.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21lbmdmZWlnbw==,size_16,color_FFFFFF,t_70) ##### 与C++代码混合 与C++代码混合使用方法 test.h 头文件 ```c int add(); //声明函数 ``` test.cpp 源文件 ```c #include "common__.h" //包含预编译 int add() { OutputDebugString(L"123\n"); return 99; } ``` 或者在*.xh文件中声明外部函数 在*.xc源文件中 包含c++ 头文件和源文件, 调用c++代码中的add()函数 ![](https://img-blog.csdnimg.cn/20191002155815560.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21lbmdmZWlnbw==,size_16,color_FFFFFF,t_70) ##### 模块封装及别名 >参考示例: IDE中 pugixml_wrap.h 模块包装; 位置: data\VC\XC\pugixml 声明(类, 变量, 函数, 函数参数名) 别名, 以便在IDE中使用中文名称调用 ```c //@rename 别名(别名, 别名, ...) ``` 对已存在的(类, 函数)别名, 使用多行注释包裹声明代码 ```c /*@声明 代码... */ ``` 在头文件中声明包含cpp文件,(加入编译文件列表) 如果直接在(*.h)文件中包含cpp文件, 当多个文件中包含该(*.h)文件时会造成重复的实现, 例如:函数已在(*.obj)模块中已存在,造成重复 所以这里采用特殊方法声明要包含的cpp文件, IDE编译代码时, 自动连接cpp文件,避免重复的实现 ```c /*@声明 #src "pugixml.cpp" //例如包含cpp文件 pugixml.cpp */ ``` ###### 模块包装与别名示例 ```c //假如 CStringBase 类已存在,原型如下 class CStringBase { public: int GetSize(); const wchar_t* GetString(); void AddString(const wchar_t* pString) }; ``` 模块文件名: test_wrap.h 可将此文件放入IDE目录下 data\VC\XC\test_wrap.h 或项目文件夹里 ```c //test_wrap.h //定义CMyString类 继承CStringBase类, 并且对基类CStringBase中的函数别名 //CMyString 类中实现查找功能函数 Find(), 添加成员变量 m_status #ifndef MY_TEST_WRAP_H #define MY_TEST_WRAP_H /*@声明 #src "test_wrap.cpp" //包含cpp文件 */ //@rename 字符串类 class CMyString : public CStringBase { public: /*@声明 //@rename 获取大小() int GetSize() //@rename 获取字符串指针() const wchar_t* GetString(); //@rename 增加字符串(字符串) void AddString(const wchar_t* pString) */ //@rename 查找(字符串) int Find(const wchar_t* pString) { int ret = -1; //查找代码... return ret; } //@rename 状态 int m_status; //状态 }; #endif ``` ###### 调用模块 调用模块示例 ```c #头文件 "test_wrap.h" //包含模块 整型 测试模块() 字符串类 字符串="abc" 字符串.增加字符串("123") 整型 位置 = 字符串.查找("123") 返回 字符串.获取大小() ``` #### [+]炫彩编程 - IDE -界面库 ![](https://img-blog.csdnimg.cn/20190930233133908.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21lbmdmZWlnbw==,size_16,color_FFFFFF,t_70) 左侧的函数列表, 当保存代码时更新 ##### 新建项目(炫彩编程) ![](https://img-blog.csdnimg.cn/20190930232952775.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21lbmdmZWlnbw==,size_16,color_FFFFFF,t_70) ##### UI布局文件生成代码类 ![](https://img-blog.csdnimg.cn/20190930232124732.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21lbmdmZWlnbw==,size_16,color_FFFFFF,t_70) ##### UI生成事件代码 ![](https://img-blog.csdnimg.cn/20190930232423138.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21lbmdmZWlnbw==,size_16,color_FFFFFF,t_70) ![](https://img-blog.csdnimg.cn/20190930232318681.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21lbmdmZWlnbw==,size_16,color_FFFFFF,t_70) ##### 项目属性-Debug/Release 设置Debug\Release编译选项 ![](https://img-blog.csdnimg.cn/2019100915560311.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21lbmdmZWlnbw==,size_16,color_FFFFFF,t_70) ##### 资源文件 resource.rc >新建项目 勾选炫彩编程, 在项目文件夹下,将生成RC资源文件和程序图标 用记事本工具打开编辑文件 resource.rc 可添加 图标, 版权 等内容 默认第一个图标为exe文件图标 如果项目目录下没有资源文件,那么编译时忽略rc资源, 资源文件固定名称为 [resource.rc] ##### 用VS修改RC资源文件 如果不会编辑RC文件, 可以用VS修改 注意: vs中rc资源文件是包含 "resource.h" 头文件, 因为炫彩不需要,所以没有 自己把这一行代码注释取消,随便新建个 "resource.h"文件, 不然VS会提示找不到"resource.h" ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191023002234903.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21lbmdmZWlnbw==,size_16,color_FFFFFF,t_70) #### 转到定义 在变量上按鼠标右键弹出菜单->转到定义, 跳转到指定文件行 #### 搜索 点击搜索按钮, 输入搜索内容, 查找结果在输出窗格显示 #### 调试 IDE 待编辑...