【问题标题】:c++ win32 where to draw a meterc++ win32在哪里画一米
【发布时间】:2011-11-20 10:05:47
【问题描述】:

我需要在一个使用 c++ 的 win32 应用程序中使用简单的矩形绘制一个仪表。在窗口中绘制仪表的最佳方法是什么(应该每 10 毫秒重新绘制一次)?我应该将它直接绘制到窗口中(在消息 WM_PAINT 上)还是使用其他一些组件并绘制到其中?

【问题讨论】:

  • 10 毫秒更新通常是不现实的。您无法比绘制屏幕更快地进行有意义的更新,大多数现代显示器只有 60 赫兹(10 毫秒将是 100 赫兹)。

标签: c++ winapi drawing gdi


【解决方案1】:

创建一个计时器并通过使用 InvalidateRect 使包含仪表的窗口部分无效来响应 WM_TIMER 消息。这将自动生成 WM_PAINT 消息,但如果程序落后,它们将不会堆积。

【讨论】:

  • 所以最好的方法是直接在窗口中绘制它?不在其他组件中?
  • @blejzz:您应该在处理WM_PAINT 的窗口中绘图。这不一定是顶级窗口,您可以使用自己的“仪表自定义控件”窗口过程创建一个子窗口,并使其像 Windows 内置控件一样可重用。
  • @blejzz,我已经做到了两种方式 - 直接在窗口中,并作为子窗口。子窗口提供了更好的关注点分离,但除此之外我不能说我有偏好。
  • @blejzz:在Win32中,子窗口是组件的基础。除非您有一个允许特定组件的体系结构(例如无窗口的 ActiveX 控件。但您会知道),否则子窗口是您的仪表“组件”的良好起点。下一步是使其成为 ActiveX 控件。但你应该从尝试绘制开始。
猜你喜欢
  • 2018-09-29
  • 1970-01-01
  • 2020-07-19
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
相关资源
最近更新 更多