C++ 从HDC句柄创建设备

C++ 从HDC句柄创建设备,c++,qt,gdi,C++,Qt,Gdi,我有一个来自外部库的Windows HDC句柄,我想使用QPaint功能来绘制它。Qt中有没有办法从HDC句柄创建QPaintDevice?一种方法: 使用Windows API,从HDC获取HWND HWND handle = WindowFromDC(hdc); assert(handle != NULL); 然后子类QWidget来访问受保护的成员convert。使用此方法,使用此成员创建QWidget,如此解决方案中所述:。在本例中,我调用了QWidgetWrapper的子类 QWid

我有一个来自外部库的Windows HDC句柄,我想使用QPaint功能来绘制它。Qt中有没有办法从HDC句柄创建QPaintDevice?

一种方法:

使用Windows API,从HDC获取HWND

HWND handle = WindowFromDC(hdc);
assert(handle != NULL);
然后子类QWidget来访问受保护的成员convert。使用此方法,使用此成员创建QWidget,如此解决方案中所述:。在本例中,我调用了QWidgetWrapper的子类

QWidgetWrapper *w = new QWidgetWrapper();
w->create((Wld)main_window);
请注意,Wld在Qt中是一个typedef,表示“平台相关窗口标识符”。

一种方法:

使用Windows API,从HDC获取HWND

HWND handle = WindowFromDC(hdc);
assert(handle != NULL);
然后子类QWidget来访问受保护的成员convert。使用此方法,使用此成员创建QWidget,如此解决方案中所述:。在本例中,我调用了QWidgetWrapper的子类

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

请注意,Wld在Qt中是一个typedef,表示“依赖于平台的窗口标识符”。

据我所知,这是不可能的。QWidget(继承自QPaintDevice)具有HDC的概念。可以通过QWidget::getDC()获取其HDC,但不能设置它。在内部,它存储在QWidgetPrivate::dc中;在QWidget的Pimpl类中,完全不可访问。据我所知,这是不可能的。QWidget(继承自QPaintDevice)具有HDC的概念。可以通过QWidget::getDC()获取其HDC,但不能设置它。在内部,它存储在QWidgetPrivate::dc中;在QWidget的Pimpl类中,是完全不可访问的。为什么你认为有一个与HDC相关的HWND?你听说了吗?它有HDC,但没有窗口。你是对的,因此断言。这只能在假设它不是内存DC时起作用。这是一个糟糕的解决方案,但这是我唯一想到的。为什么你认为有一个与HDC相关的HWND?你听说了吗?它有HDC,但没有窗口。你是对的,因此断言。这只能在假设它不是内存DC时起作用。这是一个糟糕的解决方案,但这是我唯一想到的。