4

私はこれに苦労しています、

GDI+ を使用して Bitmap を PluginWindowWin (Firebreath) に描画したい。そのために、今のところ wm_paint メッセージをシミュレートするタイマーがあり、内部に次のコードがあります。

using namespace Gdiplus;
Graphics graphics(hwnd);
graphics.DrawImage(image, 0, 0, 400, 400);

imageGdiplus::Imageで、正常に動作しますが、プラグインの 2 つのインスタンス (2 つの異なる HWND) を作成すると、そのうちの 1 つにのみ描画されます。

それは予想される動作ですか?つまり、GDI+ は HWND から作成された 1 つのコンテキストでのみ描画しますか?

ありがとう!

4

1 に答える 1

1

基本的に、各 (トップレベル) ウィンドウには独自のスレッドが必要です。いずれかのウィンドウを独自のスレッドに配置すると、独自のメッセージ ディスパッチャーを持つ両方のウィンドウ/スレッドにメッセージを送信することで、並行して描画できるはずです。

編集: 共有 GDI オブジェクトを使用したスレッド化は危険な作業です。リソース管理はスレッドセーフでなければなりません。

于 2012-01-30T23:39:30.393 に答える