2012-04-29 8 views
2

QPainter機能を使用したい外部ライブラリからWindows HDCハンドルを取得しています。 QtにQPaintDeviceをHDCハンドルから作成する方法はありますか?QPaintDeviceをHDCハンドルから作成する

+1

私が見る限り、それは不可能です。 QWidget(QPaintDeviceから継承)にはHDCという概念があります。 QWidget :: getDC()でHDCを取得できますが、設定できません。内部的にはQWidgetPrivate :: dcに格納されています。 QWidgetのPimplクラスでは完全にアクセスできない。 – dagur

答えて

0

これを行う1つの方法:

を、WindowsのAPIを使用するには、HDCからHWNDを取得します。

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

保護されたメンバーconvertにアクセスするには、QWidgetをサブクラス化します。これを使用して、このソリューションで説明されているように、このメンバーを使用してQWidgetを作成します。How to create a qwidget with a hwnd as parent。この例では、QWidgetWrapperのサブクラスを呼び出しました。 WLDは、 "プラットフォーム依存ウィンドウ識別子" のためのQtでのtypedefである

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

注意。

+0

HDCに関連したHWNDはなぜだと思いますか?あなたは["メモリDC"](http://www.codeproject.com/Articles/224754/Guide-to-Win32-Memory-DC)について聞いたことがありますか? HDCはありますが、ウィンドウはありません。 – SigTerm

+0

あなたは正しいので、主張です。これは、メモリDCではないと仮定できる場合にのみ機能します。それは悪い解決策ですが、私が思いついた唯一の解決策です。 – dagur

関連する問題