我的应用程序窗口的内容仅在我更改窗口大小时更新。
详情: 我有一个用 C++ 编写并用 mingw64 编译的 Windows 应用程序。 在 WinMain 中,我为 WndProc 执行了 CreateWindowW 操作。 在 WndProc 回调中,我有一个 WM_CREATE,从中我设置要显示的所有初始数据并执行
case WM_CREATE:
hdc = BeginPaint(hwnd, &ps);
doAllTheDrawings(hdc);
EndPaint(hwnd, &ps);
break;
之后,我的子窗口显示了所有带有初始值的图表。
之后,在后台,一些数据发生了变化,我想更新图表。 当调整子窗口大小时,它会立即将显示的数据更新为新值,因为调用了 WM_PAINT
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
doAllTheDrawings(hdc);
EndPaint(hwnd, &ps);
break;
现在我想更新我的图表,即使我不改变窗口大小。因此我添加了
case WM_LBUTTONDOWN:
hdc = BeginPaint(hwnd, &ps);
doAllTheDrawings(hdc);
EndPaint(hwnd, &ps);
break;
所以我希望当我按下鼠标左键时图表就会更新。 我可以看到 WM_LBUTTONDOWN 被调用(因为我当时完成了一些其他操作),但是在我调整窗口大小之前,图表不会更新。
我做错了什么? 我如何强制图表更新,即重新绘制窗口? 仅手动调用 WM_PAINT 没有帮助。
看起来我找到了解决方案: 仅在 WM_PAINT 下才需要整个图表的创建。 仅在 WM_CREATE 和 WM_LBUTTON 上 InvalidateRect(hwnd,NULL,TRUE); 不需要调用来“刷新”客户区。然后调用 WM_PAINT 并重新创建所有内容。