【发布时间】:2023-03-20 14:42:01
【问题描述】:
我正在编程的测试 GUI 有问题。我想显示 GUI 已经运行的时间量,并让这个计数每秒更新一次(左右)。我的问题是,我的 GUI 只更新我移动鼠标的时间。
我已经单步执行了我的程序,在 InvalidateRect() 调用之前添加了一个断点。当我有这个断点时,我可以看到句柄 hwndTimeOn 得到更新(基本上当我的程序中断时,我会按 F5 并且我看到句柄每次都更新为正确的计数)。但是当我在没有断点的情况下运行我的程序时,我的句柄只有在我移动鼠标时才会更新......这是否意味着我的主窗口失去焦点(或不活动),因此没有正确更新我的 hwndTimeOn?我不确定还有什么可能是真正的原因,我在我的窗口处理函数中没有任何关于鼠标移动或点击的消息处理,并且我没有在我的程序中的其他任何地方更新我的句柄 hwndTimeOn。
这里有一些代码:
使用的一些变量:
CString temp, timeDiff;
time_t startCount, now, start;
double diffTime;
对于时间阅读文本编辑句柄:
hwndTimeOn= CreateWindowEx(NULL,
"EDIT",
"Time On",
WS_TABSTOP | WS_VISIBLE |
WS_CHILD,
520,
5,
100,
24,
hwnd,
(HMENU)IDC_TIMEON,
GetModuleHandle(NULL),
NULL);
在我的消息循环中:
if (difftime(now, startCount) > 1)
{
diffTime = difftime(now, start);
temp.Format("%f", diffTime);
timeDiff = "Time On: ";
timeDiff.Append(temp);
SetWindowText(hwndTimeOn, timeDiff);
InvalidateRect(hwndTimeOn, NULL, TRUE);
startCount = now;
}
【问题讨论】:
-
没有。这意味着时间更改不会发布会导致进入消息循环的 Windows 消息。为了做你想做的事,你需要使用一个 Windows 定时器,它会向窗口发送一个 WM_TIMER 事件;为了响应该事件,您可以更新您的 UI。
-
好的,我试试,谢谢
标签: c++ visual-studio winapi