解决
功能说明:该程序是基于易语言版本 2 开发的一套自定义窗体界面绘制与控制模块。其主要功能是接管 Windows 窗口的非客户区绘制权限,通过 GDI+ 图形接口实现完全自定义的窗口外观皮肤,包括背景图片、圆角边框、标题文字以及最小化、最大化、关闭三个标准控制按钮的状态管理与交互。程序不依赖原生窗口样式,而是通过拦截 Windows 消息钩子来自行绘制所有界面元素。
具体功能模块总结如下:
1. **初始化与消息注册**:
在 `.子程序 绘制窗口` 中完成基础环境搭建。获取当前窗口的设备句柄,创建自绘对象并绑定到 `回调子程序`。同时调用 `加载按钮图片` 函数,将预设的二进制图片资源(如缩小、放大、关闭按钮的不同状态图)加载到内存中备用。此外,还调用了 `窗口大小改变` 以适应初始尺寸。
2. **消息循环与交互处理**:
`.子程序 回调子程序` 是整个系统的核心逻辑中心,它负责处理多种 Windows 系统消息:
* **WM_PAINT**:触发重绘请求,调用 `绘制背景` 刷新界面。
* **WM_SIZE**:监听窗口尺寸变化,调整绘制范围。
* **WM_NCMOUSEMOVE**:监测鼠标在非客户区的移动,用于实现按钮悬停效果。
* **WM_NCRBUTTONDOWN / WM_NCLBUTTONUP**:捕获鼠标按下与释放动作,判断是否点击了特定的按钮区域,从而执行相应操作。
* **WM_NCHITTEST**:定义鼠标命中测试规则。当鼠标位于最小化、最大化或关闭按钮矩形区域内时,分别返回特定的标识符(如 8、9、20),告知系统将其映射为对应的窗口管理动作。
* **WM_NCACTIVATE / WM_NCPAINT**:通过返回值 0 忽略系统默认的非客户区激活和绘制行为,确保完全由自定义代码控制显示。
3. **图形资源加载**:
`.子程序 加载按钮图片` 负责将嵌入在代码中的字节集资源转换为 GDI 图像对象。为每个控制按钮(索引 1 至 3)准备了三种状态下的图片:普通状态、高亮状态(鼠标悬停)、按下状态(鼠标点击)。这种设计支持动态的视觉反馈。
4. **背景与界面绘制**:
`.子程序 绘制背景` 利用 G+ (Graphics Plus) 图形库进行高性能渲染。流程包括:
* 创建基于窗口句柄的设备上下文 (Device Context)。
* 从内存读取背景图片并绘制到指定位置。
* 创建字体对象(微软雅黑)和画刷,在左上角绘制窗口标题文本。
* 使用灰色实线画笔绘制圆角矩形边框,增强视觉效果。
* 绘制顶部的白色分割线。
* 最后通过循环调用 `.子程序 绘制按钮` 来逐一渲染三个控制按钮。
5. **按钮绘制逻辑**:
虽然提供的代码片段在 `绘制按钮` 子程序末尾中断,但根据上下文可知,其功能是创建独立的内存设备上下文 (MDC),将对应状态的按钮图像复制到主背景的特定矩形坐标上,从而实现按钮的精确放置。
综上所述,这段代码是一个典型的易语言窗口美化引擎核心部分,实现了从底层消息拦截到上层像素绘制的全过程,适用于需要高度定制化 UI 风格的易语言应用程序开发。它解决了原生易语言窗体样式单一的问题,允许开发者通过替换图片和调整颜色来实现丰富的界面风格。
======窗体绘制程序集
| |
| |------ 绘制窗口
| |
| |------ 回调子程序
| |
| |------ 加载按钮图片
| |
| |------ 绘制背景
| |
| |------ 绘制按钮
| |
| |------ 窗口大小改变
| |
| |------ 鼠标被移动
| |
| |------ 鼠标被按下
| |
| |------ 鼠标被弹回
| |
| |------ 按钮事件
| |
| |
======窗口程序集1
| |
| |------ __启动窗口_创建完毕
| |
| |
======公用函数程序集
| |
| |------ 取高位
| |
| |------ 取低位
| |
| |------ 是否在矩形内
| |
| |
======调用的Dll
| |
| |---[dll]------ 取窗口全部设备场景_
| |
| |---[dll]------ 填充矩形_
| |
| |---[dll]------ 取窗口矩形_
| |
| |---[dll]------ 复制位图_
| |
| |---[dll]------ 删除设备场景_
| |
| |---[dll]------ 判断窗口最大化_
注:本站源码主要来源于网络收集。如有侵犯您的利益,请联系我们,我们将及时删除!
部分源码可能含有危险代码,(如关机、格式化磁盘等),请看清代码在运行。
由此产生的一切后果本站均不负责。源码仅用于学习使用,如需运用到商业场景请咨询原作者。
使用本站源码开发的产品均与本站无任何关系,请大家遵守国家相关法律。