即使窗口大小不变,如何更新子窗口的内容(C++)

问题描述 投票:0回答:1

我的应用程序窗口的内容仅在我更改窗口大小时更新。

详情: 我有一个用 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 没有帮助。

window refresh repaint redraw
1个回答
0
投票

看起来我找到了解决方案: 仅在 WM_PAINT 下才需要整个图表的创建。 仅在 WM_CREATE 和 WM_LBUTTON 上 InvalidateRect(hwnd,NULL,TRUE); 不需要调用来“刷新”客户区。然后调用 WM_PAINT 并重新创建所有内容。

© www.soinside.com 2019 - 2024. All rights reserved.