# 炫彩IDE-集成开发环境. 中文编程语言+炫彩界面库 **Repository Path**: xcgui/demo ## Basic Information - **Project Name**: 炫彩IDE-集成开发环境. 中文编程语言+炫彩界面库 - **Description**: 炫彩IDE-集成开发环境. 中文编程语言+炫彩界面库 此处提供代码示例,教程,说明,以帮助学习使用 - **Primary Language**: C/C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: http://www.xcgui.com/ - **GVP Project**: No ## Statistics - **Stars**: 20 - **Forks**: 8 - **Created**: 2019-05-23 - **Last Updated**: 2024-12-24 ## Categories & Tags **Categories**: scripting-language **Tags**: None ## README ## 炫彩IDE 包含:炫彩UI设计器, 炫彩中文编程语言 此处提供代码示例,教程,说明,以帮助用户学习使用 http://www.xcgui.com/ QQ群: 2283812(3号群), 验证码:XCGUI 
更新日期:2021-02-06
#### 简介
- 界面库设计器与编程语言结合, 集成化开发, 提高开发效率, 减少工具切换, 减少代码输入, 降低重复工作
- 炫彩编程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
##### 环境设置
默认附带VC14开发库, 如果需要其他版本VC请自己修改配置,方法如下:
将 "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"
#### 数据类型
- 整型(int) 4字节
- 无符号整型(unsigned int, UINT) 4字节
- 布尔型(BOOL, int) 4字节
- 布尔型c(bool) 1字节
- 短整型(short, SHORT) 2字节
- 无符号短整型(unsigned short, USHORT) 2字节
- 字符型(wchar_t) 2字节
- 字符型A(char) 1字节
- 字节型(unsigned char, BYTE) 1字节
- 浮点型(double) 8字节
- 短浮点型(float) 4字节
- 文本(字符串操作对象,双字节编码)
- 文本A(字符串操作对象,多字节编码)
- 指针(\*) 4字节 例如: wchar_t\*, int\*
- 变整型(32位程序4字节, 64位程序8字节)
- 无符号变整型(32位程序4字节, 64位程序8字节)
- 无类型(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))
```
#### 运算符
| + | 加 |
|----|----|
|- | 减|
|* | 乘|
|/ | 除|
|= | 等于|
|%| 求余|
|++ | 自增1|
|\-\- | 1 自减1|
|+= | 加等于|
|-= | 减等于|
| == | 等于 |
|!= | 不等于|
|\< | 小于|
|\> | 大于|
|\<= | 小于等于|
|\>= | 大于等于|
|&& | 逻辑与|
| \|\| | 逻辑或|
|! | 取反|
|& | 位与|
|\| | 位或|
|^ | 异或|
|\<\< | 位左移|
| \>\> | 位右移|
#### 注释
单行注释
```c
整型 a //单行注释
```
多行注释(开发中...)
```c
整型 a
/* 多行注释内容
整型 b
整型 c
*/
整型 d
整型 e
```
#### 快捷键
F5: 编译和调试
F7: 编译
F9:下断点
F10: 单步
F11: 步入
TAB: 缩进
TAB + SHIFT: 减少缩进
"/": 注释/取消注释
Ctrl + G: 跳转到指定行
Ctrl + F: 搜索和替换
#### 区块操作
选择多行内容 鼠标右键菜单:
->注释
->增加缩进
->取消缩进
#### [+]流程控制
##### 如果...否则 if...else
```c
//如果 判断条件
// 条件成立
//否则
// 条件不成立
整型 a = 1
整型 b = 2
如果 a == 1
调试输出("a==1")
否则 如果 a==2
调试输出("a==2")
否则
调试输出("a==?")
如果 (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 //迭代器项: 接收当前返回的结果
调试输出( 迭代器项.键, " | ", 迭代器项.值) //打印当前项的键和值
```
##### 分支判断 switch
分支判断: 需要手动添加"跳出"命令
分支判断跳出: 自动跳出分支
```c
def 整型 测试_分支判断()
调试输出("测试_分支判断")
整型 a=1
分支判断 a
判断 1
调试输出(1)
跳出
判断 2
调试输出(2)
跳出
其他
调试输出(3)
a = 3
分支判断跳出 a
判断 1
调试输出(1)
判断 2
调试输出(2)
其他
调试输出(3)
返回 0
```
##### 跳出
```c
循环 TRUE
跳出 //跳出循环
```
##### 继续
```c
循环 TRUE
继续 //跳过后面循环内容, 直接跳转到下一次循环
调试输出("123")
```
#### [+]程序入口
##### 控制台程序 示例
```c
def 整型 入口函数()
调试输出("你好! 炫彩编程")
返回 0
```
##### 窗口程序 示例
```c
#库文件 "xcgui.lib"
#头文件 "xcgui.h"
#宏定义 SW_SHOW 5
HWINDOW hWindow=0
def 整型 回调 My_EventBtnClick(整型* pbHandled) //按钮点击事件
调试输出("按钮-关闭窗口")
*pbHandled=1
返回 0
def 整型 入口函数_窗口()
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
```
#### [+]数据容器
##### 高级数组
高级动态数组
待补充...
##### 高级字典
待补充...
##### 数组
```c
整型 整型数组[10]={0} //定义10个成员的整型数组, 初始每个成员值为0
浮点型 浮点数组[10]={0}
```
##### C++容器字典 std::map
对应模块文件 map_wrap.h; 用户可修改文件对其扩展
字典<键,值> 变量名
模块接口见IDE中模块
```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 用户可修改文件对其扩展
动态数组<类型> 变量名
模块接口见IDE中模块
```c
动态数组<整型> 数组A;
数组A.添加项(1)
数组A.添加项(2)
数组A.添加项(3)
整型 数组大小 = 数组A.大小()
列表循环 整型 i; 数组A
调试输出(数组[i])
列表循环 整型 i; 数组A
调试输出(数组A[i])
```
#### 函数 function
如果不检查参数, 声明函数时参数"..."
"def" 也可以使用中文 "函数"
```c
def 返回值 函数名(...) //IDE不检查参数; 例如当参数类型为任意型时或参数数量不固定时
```
```c
def 整型 相加(整数 a, 整数 b)
返回 a+b
def 整型 回调 按钮点击事件(整型* pbHandled)
调试输出("按钮被点击")
返回 0
```
#### [+]类 class
构造函数 和 析构函数没有返回值
```c
类 测试类
整型 _a //成员变量
def构造() //构造函数
_a = 10
def析构() //析构函数
pass //pass占位行, 没有实际意义
def 整型 Add(整型 a, 整型 b) //成员函数
返回 a+b+_a
测试类 测试类_
整型 c = 测试类_.Add(1,2)
调试输出(c)
```
```c
类 大小
整型 宽度
整型 高度
大小 大小_
调试输出("宽度=", 大小_.宽度)
调试输出("高度=", 大小_.高度)
```
##### 类的继承
```c
类 CA
def无返回 Add(整型 a, 整型 b)
调试输出("CA::Add()")
类 CB 继承 CA
def 无返回 Add()
调试输出("CB::Add()")
def 整型 入口函数_窗口()
CB cb
cb.Add()
CA* ca = &cb //取地址
ca->Add(1,3)
返回 0
```
##### 类虚函数
虚函数: 子类有的调用子类, 子类没有的调用父类的
子类重写虚函数可以覆盖父类的函数功能
析构函数也可以为虚函数, 好处是用基类的指针释放时自动调用子类析构函数,否则子类析构函数不会被触发
```c
类 CA
def 虚函数 无返回 Add(整型 a, 整型 b)
调试输出("CA::Add()")
类 CB 继承 CA
def 虚函数 无返回 Add()
CA::Add() //可强制调用父类中的CA::Add()函数
调试输出("CB::Add()")
def 整型 入口函数_窗口()
CB cb
cb.Add() //调用CB类中的Add()函数
CA ca= cb //转换对象类型为CA, 因为CA是CB的基类,所以可以转换
ca.Add() //调用CB类中的Add() 函数
//因为CB类重写了CA类中的Add()函数, 所以覆盖了CA::Add()
返回 0
```
#### 结构体 struct
```c
结构体 SIZE_1
整型 cx
整型 cy
def 整型 入口函数_窗口()
SIZE_1 size
size.cx=10
size.cy=20
```
#### 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 //声明在外部文件中已经存在的宏
```
#### [+]技巧
##### 调试输出(UNICODE编码)
UNICODE编码, 双字节 wchar_t*
```c
调试输出("打印一行信息到输出窗口")
整型 a
文本 text="你好! 炫彩编程"
调试输出("a=",a, ", text=", text) //打印变量值
```
##### 调试输出(多字节编码)
在字符串前面加字幕"A"代表多字节编码 char*
```c
调试输出(A"打印一行信息到输出窗口")
整型 a
文本A text=A"你好! 炫彩编程"
调试输出(A"a=",a, A", text=", text) //打印变量值
```
##### 占位空行 pass
```c
def 无返回 函数名()
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
#头文件