我正在编程的测试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;
}
答案 0 :(得分:2)
当窗口空闲时,没有消息被发布到窗口,这就是GetMessage
没有返回的原因,并且消息循环中的代码没有被运行。
当您移动鼠标时,正在发布WM_MOUSEMOVE
消息,作为副作用,程序还有机会在消息循环中运行代码。
正如评论中提到的@KenWhite一样,请使用WM_TIMER
。它专为这些任务而设计。