窗口将只在鼠标移动时更新
Window will only update on mouse move
我正在编程的测试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++本机插件更新Vector3数组
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- 将对象移动到std::shared_ptr
- 何时在引用或唯一指针上使用移动语义
- 如何从具有移动语义的类对象中生成共享指针
- 将shared_ptr移动到<StructA>shared_ptr<变体<结构A、结构 B>>
- C / C++ 移位/偏移/向左或向右移动位图?
- cmake更新缓存的变量
- MSVC将仅移动结构参数解释为指针
- 自定义先决条件对移动分配运算符有效吗
- 返回值优化:显式移动还是隐式
- MFC GUI 自定义控件:如何绘制光标更新以响应鼠标移动?
- 使用第二个线程快速更新 GUI 窗口会通过调整窗口大小或移动窗口而崩溃
- 更新函数在 Azure 移动库中C++损坏
- 移动鼠标会导致事件不更新
- 文件移动 - 操作系统如何知道是更新主文件表还是复制和删除
- 窗口将只在鼠标移动时更新
- 更新相机移动与键不工作
- 将一个向量移动到另一个,地址没有更新
- 相机不会移动,但坐标正在更新