开源
功能说明:该程序是一个基于易语言开发的窗口应用程序,主要功能是实现树型框(Treeview)控件的自定义绘制与颜色管理。程序通过底层 Windows API 挂钩技术,拦截并处理窗口的消息循环, specifically 针对树型框的绘制消息进行定制,从而突破标准控件的外观限制。
程序的核心逻辑主要围绕以下几个关键子程序和功能模块展开:
1. 窗口子类化与消息拦截:
程序在“启动窗口_创建完毕”子程序中初始化。它首先调整窗口高度,然后使用 SetWindowLongA API 将窗口的默认窗口过程替换为自定义的 NewProc 子程序地址。这一步骤实现了窗口子类化,使得程序能够拦截发送给窗口的所有消息。当“启动窗口_将被销毁”时,程序会恢复原始的窗口过程,确保资源正确释放。
2. 自定义绘制通知处理(NewProc):
NewProc 子程序是程序的核心消息处理函数。它拦截 WM_NOTIFY 消息,并判断该消息是否来自树型框 1 控件。当收到 NM_CUSTOMDRAW(自定义绘制)通知码时,程序介入绘制过程。
- 在 CDDS_PREPAINT 阶段,程序返回 CDRF_NOTIFYITEMDRAW,表示需要接收每个项目的绘制通知。
- 在 CDDS_ITEMPREPAINT 阶段,程序执行具体的颜色定制逻辑。
3. 随机文字颜色初始化:
在窗口创建时,程序通过计次循环遍历树型框 1 的所有项目。它使用取随机数命令生成一个颜色值(范围从黑色到白色),并通过“置项目数值”将该颜色值存储在每个项目的 lParam 数据中。在自定义绘制阶段,程序读取这个存储的值并将其设置为项目的文字颜色(clrText),从而实现每个树型框项目文字颜色随机化的效果。
4. 选中项背景高亮:
程序实现了识别当前选中树型框项目的功能。通过“取树型现选项句柄”子程序,程序能够获取当前选中项目的句柄。该子程序内部调用“树型框_遍历句柄”,后者使用 SendMessage API 配合 TVM_GETNEXTITEM 消息,递归遍历树型框的所有节点(根、子、兄弟、父),将所有项目句柄存入数组。
在自定义绘制阶段,程序比较当前正在绘制的项目句柄与当前选中项句柄。如果两者一致,程序将项目的背景颜色(clrTextBk)设置为“芙红”色,从而实现选中项的高亮显示效果。
5. API 与内存操作:
程序大量使用了 Windows 用户区 API(user32.dll)和内存操作命令。包括 SetWindowLongA 和 CallWindowProcA 用于窗口过程挂钩;SendMessage 用于与树型框控件通信以获取项目句柄;CopyMemory 用于在 NMHDR 和 NMLVCUSTOMDRAW 结构体与内存地址之间复制数据,以便修改绘制参数。
总结来说,这是一个演示如何在易语言中通过底层 API 挂钩和自定义绘制消息(Custom Draw),来深度定制树型框控件外观的工具或示例程序。它展示了如何改变标准控件的文字颜色、背景颜色以及如何精准定位选中项进行特殊渲染,适用于需要高度定制化界面风格的软件开发场景。
======窗口程序集1
| |
| |------ __启动窗口_创建完毕
| |
| |------ __启动窗口_将被销毁
| |
| |------ NewProc
| |
| |------ 取树型现选项句柄
| |
| |------ 树型框_遍历句柄
| |
| |
======调用的Dll
| |
| |---[dll]------ SetWindowLongA
| |
| |---[dll]------ CallWindowProcA
| |
| |---[dll]------ CopyMemory_NMHDR
| |
| |---[dll]------ CopyMemory_NMLVCUSTOMDRAWTolParam
| |
| |---[dll]------ CopyMemory_NMLVCUSTOMDRAW
| |
| |---[dll]------ GetDlgCtrlID
| |
| |---[dll]------ SendMessage
注:本站源码主要来源于网络收集。如有侵犯您的利益,请联系我们,我们将及时删除!
部分源码可能含有危险代码,(如关机、格式化磁盘等),请看清代码在运行。
由此产生的一切后果本站均不负责。源码仅用于学习使用,如需运用到商业场景请咨询原作者。
使用本站源码开发的产品均与本站无任何关系,请大家遵守国家相关法律。