【问题标题】:Create a QPaintDevice from HDC handle从 HDC 句柄创建 QPaintDevice
【发布时间】:2012-05-09 13:08:16
【问题描述】:

我有一个来自外部库的 Windows HDC 句柄,我想使用 QPainter 功能进行绘制。 Qt 中有什么方法可以从 HDC 句柄创建 QPaintDevice?

【问题讨论】:

  • 据我所知,这是不可能的。 QWidget(继承自QPaintDevice)有HDC的概念。可以通过 QWidget::getDC() 获取其 HDC,但不能设置。它在内部存储在 QWidgetPrivate::dc;在 QWidget 的 Pimpl 类中,完全无法访问。

标签: c++ qt gdi


【解决方案1】:

一种方法:

使用 Windows API,从 HDC 获取 HWND。

HWND handle = WindowFromDC(hdc);
assert(handle != NULL);

然后子类 QWidget 以访问受保护的成员转换。使用它,使用此解决方案中描述的此成员创建 QWidget:How to create a qwidget with a hwnd as parent。在这个例子中,我调用了 QWidgetWrapper 的子类。

QWidgetWrapper *w = new QWidgetWrapper();
w->create((Wld)main_window);

请注意,Wld 是 Qt 中“平台相关窗口标识符”的 typedef。

【讨论】:

  • 您为什么认为 HWND 与 HDC 相关联?你听说过"memory DC"吗?它有 HDC,但没有窗口。
  • 你是对的,因此断言。这只有在您可以假设它不是内存 DC 时才有效。这是一个糟糕的解决方案,但我想出的唯一一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
  • 2010-12-17
相关资源
最近更新 更多