易语言窗口绘制模块分享—在任意窗口上绘制文字和图片

智谱

AI 正在加载摘要

前言:

在易语言开发中,我们经常需要在窗口上显示一些自定义的文字或图片信息。通常的做法是使用标签、画板等组件,但这种方式有几个明显的缺点:

  1. 资源消耗大:每个组件都是一个窗口对象,创建大量组件会消耗较多系统资源

  2. 样式受限:自带组件的样式比较单一,美化起来很麻烦

  3. 跨窗口绘制难:很难在其他程序窗口上直接绘制内容

今天分享的这个绘制模块,正好解决了这些问题。它可以直接在任意窗口上绘制文字和图片,无需创建额外的组件,非常轻量高效。

使用效果:

QQ20260415-175405

下载地址:

一、模块核心功能

这个模块主要提供了两个核心命令:

命令 功能说明
绘制文本() 在指定窗口的指定位置绘制文字
绘制图片() 在指定窗口的指定位置绘制图片

除此之外,模块还封装了窗口创建和消息循环处理,让整个绘制流程更加简洁。

二、使用示例代码

以下是一个完整的示例,演示如何在桌面上显示一个“可达鸭小栈”的标识:

.版本 2

.程序集 窗口程序集_窗口1
.程序集变量 hwnd, 整数型
.程序集变量 x, 整数型

.子程序 _窗口1_创建完毕
    ' 取桌面窗口句柄作为绘制目标
    hwnd = 窗口_取桌面句柄 ()
    线程_启动 (&子程序1)

.子程序 子程序1
    x = 445
    ' 创建绘制窗口,指定消息处理函数
    CreateWindow (hwnd, , , , 30, &Messageloop1)
    Messageloop ()

.子程序 Messageloop1
    .局部变量 ls, 精易_位置和大小
    
    ' 获取目标窗口的大小
    ls = 窗口_取位置和大小 (hwnd, )
    ' 动态计算绘制位置(实现自适应)
    x = 445 + ls.宽度 - 1010
    ' 在计算出的位置绘制红色文字
    绘制文本 (“可达鸭小栈”, x, 5, #红色, 100)
    
    ' 如果需要显示图片,取消下面这行的注释
    ' 绘制图片 (x, 5, 124, 29, #图片2)

代码解析

  1. 获取目标窗口:通过窗口_取桌面句柄()获取桌面窗口的句柄,你也可以换成其他任何窗口的句柄

  2. 创建绘制层CreateWindow()命令在目标窗口上创建一个绘制层,最后一个参数&Messageloop1指定了绘制消息的处理函数

  3. 动态定位:在Messageloop1中,通过窗口_取位置和大小()获取窗口当前尺寸,然后动态计算绘制位置——这样即使窗口大小改变,文字也能显示在正确的位置

  4. 绘制内容:使用绘制文本()绘制图片()命令完成实际绘制

四、应用场景

这类绘制模块在实际开发中有很多用途:

1. 程序界面美化

可以给程序加上自定义的标题栏、边框装饰,让程序看起来更专业。

2. 辅助工具信息显示

在游戏或多窗口应用中,可以将运行日志、状态信息直接绘制在对应窗口上,非常直观。

3. 桌面小工具

在桌面上直接显示提醒文字、时钟、系统状态等,就像各种桌面美化插件一样。

4. 提示框效果

可以实现类似Web网页的Toast通知效果,轻量且美观。

五、技术原理浅析

这个模块的核心技术是窗口自绘(Custom Draw)子类化(Subclassing)

简单来说,Windows程序是基于“消息”来工作的。当窗口需要重画时,系统会发送WM_PAINT消息。这个模块的原理就是:

  1. 拦截目标窗口的绘制消息

  2. 在原始绘制完成的基础上,添加我们自己的绘制代码

  3. 最后把绘制结果呈现出来

通过这种方式,我们不需要修改原窗口的代码,就能给它“贴”上额外的内容。

六、注意事项

  1. 模块依赖:这个模块可能依赖精易模块或其他支持库,使用前请确保已正确引用

  2. 绘制刷新:如果目标窗口被覆盖后重画,我们绘制的内容可能会消失,需要在消息循环中持续重绘

  3. 性能考虑:频繁刷新绘制可能会消耗一定的CPU资源,建议按需刷新而非实时刷新

  4. 权限问题:向其他进程的窗口绘制内容,可能需要相应的操作系统权限

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
看完了?看完了愣着啊点赞干什么
点赞64 分享
评论 共1条

请登录后发表评论