我正在使用 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
在论坛上的一些帮助下,添加以下内容仅过滤了我的
SetTimer
语句中来自计时器的消息:
If msg.hwnd = Window_Main AndAlso msg.wParam = 1 Then
这里,
msg.wParam
是定时器ID。