求助选择夹问题
功能说明:本程序是一个基于易语言开发的底层界面处理模块,主要功能是对 Windows 系统中的标准控件进行“超类化”(Superclassing)和“子类化”(Subclassing)处理,以实现控件样式的自定义和消息流程的拦截。代码核心在于通过调用 WinAPI 接口注册新的窗口类,并替换原控件的窗口过程函数,从而达到修改默认绘制行为或增加自定义逻辑的目的。以下是详细的功能总结:
1. **控件超类化注册**:
程序在启动阶段(.子程序 _启动子程序)执行了一系列复杂的初始化操作。它通过 GetClassInfoEx 获取标准控件(如 BUTTON、ToolbarWindow32、Static、ListBox、ReBarWindow32)的原始信息,然后重新定义并注册了新的类名(如 mybut、MyTool 等)。这一过程配合自定义的窗口过程指针(如内部_超类按钮过程),使得后续创建的这些类型的控件会继承新的属性,例如修改了背景颜色为#COLOR_BTNFACE + 1,旨在解决部分控件显示不正常的问题或实现特定皮肤效果。
2. **窗口消息拦截与子类化**:
提供了关键的.子程序 内部_子类化处理,用于对指定父窗口句柄进行消息拦截。该子程序会保存原始的窗口过程地址(GWL_WNDPROC),并将其替换为自定义的内部_子窗口过程。这样当该窗口收到消息时,会先经过用户的自定义逻辑处理,然后再转发给原始函数或进行特殊处理。代码中还包含了防重复处理的机制,检查当前父窗口是否已经在数组中。此外,.子程序 内部_是否选择夹 用于判断句柄是否为选项卡控件,避免对特定的复杂控件进行不必要的子类化,防止冲突。
3. **自定义父子容器关系**:
定义了公开子程序 模块_设置父窗口,允许用户将易语言原生控件放入到自建的自定义控件内部。这通常用于构建更复杂的布局结构,但代码注释特别警告,这样做可能导致标准控件(如按钮、列表框)失去响应事件的能力,需要开发者谨慎使用。
4. **演示与测试环境**:
程序包含一个临时的测试子程序(_临时子程序)和相应的窗口创建事件(测试_窗口创建完毕)。这部分代码用于验证超类化后的效果。它会创建一个测试窗口,并在其中添加选项卡(选择夹)和按钮(按钮 1、按钮 2),模拟实际运行环境,展示注册后的新类如何影响界面的生成。这表明该程序兼具开发调试与实际模块库的双重属性。
综上所述,该程序并非一个最终用户应用程序,而是一个工具性模块库。它主要用于易语言高级开发者,用于扩展原生界面的表现力,实现类似“换肤”、“自定义绘图”或“底层消息控制”的高级界面开发需求。
======内部_程序集
| |
| |------ _启动子程序
| |
| |------ _临时子程序
| |
| |------ 测试_窗口创建完毕
| |
| |------ 模块_设置父窗口
| |
| |------ 内部_子类化处理
| |
| |------ 内部_是否选择夹
| |
| |------ 内部_取窗口宽度
| |
| |------ 内部_取窗口高度
| |
| |------ 内部_取窗口左边
| |
| |------ 内部_取窗口顶边
| |
| |------ 内部_取原窗口函数
| |
| |------ 模块_设置字体
| |
| |------ 内部_取低字
| |
| |------ 内部_取高字
| |
| |------ 内部_取滚动条事件索引
| |
| |------ 内部_取窗口事件索引
| |
| |------ 内部_取控件事件索引
| |
| |------ 内部_是否静态
| |
| |------ 内部_子窗口过程
| |
| |------ 内部_超类按钮过程
| |
| |------ 内部_超类工具栏过程
| |
| |------ 内部_超类静态控件过程
| |
| |------ 内部_超类列表框过程
| |
| |------ 内部_取场景背景
| |
| |------ 内部_取背景
| |
| |------ 内部_取超类颜色
| |
| |------ 模块_取字节集位图句柄
| |
| |------ 内部_注册窗口类
| |
| |------ 内部_默认窗口过程
| |
| |------ 内部_消息循环
| |
| |------ 对话框_打开保存
| |
| |------ 对话框_字体选择
| |
| |------ 对话框_颜色选择
| |
| |
======控件_树形框
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 置颜色
| |
| |------ 置背景色
| |
| |------ 置前景色
| |
| |------ 创建
| |
| |------ 插入根项目
| |
| |------ 插入子项目
| |
| |------ 取当前项目句柄
| |
| |------ 取当前索引
| |
| |------ 取项目句柄
| |
| |------ 取父项目句柄
| |
| |------ 取项目总数
| |
| |------ 取项目文本
| |
| |------ 置项目文本
| |
| |------ 连接位图列表
| |
| |------ 事件_项目被改变
| |
| |
======控件_工具条
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 创建
| |
| |------ 添置按钮
| |
| |------ 复选钮选中
| |
| |------ 复选钮取消
| |
| |------ 按钮允许
| |
| |------ 按钮禁止
| |
| |------ 自动调整位置
| |
| |------ 复选钮是否按下
| |
| |------ 是否允许
| |
| |------ 连接正常图片组
| |
| |------ 连接热点图片组
| |
| |------ 连接禁止图片组
| |
| |------ 置背景色
| |
| |------ 取按钮数量
| |
| |------ 取按钮矩形
| |
| |------ 取事件ID
| |
| |------ 取按钮索引
| |
| |------ 事件_被单击
| |
| |------ 事件_被下拉
| |
| |------ 事件_热点被改变
| |
| |
======控件_状态条
| |
| |------ _初始化
| |
| |------ 创建
| |
| |------ 自动调整位置
| |
| |------ 分栏
| |
| |------ 置标题
| |
| |------ 取标题
| |
| |------ _销毁
| |
| |
======控件_超级列表框
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 创建
| |
| |------ 插入列
| |
| |------ 插入表项
| |
| |------ 置标题
| |
| |------ 取表项数
| |
| |------ 现行选中项
| |
| |------ 取标题
| |
| |------ 类型
| |
| |------ 置类型
| |
| |------ 删除列
| |
| |------ 删除表项
| |
| |------ 全部删除
| |
| |------ 连接图片组
| |
| |------ 连接状态图片组
| |
| |------ 取表格矩形区域
| |
| |------ 取鼠标行号
| |
| |------ 取鼠标列号
| |
| |------ 取项目坐标
| |
| |------ 置列宽度
| |
| |------ 取列宽度
| |
| |------ 取列标题
| |
| |------ 移动项目
| |
| |------ 取项目矩形区域
| |
| |------ 表格线
| |
| |------ 整行选择
| |
| |------ 自动选择
| |
| |------ 自动跟随
| |
| |------ 显示检查框
| |
| |------ 检查框是否选中
| |
| |------ 选中检查框
| |
| |------ 设置前景色
| |
| |------ 设置背景色
| |
| |------ 置文本背景色
| |
| |------ 查找表项
| |
| |------ 事件_表头被单击
| |
| |------ 事件_项目被拖动
| |
| |------ 事件_开始编辑
| |
| |------ 事件_结束编辑
| |
| |------ 事件_开始选择一个范围
| |
| |------ 事件_自动选择
| |
| |
======类_窗口基类
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 可视
| |
| |------ 禁止
| |
| |------ _置初始
| |
| |------ 是否已创建
| |
| |------ 标题
| |
| |------ 取句柄
| |
| |------ 移动
| |
| |------ 取宽度
| |
| |------ 取高度
| |
| |------ 取左边
| |
| |------ 取顶边
| |
| |
======资源_图标列表
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 创建
| |
| |------ 加入图标
| |
| |------ 从模块加入位图
| |
| |------ 从模块加入ICO
| |
| |------ 从字节集加入位图
| |
| |------ 释放列表
| |
| |------ 取句柄
| |
| |
======控件_按钮
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 创建
| |
| |------ 事件_被单击
| |
| |------ 事件_获得焦点
| |
| |------ 事件_失去焦点
| |
| |
======控件_单选框
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 创建
| |
| |------ 置颜色
| |
| |------ 选中
| |
| |------ 事件_被单击
| |
| |------ 事件_获得焦点
| |
| |------ 事件_失去焦点
| |
| |
======控件_复选框
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 创建
| |
| |------ 置颜色
| |
| |------ 选中
| |
| |------ 事件_被单击
| |
| |------ 事件_获得焦点
| |
| |------ 事件_失去焦点
| |
| |
======控件_编辑框
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 创建
| |
| |------ 内容
| |
| |------ 置读写状态
| |
| |------ 置颜色
| |
| |------ 事件_内容被改变
| |
| |------ 事件_字符输入
| |
| |------ 事件_获得焦点
| |
| |------ 事件_失去焦点
| |
| |
======控件_组合框
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 创建
| |
| |------ 内容
| |
| |------ 加入项目
| |
| |------ 现行选中项
| |
| |------ 删除项目
| |
| |------ 清空
| |
| |------ 取项目文本
| |
| |------ 取项目数
| |
| |------ 取项目数值
| |
| |------ 置项目数值
| |
| |------ 置颜色
| |
| |------ 事件_项目被选择
| |
| |------ 事件_内容被改变
| |
| |------ 事件_列表将弹出
| |
| |------ 事件_列表被关闭
| |
| |------ 事件_项目被双击
| |
| |------ 事件_获得焦点
| |
| |------ 事件_失去焦点
| |
| |
======控件_列表框
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 创建
| |
| |------ 置颜色
| |
| |------ 取项目数值
| |
| |------ 置项目数值
| |
| |------ 删除项目
| |
| |------ 取项目数
| |
| |------ 现行选中项
| |
| |------ 是否选中
| |
| |------ 选中项目
| |
| |------ 取选中项目数
| |
| |------ 取项目文本
| |
| |------ 加入项目
| |
| |------ 清空
| |
| |------ 事件_项目被改变
| |
| |------ 事件_项目取消选择
| |
| |------ 事件_项目被双击
| |
| |------ 事件_获得焦点
| |
| |------ 事件_失去焦点
| |
| |
======控件_进度条
| |
| |------ _初始化
| |
| |------ 创建
| |
| |------ 置位置
| |
| |------ 置最大值
| |
| |------ _销毁
| |
| |
======控件_标签
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 创建
| |
| |------ 置颜色
| |
| |------ 取标题
| |
| |
======控件_图片框
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 创建
| |
| |------ 设置位图
| |
| |------ 置字节集位图
| |
| |
======控件_分组框
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 创建
| |
| |------ 置标题颜色
| |
| |------ 置背景色
| |
| |
======控件_选择夹
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 创建
| |
| |------ 插入子夹
| |
| |------ 现行子夹
| |
| |------ 取子夹数
| |
| |------ 选择子夹
| |
| |------ 置焦点子夹
| |
| |------ 置子夹名
| |
| |------ 事件_子夹被改变
| |
| |------ 事件_子夹即将改变
| |
| |
======控件_外形框
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 创建
| |
| |------ 置背景色
| |
| |
======控件_窗口
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 创建
| |
| |------ 销毁
| |
| |------ 任意移动
| |
| |------ 置外形
| |
| |------ 置背景图
| |
| |------ 总在最前
| |
| |------ 位置
| |
| |------ 事件_尺寸被改变
| |
| |------ 事件_将被消毁
| |
| |------ 事件_鼠标左键被按下
| |
| |------ 事件_鼠标左键被放开
| |
| |------ 事件_被双击
| |
| |------ 事件_鼠标右键被按下
| |
| |------ 事件_鼠标右键被放开
| |
| |------ 事件_鼠标位置被移动
| |
| |------ 事件_获取焦点
| |
| |------ 事件_失去焦点
| |
| |------ 事件_按下某键
| |
| |------ 事件_放开某键
| |
| |
======类_静态基类
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 置ID
| |
| |------ 事件_被单击
| |
| |------ 事件_被双击
| |
| |------ 事件_被禁用
| |
| |------ 事件_被启用
| |
| |
======类_通用控件基类
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 置ID
| |
| |------ 事件_被单击
| |
| |------ 事件_被双击
| |
| |------ 事件_右键单击
| |
| |------ 事件_按下回车键
| |
| |------ 事件_获得焦点
| |
| |------ 事件_失去焦点
| |
| |
======菜单_主菜单
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 添加子菜单
| |
| |------ 插入子菜单
| |
| |------ 清除子菜单
| |
| |------ 删除子菜单
注:本站源码主要来源于网络收集。如有侵犯您的利益,请联系我们,我们将及时删除!
部分源码可能含有危险代码,(如关机、格式化磁盘等),请看清代码在运行。
由此产生的一切后果本站均不负责。源码仅用于学习使用,如需运用到商业场景请咨询原作者。
使用本站源码开发的产品均与本站无任何关系,请大家遵守国家相关法律。