TC官方合作论坛

 找回密码
 立即注册
查看: 2214|回复: 0

[功能] 【源码】易语言的“处理事件”命令,纯TC实现

[复制链接]
发表于 2022-10-3 04:44:39 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
//暂时转让控制权,以便让 Windows 操作系统有机会处理其它的如用户键盘或鼠标输入等事件。直到操作系统处理并发送完程序队列中的所有事件后,命令才会返回。
功能 处理事件()  
   
    变量 MSG = 数组("hwnd" = 数组("long" = 1, "value" = 0), "message" = 数组("long" = 1, "value" = 0), "wParam" = 数组("long" = 1, "value" = 0), "lParam" = 数组("long" = 1, "value" = 0), "time" = 数组("long" = 1, "value" = 0), "x" = 数组("long" = 1, "value" = 0), "y" = 数组("long" = 1, "value" = 0))
    变量 结构体地址_MSG = 结构体申请内存(MSG)
    如果(结构体地址_MSG == 0)
        返回
    结束
   
    循环(动态库调用("user32.dll", "long", "PeekMessageW", "long", 结构体地址_MSG, "long", 0, "long", 0, "long", 0, "long", 1) != 0)
        动态库调用("user32.dll", "long", "DispatchMessageW", "long", 结构体地址_MSG)
        动态库调用("user32.dll", "long", "TranslateMessage", "long", 结构体地址_MSG)
    结束
   
    结构体释放内存(结构体地址_MSG)
   
结束


====================================================================================================================================================================================
由易语言代码翻译而来,有BUG我不管。
在界面事件使用大循环,只要在循环里加上一句 处理事件() ,就不会卡界面了。
原理就是转让控制权处理队列消息,消息处理完了返回,然后执行你的代码,所以运行速度会慢几十倍。
慎用!!有大循环死循环代码建议使用线程来处理。

如果(dllcall("user32.dll", "long", "GetInputState") != 0)  //确定调用线程的消息队列中是否存在鼠标按钮或键盘消息。
    处理事件()

结束


选择键鼠消息  处理事件()  可以提升一部分速度。


觉的有用就留个赞吧!



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-5-3 06:50 , Processed in 0.030033 second(s), 22 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表