gpt4 book ai didi

c++ - 窗口只会在鼠标移动时更新

转载 作者:行者123 更新时间:2023-11-30 02:44:01 26 4
gpt4 key购买 nike

我正在编写的测试 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;
}

最佳答案

当窗口空闲时,没有消息被发送到窗口,这就是 GetMessage 不返回并且消息循环内的代码没有运行的原因。

当您移动鼠标时,将发送 WM_MOUSEMOVE 消息,作为副作用,程序还有机会在消息循环内运行代码。

正如@KenWhite 在评论中提到的,使用WM_TIMER。它专为此类任务而设计。

关于c++ - 窗口只会在鼠标移动时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25688018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com