1.2.101
[toc]
1.2.101
> 2022-01-01 易IDE视觉库1.2.101正式版
> 修复:
> 1. 开启行号插件后切换代码选择夹导致行号显示异常的问题
> 2. 配色无法保存的问题
> 【注意】1.1的时候对clr文件是只读
> 1.2加上了写的权限, 请注意备份clr文件
> 易语言可能会出现配色错误的bug, 导致clr被修改
> 3. D2D资源失效会重新创建资源, 如果都失败, 那只会弹窗一次
> 开发环境没有出现过这个问题, 所以, 请把重现方法发送给006, 让006处理
> 4. 组件箱底部显示白条的问题
> 5. 新建主题可能失败的问题
> 6. 修复状态夹内的输出/提示等组件被隐藏的问题
> 7. 修复窗口设计器有可能不重画滚动条的问题
> 8.
>
> 新增:
> 1. 新增几个与重绘窗口相关的接口
> 可以一个命令让窗口拥有与视觉库相同的视觉效果
> 详情请参考开发文档: https://www.showdoc.com.cn/1503905757897784/8233446128916707
> 2. 树型框增加了Ctrl + F 搜索项目, F3搜索下一个, Shift + F3 搜索上一个
> 3.
新增函数
iDraw_DrawWindowProc 最低要求版本: v1.2.101
//////////////////////////////////////////////////////////////////////////
// 函数功能:
// 把窗口的消息转到重画窗口的过程去处理
// 参数:
// 参数1: 需要重画的窗口句柄
// 参数2: 需要处理的消息
// 参数3: 参数1
// 参数4: 参数2
// 参数5: 参数2
// 参数6: 窗口原来处理消息的回调地址
// 参数7: 接收处理完的消息返回值
// 返回值:
// 返回是否处理了这条消息
bool IDRAW_CALL iDraw_DrawWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, WNDPROC oldProc, LRESULT* pRet);
iDraw_DrawGetDefArg 最低要求版本: v1.2.101
//////////////////////////////////////////////////////////////////////////
// 函数功能:
// 获取默认参数
// 参数:
// 参数1: 需要重画的窗口句柄, 为0则在返回后自己给窗口句柄赋值
// 参数2: DRAW_STRUCT_WINDOW_ARGUMENT 结构指针, 内部把默认参数填充到这个结构里
// 返回值:
// 返回保存窗口信息的结构指针, 组件的各种配色信息都在这个结构中保存
bool IDRAW_CALL iDraw_DrawGetDefArg(HWND hWnd, LPDRAW_STRUCT_WINDOW_ARGUMENT arg);
iDraw_SubclassWindowEx 最低要求版本: v1.2.101
//////////////////////////////////////////////////////////////////////////
// 函数功能:
// 把一个顶层窗口重画成与视觉库相同的视觉效果
// 参数:
// 参数1: 需要重画的窗口句柄
// 参数2: DRAW_STRUCT_WINDOW_ARGUMENT 结构指针, 为0则使用与当前主题匹配的配色信息
// 返回值:
// 返回保存窗口信息的结构指针, 组件的各种配色信息都在这个结构中保存
LPOBJSTRUCT IDRAW_CALL iDraw_SubclassWindowEx(HWND hWnd, LPDRAW_STRUCT_WINDOW_ARGUMENT arg);
iDraw_CreateWindow 最低要求版本: v1.2.101
//////////////////////////////////////////////////////////////////////////
// 函数功能:
// 创建弹出式窗口, 这个窗口和视觉库有相同的视觉效果
// 参数:
// 参数1: 窗口的扩展样式, 详情请参考 CreateWindowEx 的说明
// 参数2: 窗口的标题, 为0则没有标题, unicode文本
// 参数3: 窗口的样式, 详情请参考 CreateWindowEx 的说明
// 参数4: 窗口在屏幕的左边位置
// 参数5: 窗口在屏幕的顶边位置
// 参数6: 窗口宽度
// 参数7: 窗口高度
// 参数8: 父窗口, 如果为0, 则没有父窗口, 如果有则创建的窗口始终在这个窗口之上
// 参数9: DRAW_STRUCT_WINDOW_ARGUMENT 结构指针, 为0则使用与当前主题匹配的配色信息
// 返回值:
// 返回保存窗口信息的结构指针, 组件的各种配色信息都在这个结构中保存
LPOBJSTRUCT IDRAW_CALL iDraw_CreateWindow(DWORD dwExStyle, LPCWSTR lpWindowName, DWORD dwStyle, int x, int y, int cx, int cy, HWND hWndParent, LPDRAW_STRUCT_WINDOW_ARGUMENT arg);
iDraw_Event_Draw 最低要求版本: v1.2.101
//////////////////////////////////////////////////////////////////////////
// 函数功能:
// 挂接窗口绘画事件, 只有调用 iDraw_SubclassWindowEx, 或者 iDraw_SubclassWindow 的窗口才有效
// 当窗口在绘画 系统图标, 标题, 系统按时, 会触发事件
// 参数:
// 参数1: 有调用过 iDraw_SubclassWindowEx 的窗口句柄, 或者 iDraw_SubclassWindow 返回的窗口句柄
// 参数2: 接收绘画回调的函数, 函数原型 = typedef bool(CALLBACK* PFN_SysDraw)(LPDRAW_PAINTSTRUCT dps);
// 参数3: 传递到回调函数里的参数
// 返回值:
// 返回是否成功
bool IDRAW_CALL iDraw_Event_Draw(HWND hWnd, PFN_SysDraw pfn, LPARAM param);
iDraw_Event_SysButtonClick 最低要求版本: v1.2.101
//////////////////////////////////////////////////////////////////////////
// 函数功能:
// 挂接系统按钮点击事件, 只有调用 iDraw_SubclassWindowEx, 或者 iDraw_SubclassWindow 的窗口才有效
// 参数:
// 参数1: 有调用过 iDraw_SubclassWindowEx 的窗口句柄, 或者 iDraw_SubclassWindow 返回的窗口句柄
// 参数2: 接收绘画回调的函数, 函数原型 = typedef bool(CALLBACK* PFN_SysBtnClick)(int id, LPARAM btnParam, BOOL isRButton, LPARAM param);
// 参数3: 传递到回调函数里的参数
// 返回值:
// 返回是否成功
bool IDRAW_CALL iDraw_Event_SysButtonClick(HWND hWnd, PFN_SysBtnClick pfn, LPARAM param);
iDraw_AddSysButton 最低要求版本: v1.2.101
//////////////////////////////////////////////////////////////////////////
// 函数功能:
// 添加系统按钮, 系统按钮索引是从右往左, 只有调用 iDraw_SubclassWindowEx, 或者 iDraw_SubclassWindow 的窗口才有效
// 参数:
// 参数1: 有调用过 iDraw_SubclassWindowEx 的窗口句柄, 或者 iDraw_SubclassWindow 返回的窗口句柄
// 参数2: 按钮的ID, 如果有相同ID, 则替换数值
// 参数3: 按钮数值
// 返回值:
// 返回新增加按钮的索引, 系统按钮索引是从右往左
int IDRAW_CALL iDraw_AddSysButton(HWND hWnd, int id, LPARAM param);
iDraw_DelSysButton 最低要求版本: v1.2.101
//////////////////////////////////////////////////////////////////////////
// 函数功能:
// 删除系统按钮, 系统按钮索引是从右往左, 只有调用 iDraw_SubclassWindowEx, 或者 iDraw_SubclassWindow 的窗口才有效
// 参数:
// 参数1: 有调用过 iDraw_SubclassWindowEx 的窗口句柄, 或者 iDraw_SubclassWindow 返回的窗口句柄
// 参数2: 要删除的按钮ID
// 参数3: 指明参数2是位置还是ID, DRAW_WND_ 开头常量
// 返回值:
// 返回是否删除成功
bool IDRAW_CALL iDraw_DelSysButton(HWND hWnd, int nPosition, int flags);
iDraw_Event_InsSysButton 最低要求版本: v1.2.101
//////////////////////////////////////////////////////////////////////////
// 函数功能:
// 插入系统按钮, 系统按钮索引是从右往左, 只有调用 iDraw_SubclassWindowEx, 或者 iDraw_SubclassWindow 的窗口才有效
// 参数:
// 参数1: 有调用过 iDraw_SubclassWindowEx 的窗口句柄, 或者 iDraw_SubclassWindow 返回的窗口句柄
// 参数2: 要插入的位置, -1则插入到最后(最左边), 0则插入到第一个(最右边)
// 参数3: 要插入的按钮ID
// 参数4: 按钮数值
// 参数5: 指明参数2是位置还是ID, DRAW_WND_ 开头常量
// 返回值:
// 返回是否插入成功
int IDRAW_CALL iDraw_Event_InsSysButton(HWND hWnd, int nPosition, int id, LPARAM param, int flags);
iDraw_SetButtonParam 最低要求版本: v1.2.101
//////////////////////////////////////////////////////////////////////////
// 函数功能:
// 设置系统按钮项目数值, 返回设置前的项目数值
// 参数:
// 参数1: 有调用过 iDraw_SubclassWindowEx 的窗口句柄, 或者 iDraw_SubclassWindow 返回的窗口句柄
// 参数2: 要设置的按钮ID或位置
// 参数3: 按钮数值
// 参数4: 指明参数2是位置还是ID, DRAW_WND_ 开头常量
// 返回值:
// 返回设置前的项目数值
LPARAM IDRAW_CALL iDraw_SetButtonParam(HWND hWnd, int nPosition, LPARAM param, int flags);
iDraw_GetButtonParam 最低要求版本: v1.2.101
//////////////////////////////////////////////////////////////////////////
// 函数功能:
// 获取系统按钮项目数值
// 参数:
// 参数1: 有调用过 iDraw_SubclassWindowEx 的窗口句柄, 或者 iDraw_SubclassWindow 返回的窗口句柄
// 参数2: 要获取的按钮ID或位置
// 参数3: 指明参数2是位置还是ID, DRAW_WND_ 开头常量
// 返回值:
// 返回按钮的项目数值
LPARAM IDRAW_CALL iDraw_GetButtonParam(HWND hWnd, int nPosition, int flags);
新增结构
IDRAW_STRUCT_WINDOW_ARGUMENT 最低要求版本: v1.2.101
typedef struct IDRAW_STRUCT_WINDOW_ARGUMENT
{
ARGB crNormal; // 正常颜色, ARGB颜色, 为0则不使用
ARGB crHot; // 点燃颜色, ARGB颜色, 为0则不使用
ARGB crDown; // 按下颜色, ARGB颜色, 为0则不使用
ARGB crBack; // 背景颜色, ARGB颜色, 为0则不使用
ARGB crBorder; // 阴影边框颜色, 为0则没有边框, ARGB颜色
ARGB crBorder_nf; // 阴影边框未激活时的颜色, 为0则没有边框, ARGB颜色
ARGB crShadow; // 阴影颜色, ARGB颜色, 为0则不使用阴影
ARGB crShadow_nf; // 阴影未激活时的颜色, ARGB颜色, 为0则不使用阴影
ARGB crTitle; // 标题已激活颜色, ARGB颜色
ARGB crTitle_nf; // 标题未激活颜色, ARGB颜色
HWND hWnd; // 需要处理的窗口
int sysbtnWidth; // 系统按钮宽度
int sysbtnHeight; // 系统按钮高度
BOOL isSubClass; // 是否内部子类化该窗口, 为false则外部调用 iDraw_DrawWindowProc 把需要处理的消息传递进来
BOOL isUnicode; // 窗口是否为Unicode窗口, 为true则使用W版函数
BOOL isCasualMove; // 窗口随意移动, 为false则只有在标题栏中才能移动
BOOL isDrawIcon; // 是否绘画图标, 如果不绘画图标, 鼠标在图标位置点击不会出现菜单, 标题也会占用图标的位置
BOOL isDrawDefBtn; // 是否绘画默认的按钮, 如果为true, 则根据窗口风格, 加入系统按钮, 按钮的ID是 SC_ 开头的常量
int nMinWidth; // 最小窗口宽度
int nMinHeight; // 最小窗口高度
LPCANVAS hCanvas; // 绘画句柄, 外部提供一个绘画句柄, 如果不提供, 则内部会创建一个
LPEX_FONT hFont; // 绘画标题使用的字体, 如果外部不提供, 内部会创建一个
LPEX_BRUSH hbrTextTitle; // 绘画标题使用的字体, 如果外部不提供, 内部会创建一个
LPEX_BRUSH hbrTextTitle_nf; // 绘画标题使用的字体, 如果外部不提供, 内部会创建一个
}*LPIDRAW_STRUCT_WINDOW_ARGUMENT;
IDRAW_STRUCT_DRAWSTRUCT 最低要求版本: v1.2.101
// 绘画的结构
typedef struct IDRAW_STRUCT_DRAWSTRUCT
{
HWND hWnd; // 窗口句柄
LPCANVAS hCanvas; // 画布句柄
DRAW_STAGE stage; // 绘画阶段
const RECT_F* rc; // 绘画的矩形位置
int id; // 绘画系统按钮时使用, 这个表示当前绘画的按钮ID
STATE state; // 状态, 系统按钮使用
LPARAM param; // 项目数值, 绘画事件绑定的项目数值
LPCWSTR lpszTitle; // 绘画标题时使用的标题文本
LPEX_IMAGE hIcon; // 绘画系统图标使用的图标
LPEX_BRUSH hbrText; // 绘画标题使用的画刷
}*LPIDRAW_STRUCT_DRAWSTRUCT;
新增常量
枚举常量 DRAW_STAGE 最低要求版本: v1.2.101
// 绘画的阶段
enum DRAW_STAGE
{
DRAW_STAGE_BUTTON_BEGIN, // 绘画系统按钮开始, 即将绘画系统按钮, 返回true则不使用内部的绘制
DRAW_STAGE_BUTTON_END, // 绘画系统按钮结束, 按钮已经绘画完毕
DRAW_STAGE_ICON_BEGIN, // 绘画系统图标开始, 即将绘画系统图标, 返回true则不使用内部的绘制
DRAW_STAGE_ICON_END, // 绘画系统图标结束, 系统图标已经绘画完毕
DRAW_STAGE_TITLE_BEGIN, // 绘画标题开始, 即将绘画标题, 返回true则不使用内部的绘制
DRAW_STAGE_TITLE_END, // 绘画标题结束, 标题已经绘画完毕
};
> DRAW_WND_BYCOMMAND
0x0000
0
v1.2.101
> 指明参数 nPosition 使用的是ID
> DRAW_WND_BYPOSITION
0x0400
1024
v1.2.101
> 指明参数 nPosition 使用的是索引