You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何过滤编辑框滚动条触发的额外WM_TIMER事件?

解决方案:过滤EditBox滚动条的内置WM_TIMER消息

你的问题核心是混淆了自定义计时器和EditBox滚动条的内置计时器消息:EditBox的滚动条会创建自己的悬停关联计时器(用于滚动提示、自动滚动等逻辑),这些计时器触发的WM_TIMER消息会被你的主窗口消息循环捕获,而你当前的代码没有区分自定义计时器和系统内置计时器的ID,导致误触发。

具体解决步骤

在处理WM_TIMER消息时,通过判断计时器ID(即msg.wParam),只响应你自己创建的ID为1的计时器:

修改你的代码片段:

SetTimer(Window_Main, 1, 1000, 0 )  

Do     'Main loop to check WinAPI event states:
   WaitEvent(Window_Main, msg)

   Select Case msg.message
      Case WM_TIMER                           
         ' 只处理自定义的ID为1的计时器消息
         If msg.wParam = 1 And LogState = Run_ Then 
             Get_Data
         End If
   End Select

   ' 其他控件的消息处理...
   Select Case msg.hwnd
      Case Btn_TstCom
         If msg.message = WM_LBUTTONUP Then
            EditBox_Paste(LogWindow)
         End If
      Case Btn_ClrLog
         ' 你的Btn_ClrLog处理逻辑
   End Select
Loop

原理说明

  • SetTimer创建的计时器会通过WM_TIMER的wParam参数携带计时器ID,你自定义的计时器ID是1;
  • EditBox滚动条的内置计时器使用的是系统分配的其他ID,因此通过msg.wParam = 1的判断可以精准过滤掉这些多余的系统计时器消息,只执行你需要的每秒数据记录逻辑。

内容的提问来源于stack exchange,提问作者tonigau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 01:30:05