2012-04-29 66 views
2

我有一個Windows HDC句柄來自外部庫,我想使用QPainter功能進行繪製。 Qt中有什麼方法可以從HDC句柄創建QPaintDevice?這樣做的從HDC句柄創建QPaintDevice

+1

據我所知,這是不可能的。 QWidget(從QPaintDevice繼承)有一個HDC的概念。可以通過QWidget :: getDC()獲得HDC,但是無法設置它。它內部存儲在QWidgetPrivate :: dc中;在QWidget的Pimpl類中,並且完全無法訪問。 – dagur

回答

0

方式一:

使用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。

+0

爲什麼你認爲有一個與HDC相關的HWND?你有沒有聽說過[「內存DC」](http://www.codeproject.com/Articles/224754/Guide-to-Win32-Memory-DC)?它有HDC,但沒有窗口。 – SigTerm

+0

你是對的,因此斷言。如果你可以假設它不是一個內存DC,這隻能工作。這是一個糟糕的解決方案,但是我唯一想到的。 – dagur