开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 7039|回复: 4
收起左侧

[技术专题] 发个纯api级子线程刷新主线程的demo吧

[复制链接]
发表于 2021-1-31 15:33:40 | 显示全部楼层 |阅读模式   江苏省无锡市
没有做成类,取地址的时候,总是提示找不到地址,有点郁闷,做了个程序集,能用,多窗体需要改,略丑,将就看看吧

  1. .版本 2

  2. .程序集 UI子线程刷新程序集
  3. .程序集变量 _hwnd, 整数型, , , 需要支持子线程更新ui的窗口句柄
  4. .程序集变量 _oldWindowProc, 长整数型
  5. .程序集变量 _triggerMsgId, 整数型, , , 发送消息进行ui同步的时候的msg id
  6. .程序集变量 _uiCallBack, 子程序指针, , , ui回调函数

  7. .子程序 setMsgId, , 公开
  8. .参数 triggerMsgId, 整数型

  9. _triggerMsgId = triggerMsgId


  10. .子程序 setUiCallBackProc, , 公开
  11. .参数 uiCallBack, 子程序指针

  12. _uiCallBack = uiCallBack


  13. .子程序 initWithWindow, , 公开
  14. .参数 hwnd, 整数型

  15. _hwnd = hwnd
  16. _oldWindowProc = GetWindowLongA (_hwnd, -4)
  17. SetWindowLongA (_hwnd, -4, val (&newWindowProc))


  18. .子程序 newWindowProc, 整数型
  19. .参数 hwnd, 整数型
  20. .参数 msg, 整数型
  21. .参数 wparam, 整数型
  22. .参数 lparam, 整数型

  23. .if (msg = _triggerMsgId)
  24.     调用子程序_ (val (_uiCallBack), , , , , , , , , , , , , , , )
  25. .如果真结束
  26. return (CallWindowProcA (_oldWindowProc, hwnd, msg, wparam, lparam))




  27. .子程序 notifyUIUpdate, , 公开

  28. PostMessageA (_hwnd, _triggerMsgId, 0, 0)




  29. .子程序 waitUIUpdate

  30. SendMessageA (_hwnd, _triggerMsgId, 0, 0)
复制代码


测试调用
  1. .版本 2

  2. .程序集 窗口程序集_启动窗口

  3. .子程序 __启动窗口_创建完毕

  4. initWithWindow (_启动窗口.GetHWnd ())
  5. setMsgId (5555)
  6. setUiCallBackProc (&触发ui回调)

  7. .子程序 _按钮1_被单击

  8. 线程_启动 (&测试触发, , )



  9. .子程序 测试触发

  10. notifyUIUpdate ()

  11. .子程序 触发ui回调

  12. MsgBox (“bbbb”, 0, , )
复制代码



结帖率:32% (6/19)

签到天数: 1 天

发表于 2023-12-10 10:35:09 | 显示全部楼层   贵州省黔东南苗族侗族自治州
很不错的样子,支持,支持
回复 支持 反对

使用道具 举报

头像被屏蔽
结帖率:92% (11/12)
发表于 2021-2-4 16:25:34 | 显示全部楼层   浙江省温州市
感谢分享
回复 支持 反对

使用道具 举报

签到天数: 22 天

发表于 2021-1-31 17:35:32 | 显示全部楼层   广东省广州市
本帖最后由 sinewtec 于 2021-1-31 17:48 编辑

支持开源
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-31 16:40:20 | 显示全部楼层   江苏省无锡市
更新了一波,测试程序如下
  1. .版本 2

  2. .程序集 窗口程序集_启动窗口
  3. .程序集变量 ui, UI子线程刷新类

  4. .子程序 __启动窗口_创建完毕

  5. ui.initWithWindow (_启动窗口.GetHWnd ())
  6. ui.setUiUpdateProc (&触发ui回调)

  7. .子程序 _按钮1_被单击

  8. 线程_启动 (&子线程通知, , )


  9. .子程序 子线程通知

  10. ui.notifyUIUpdate ()


  11. .子程序 触发ui回调

  12. MsgBox (“触发ui回调”, 0, , )
复制代码


程序集模式改成类模式
  1. .版本 2

  2. .程序集 UI子线程刷新类
  3. .程序集变量 _hwnd, 整数型, , , 需要支持子线程更新ui的窗口句柄
  4. .程序集变量 _oldWindowProc, 长整数型
  5. .程序集变量 _uiUpdateCallBack, 子程序指针, , , ui回调函数
  6. .程序集变量 _triggerMsgId, 整数型, , , 通知ui线程的消息id,默认有个值

  7. .子程序 _初始化, , , 当基于本类的对象被创建后,此方法会被自动调用

  8. _triggerMsgId = 9876


  9. .子程序 _销毁, , , 当基于本类的对象被销毁前,此方法会被自动调用



  10. ' 依赖精易模块
  11. ' 如果这个方法改位置了,SetWindowLongA的最后一个参数也需要改

  12. .子程序 newWindowProc, 整数型
  13. .参数 hwnd, 整数型
  14. .参数 msg, 整数型
  15. .参数 wparam, 整数型
  16. .参数 lparam, 整数型

  17. .if (msg = _triggerMsgId)
  18.     调用子程序_ (val (_uiUpdateCallBack), , , , , , , , , , , , , , , )
  19. .如果真结束
  20. return (CallWindowProcA (_oldWindowProc, hwnd, msg, wparam, lparam))


  21. .子程序 setUiUpdateProc, , 公开
  22. .参数 uiUpdateCallBack, 子程序指针

  23. _uiUpdateCallBack = uiUpdateCallBack


  24. .子程序 notifyUIUpdate, , 公开

  25. PostMessageA (_hwnd, _triggerMsgId, 0, 0)


  26. ' 可以不调用

  27. .子程序 setTriggerMsgId, , 公开
  28. .参数 triggerMsgId, 整数型

  29. _triggerMsgId = triggerMsgId


  30. .子程序 waitUIUpdate

  31. SendMessageA (_hwnd, _triggerMsgId, 0, 0)



  32. .子程序 initWithWindow, , 公开
  33. .参数 hwnd, 整数型

  34. _hwnd = hwnd
  35. _oldWindowProc = GetWindowLongA (_hwnd, -4)
  36. SetWindowLongA (_hwnd, -4, 类回调_取类地址 (3, 4, , ))
复制代码

评分

参与人数 1好评 +1 精币 +3 收起 理由
梦想ol + 1 + 3 不好意思,点复制的时候手抖点错了

查看全部评分

回复 支持 0 反对 1

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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