如何防止(过滤)WM_MOUSEMOVE影响WM_TIMER case语句评估true

问题描述 投票:0回答:1

我正在使用 FreeBASIC 和 win32API 来制作一个简单的数据记录器。我的主窗口中有一个编辑框,每秒显示 1 条数据日志记录。

一切都很完美,除了当我在主窗口和编辑框之间移动鼠标时(特别是下边缘和右边缘,滚动条将在其中显示),然后我会在我的

中得到额外的2个评估为true的计时器事件case
每一步都有陈述。 (WindowMain 到 EditBox 或 EditBox 到 WindowMain)。

有没有办法过滤消息(我假设)

WM_MOUSEMOVE
使计时器案例代码评估为True?

Edit1:我可以确认当鼠标移入/移出Editbox ScrollBars区域时,WM_TIMER事件消息被激活。 禁用 ScrollBar 箭头并不能缓解该问题。(只是禁用 ScrollBar) 启用ScrollBar(LogWindow,SB_BOTH,ESB_DISABLE_BOTH)

Edit2:既然我已经确定了问题的具体原因,那么这个问题的标题就不正确。不需要的 WM_TIMER 消息来自 EditBox 滚动条,会有一个与鼠标悬停相关的计时器。

代码:

SetTimer(Window_Main, 1, 1000, 0 )  
                      '                             
 Do     'Main loop to check WinAPI event states:

   WaitEvent(Window_Main, msg)
'- Select Case msg.hwnd
   Select Case msg.message
      Case WM_TIMER                          
         If LogState = Run_ Then Get_Data
'        Get_Data  '<<<-- DEBUG ONLY to test timer

   End Select

   Select Case msg.hwnd
      Case Btn_TstCom
         If msg.message = WM_LBUTTONUP Then
            EditBox_Paste(LogWindow)
         End If

      Case Btn_ClrLog

winapi freebasic
1个回答
0
投票

在论坛上的一些帮助下,添加以下内容仅过滤了我的

SetTimer
语句中来自计时器的消息:

If msg.hwnd = Window_Main AndAlso msg.wParam = 1 Then

这里,

msg.wParam
是定时器ID。

© www.soinside.com 2019 - 2024. All rights reserved.