[V0.8.5]

1、插件及窗口设计器
-修复鼠标左右键互换后无法拖动和拉伸问题
-修复窗口设计器中切换标签页控件中出现残影的BUG
-修复在父容器粘贴或移动控件坐标跑飞的BUG
+编译开始前Hook构建命令中的BeforeExecute让其先检查所有窗口标签页的保存
-修复编译后重新选中控件方向键无法移动的BUG
-修复通过窗口属性下拉选中的控件无法使用快捷键的BUG
+让uidllmeta.exe在引入Windows宏时能够解析生成常量数值到元信息(修复进度条、滑块条的设计器问题)
+更新MCP中的agent提示内容
+优化暗黑模式的体验

2、基础库代码级
2.1 BECore:
-修复 ToBytes 对非const版char*/charW* 误处到模板(包括补上了StrU8与BR),给ToInt/ToShort/ToLong/ToFloat/ToDouble 加了空指针保护以及W版转换增加缓冲区长度限制,避免栈溢出。
-修复列表框在设计器中只有最多2个项目显示的BUG(特别提醒SplitV2所给的分割字节集不得给上字面量它不具备长生命周期导致分割第二个字节集之后失效,推荐使用BNULLW这个全局常量,且现已将如Bytes({1,2})的字面量构造转向堆内存模式)
2.2 BEWin32UI:
-修复选择夹使用自定义背景色时没铺满背景的问题
-修复外形框、图片框等父容器承担子容器背景透明的渲染链路(让如单选框/选择框等得以支持背景透明)
-修复编辑框在窗口拉伸后的背景透明问题
-调整标签默认为纵向居中对齐
-修复图片框在非缩放时超框的BUG

 


[V0.8]

1、插件及启动器
+VS快速启动器支持列出下拉项目快速选择
+对中文拼音输入支持中文之后继续混写拼音
+编辑-区域折叠功能增强,若向上搜尽也没有region块时则收缩的是它当前最外层的函数/方法
+模块查看器加入平坦视图模式(默认以文件视图,搜索框旁边的按钮可自由切换模式)
+模块支持当原始bec路径不存在时切换到白易安装目录的用户模块搜集目录中继续检索
+首发Win32窗口设计器、系统级支持网格布局(目前处于实验性质)

2、基础库代码级
+封装C++17标准库自带线程相关操作为中文版到系统模块(多线程std:互斥锁、读写锁、条件锁、线程级事件信号、自动套锁(std::lock_guard)、原子整数操作,信号量的封装等开始搞进程通信写消息队列时再说了)
2.1 BECore:
+BECore加入SplitV2/分割V2(若要支持按2字节单位分割需用此方法并自行循环获取,注意原分割字节集依旧按1字节单位匹配)
-修复BytesStr中部分方法在取strlen前未判断空指针语义的问题
2.2 BEWin32Base:
+文件保存对话框新增[默认后缀]选项
+加入dbg_flog(可选参数文件名,不过注意它与默认的dbg_log行为不一样,dbg_log是固定的文件名logs\dbg.log它会在程序启动之前会被清空并在整个程序生命周期内可持续向尾写入,而dbg_flog指定的文件名总会向尾进行日志内容写入)
2.3 BEWin32UI:
+重构UI基类,现在真正的UI基类是组件基类(无HWND,直接继承它时可获得最小化的C++组件实现,如时钟.cpp,但有父容器来管理销毁它的生命周期),而窗口基类会继承于组件基类,同时连锁的父容器中的子组件列表现已改为组件基类;对创建所需的参数均采用聚合初始化作为标准(现已无需构造函数,但必须保证x,y,w,h这4参必须在首位)
-将窗口基类的析构方法调整为虚析构、将异步销毁重构为virtual bool 销毁(bool 同步 = false);,且默认情况下总是使用异步销毁(可对比参考原先输入框.cpp中的实现示例)
-正式采用在窗口类中添加组件类设定为匿名类(后续从XML翻译生成的原生C++代码均采用此方案)
+加入网格(grid)布局
-修复选择框、单选框文字背景未使用反射消息的问题
-修复编辑框的密码模式时未垂直居中
-修复容器类在其窗口大小改变时未及时刷新内部的子控件BUG
2.4 Sciter-Html
-将SciterUI原本的创建()现改为绑定()方法,补充将sciter支持为子窗口模式创建

3、调试与构建
+MakeBEC工具新增规则 BE_INLINE区域,在源文件中纯内联式进行包含解析(区域中仅可用#include),最终仅生成一份头文件。
+引入clib-mangle.exe,用于支持C库改编到C++符号

 


[V0.7]

1、插件及启动器
+VS快速启动器在返回上级目录后选中退回前的目录到超列
-修复插件导入模块的源文件时偶然意外添加到根筛选器目录的问题
-资源表中路径相关已知BUG
-修复bebuild对VS-IDE找不到项目时应回退msbuild的逻辑问题
-修复对系统模块安装时删除目录延迟问题导致极少数情况解压不全的BUG
+对私有模块添加命名空间的符号改编给出良好的带处理进度GUI界面
+正式对VS解决方案加入右键菜单[BEVC++改名与复制项目],同时新增是否连同首目录及sln的修改
(参考:https://wiki.xbcsoft.com/BEVCpp/?file=VS项目复制与改名工具.html)

2、基础库代码级
2.1 BECore:
+_BSA/_BSW 给到const Bytes&类型
+补上bytes.reset(const Bytes&)
+令Arraybe的[]操作符在DEBUG版下走at()方法(即进行越界检测则抛出异常)
+对be::function支持使用函数返回类型及可变参数包:
    template<typename Ret, typename... Args, size_t STACK_CAP>
    class function<Ret(Args...), STACK_CAP>;
2.2 BEWin32Base:
+新增文件日志(类)(可有两种模式的日志存储模式,单文件、按日期+周期分类到文件夹)
+新增创建目录Ex、写到文件Ex,表示支持创建多级目录
+文件_枚举对回调模式新增附加参数指针
-将 判断是否为相对路径 改为 是否为相对路径,取绝对路径 且对这两参数路径现在已经修正为StrX
-修复读配置项引进StrX后的BUG
2.3 BEWin32UI:
+标记_取/置整数 现已调整为size_t(即在32位上是4字节,64位上是8字节)
+可视_(true) 调整为ShowWindow(, SW_SHOWNA);
+对激活()方法给到两种方式,激活类型=0 默认仅设置线程的活动窗口,非0则使用常规激活
+新增 位置是否最小化()、位置是否最大化()、位置还原()
2.3 其他内建库
+将JSONie的取/置属性接口形式与当前SciterObj对齐(可使用分隔符),现已对JSONie、XMLite、RegExpie的模块封装采用cpp源文件级发布

2.4 【★首发引进Sciter-Html作为自绘界面库☆】:
+在__demoTemplates已提供BE-SciterUI(完全自绘)、BE-SciterUI(原生外观)初始创建模板
+更改main函数新入口规范(见上述例子)
+已实现的BEModExamples例子展示:
    ●JS相关(原生C++T_MAP与JS引用T_OBJECT对象、执行脚本/调用函数/注入回调、字节集交互/嵌入内存图片、DOM元素操作、JS模块化、虚拟DOM/模板引擎/数据驱动视图/共享同步刷新、协程化并发演示);
    ●窗口相关(异形窗口/分层透明、嵌入Win32原生控件、弹出层窗口/自绘菜单/托盘菜单、自定增强四周拉伸、窗口获焦失焦指定不同外层边框/阴影、DWM毛玻璃特效、离屏快照/滚动区域);
    ●组件化拆分案例(仿QQ启动百叶窗渐出-启动特效典范、Metro主题-可复用组件);
    ●资源拦截重定向(可针对URL指定内存数据返回)
+支持两种方式编译资源和使用模式:
    SciterUI::参数 cs;
    //本工程已将启动目录设置为$(ProjectDir)\out
#ifdef _DEBUG
    cs.文件_html = "index.html";
#else
    cs.内存_zip = R::htmZip;
#endif
//打包内存zip已在Release版集成链接期调用out\__!packZipLib.bat

3、调试与构建
3.1 -BEWin32UI中对x64库的编译此前失误给到全程序优化,现已去掉(一来是发现在x64编译的程序中出现类方法的导出表,二来也是为了ABI兼容性)
3.2 +现已支持cpp源文件当作封装模块时可以使用EXP导出C++类,白易主程在导入时会自动检测这类cpp源文件从而在插件级对链接时期进行hook、将该obj进行导出表的屏蔽(注意此操作不影响其他常规编译单元中DLL的导出表,仅限于模块中cpp当场编译出的obj)
3.3 +在封装白易模块时,推荐将"原生库"(如curl、openssl等)的源文件或包含头文件放进BEMod中(因为模块工程中新建的项目其MakeBEC内部配置就是默认排除BEMod的)

3.4 给调试用的_CWinDbg宏正式更改为DBG(注意没有前缀"_")便于“选择(DBG,a,b)”使用:
-移除窗口程序中使用控制台的VS-CWinDbg配置,取而代之对白易管理启动器所有的新建项目但凡是Debug模式下的都加入了DBG=1这个全局配置宏的设定(在Release下但凡引入了BECore的编译单元都会检测但凡DBG在全局没定义的话则自动引进DBG=0,故DBG该符号一定会存在)——已测在release下经编译优化0开销不产生另一分支的代码
-将原先cw_print、cw_printf更名为dbg_print、dbg_printf,此前调试输出()该全局函数的英文名debug()保持不变
+对coutlog这个远程调试输出的库统一绑定于此(即定义了DBG的话才进行生成实际调用)
+给DBG宏家族加入新的调试工具函数dbg_log()(该函数是基于文件日志类引申出的be::log全局对象它将在当前目录下给到dbg.log文件的写入)

PS:~为什么不统一用VS自带的"_DEBUG"宏,稍微解释一下这么做的原因
系统自带的_DEBUG这个宏在Release下它是未定义那么则无法使用“选择(DBG,a,b)”一行去书写(会报该符号不存在),此外在Release模式下该DBG宏我们也可以手动进行定义也能让其进行运行时相关调试输出(而不依赖系统的_DEBUG,系统自带的若自己轻易在Release内定义了_DEBUG反而会更加危险),且还想支持Release版下也能使用DBG宏进行coutlog的远程调试输出

4、AI-Agent
+对SciterUI加入编写HTML兼容性避坑说明向导
+增强BEMcpServ.exe常驻进程的保活检测机制
-已删去原先cw_print的建议而改为dbg_log(在MCP实践中更推荐AI使用此方案直接写日志文件的形式去看输出,因为有些AI它在关掉进程后压根就看不到输出或有输出缓冲区的问题)
+告知AI对当前项目目录优先在out文件夹内进行资源的存放(建议开发者需手动将程序运行的工作目录更改为$(ProjectDir)\out)
+调整AI对当前VS配置不再局限于检查配置名是否为此前的CWinDbg(当然这个配置项现已被废除),而是检测当前项目配置是否具备DBG的宏(因为是模块工程时一键从控制台切换过来的source也可能具有DBG宏),假如DBG不存在则应自行创建输出的日志文件(通过白易自带的"文件日志"类)

(参考:https://wiki.xbcsoft.com/BEVCpp/?file=更多MCP操作技巧.html)

若在用户电脑中找得到CDB调试器:X:\Program Files (x86)\Windows Kits\10\Debuggers\...\cdb.exe 则也可采用调试输出(即:OutputDebugString)

(参考:https://wiki.xbcsoft.com/BEVCpp/?file=PDB符号定位源代码的调试技巧.html、https://wiki.xbcsoft.com/BEVCpp/?file=CDB自动化AI调试定位异常行号.html)

 


[V0.6]

-修正白易系统库的版本号设定问题,此前有打算将白易插件和白易系统库分开独立进行维护,所以一开始设定将库版本为1.0本身没什么问题(后期若频繁更新的话也会很自然地快速来到2.0、3.0...),但迫于现实问题日更或周更变得不可能,现在基本更新频率都至少是月更(除非有严重影响使用问题或安全漏洞),同时也是为了保持与插件版本号同步所以要将库版本统一修正到0.6版本(况且白易插件目前都还没来到1.0,所以库版本会给人一种错觉)

+对VS插件加入自动检测更新版本功能(默认启动后3秒执行检测,可在菜单栏帮助中永久取消)

+当前版本具体更新如下:

1、BECore库:
1.1 将基础类型别名与基础元编程组件从BytesStr.hpp中独立到bebase.hpp中
1.2 正式推荐采用c_StrA代替作为常引用风格的写法(const AutoS& a),去除AutoS是此前const AutoS&的不规范别名命名,统一改为c_AutoStr
 
1.3 对AutoStr加以重视(为1.5规范打下基础),
     ·如以下可加入这两种类型转换
          operator char*() const { }
          operator charW*() const { }
     在一些非常量指针的情况下可自动转换(原先仅能常指针,考虑到win32API的便利性所以加入)
     ·加入len()取AutoStr其文本长度的函数
 
1.4 修改对自定义结构体输出的规则
     现在已经不再需要在结构体中重载operator AutoStr,而是统一改为提供__AutoStr__魔法函数的全局重载即可被白易的格式化体系接管(好处是对于RECT这种不能在自身加重载运算符的也能进行自动转文本,且也不再需要be::命名空间),如下自定义例子:
struct Point { int x; int y; };
AutoStr __AutoStr__(const Point& pt) {
    return sprintF("Point{%d,%d}", x, y);
}
 
1.5 基于AutoStr继承出StrX
     ·它同样具备跨编码自动转码缓存的能力,但它约束了万能模板的构造函数,这是避免手写 A/W 双版本接口的极简替代方案
     ·规范文本扩展函数API的设计中,但凡使用上跟文件路径相关(或不影响性能的高级函数)的参数均可使用StrX进行设计
已调整的函数如下:文件操作::打开文件、寻找文件:: 等文件操作、[磁盘目录操作.cpp,环境存取.cpp]中所有函数、多文件对话框、读/写配置项、创建进程/运行、取/置剪辑板文本、位图::从文件创建...
     ·全局StrX operator+(c_StrX a, c_StrX b) {},这使得在混合字符集编码下进行自动化拼接,例如:可以直接编写 "让W版字符串" + strw + "可直接拼接A版字符串",同理,A版字符串也可以直接这样混合拼接。
 
1.6 对 Bytes、StrA/W/X、AutoStr 加入重载operator bool(),现在直接在自身中使用if(),即可快速判断内容是否为空(原先需要依赖size()或len()或==""来判断)
1.7 添加一些宏:choose(选择)、multichoose(多项选择)、引号(QUOTE)、左引号(LQUOTE)/右引号(RQUOTE)、换行符(统一为\r\n)、换行N(为\n)、换行R(为\r)、平台换行(仅WIN32上\r\n,Linux上\n)。
由于已经给到StrX,即便没有做W版的引号这些也没关系。
 
2、BEWin32Base库新增函数:
+对信息框的按钮类型加入中文翻译,其枚举型为MB::
+文件读写.cpp:判断是否为相对路径、取绝对路径,修正 读/写配置项、位图::从文件创建 中不支持相对路径的问题
+磁盘目录操作.cpp:目录是否存在
 
3、BEWin32UI:
-对编辑框控件在不设置多行模式下默认对文字内容保持垂直居中(与易语言保持一致)
-取消 事件_尺寸被改变 中的LOWORD(lParam)、HIWORD(lParam)参数投递,这两实际上是窗口的客户区大小(不包括边框在内的整窗大小,与白易自带的宽度/高度会有歧义)该事件现已改为无参投递(需要获取客户区大小,可使用 取用户区大小())。
+对所有窗口组件坐标和大小从int换为了float(顺带uidllmeta.exe也更新了这一规则),对dpi、rdpi加入RECTF、SIZEF的支持(现在要简单识别是物理像素还是虚拟像素可简单通过带Float的版本去区分)
+有些原生控件的属性不能后期动态更改(如编辑框的是否允许多行),经验证在原版易语言中的做法实际上是销毁原控件重新创建新控件,白易对这方面也做了相同修复。
+绘制上下文类中新增画笔、画刷类
+图片框支持对ICO/CUR的显示背景透明、尽管不支持PNG但新增了置图片(hBmp,maskBmp)的重载(可通过GDIPlus模块那边得到PNG的位图句柄)、位图.cpp中的位图类也同样支持这二者的载入、新增光标类
+在窗口基类中拦截WM_WINDOWPOSCHANGED消息并即时更新窗口的位置和大小到白易C++的成员属性
+重构Win32菜单的创建流程,子菜单支持从rc资源载入、可修改自身所在父菜单中的标题
 
4、扩展组件库
+在C++这边基于白菜设计的对象序列化/反序列化标准实现通信/贮存所用到的FB库
+加入XMLite解析模块、修改了JSONie模块的部分接口
+加入coutlog用作远程控制台调试输出(使用例子/BEModExamples/coutlog)
+基于BEWin32UI去开发扩展界面库一:超级列表框、树型框
 
5、BEMain快速创建启动器
-修复安装目录内Projects文件夹不存在
-修复删除项目时还有残留.vs目录
-修复新项目GUID重复问题
+集成VS项目改名与复制器到本软件的右键菜单中
+对已经存在的VC-sln工程支持在内继续去新建模板项目(详情文档:https://wiki.xbcsoft.com/BEVCpp/?file=%E7%99%BD%E6%98%93%E4%B8%BB%E7%A8%8BVS%E7%AE%A1%E7%90%86%E5%99%A8.html)
 
6、MakeBEC模块制作器:
-修复生成的头文件逻辑:编译期模板的全局变量不应对其进行extern导出
-修复删除项目时还有残留.vs目录
+对即将进行C++命名空间改编的子模块预先做了【完整扫描模块内解析所有符号】,对导入的子模块【但凡不在自身模块内的符号均视为全局引用符号】则可以进行智能排除(有给到后期窗口编辑的提示),现在通常也不再需要//#beExcludeNamespaceSymbol这条注释指令单独进行全局类或结构体符号的排除。
 
7、bebuild工程项目构建:
+可在不打开VS-IDE的情况下采用内部配置好的msbuild模式直接构建项目
+新增命令行-newproj 项目名,在当前目录内新建一个项目(会得到以项目名的.cpp、.vcxproj,两个文件)
+对命令行-proj支持使用.vcxproj文件的绝对路径进行编译
(详情文档:AI入门自动编译VS项目.mht)
 

8、MCP服务器,
+文档教程网站中上线 [更多MCP操作技巧.mht、已知问题.mht] AI专栏文章
+改进AI提示词,让deepseek flash v4这样的普通模型能够通过白易窗口程序的设计测试(见B站视频演示)
+新增用户模块更新接口(这为使采用用户模块的工作流工程自动化测试更加方便,详情:更多MCP操作技巧.mht)
+新增临时C++项目新建接口(new_project,这让AI自己临时测试一些项目时非常方便,详情:更多MCP操作技巧.mht#newproj)
+优化AI对窗口程序的测试开发(会自行切换到CWinDbg模式采用cw_print打印测试)