1

GDI+ を使用してアプリケーションのユーザー インターフェイスを描画しているときに、奇妙な問題に直面しています。他のアプリケーションのアーティファクトを示す表示エラーが発生することがあります。テキスト コントロールの境界線が完全に黒く描画されることがあります。

場合によっては、問題が単純な表示エラー以上のものになることもあります。その場合、別のアプリケーションのメニューまたはコンテキスト メニューが自分のアプリケーションに埋め込まれています。このメニューは表示されるだけでなく、マウスを上に置いてサブメニューを展開することで、メニュー エントリを強調表示することもできます。ただし、エントリをクリックしても、それらの背後にある機能はありません。これらのメニューは常に Windows エクスプローラーの一部になっているようです。

これらの問題の原因の調査をどこから始めればよいかわかりません。おそらく、ここ SO の誰かが、考えられる問題の原因や解決策を教えてくれるでしょうか?

明確化:異なるハードウェア、異なるグラフィック カード ドライバ、および異なるオペレーティング システム (XP、Win7、Server 2008) を搭載した複数の PC で、同じコードがこのエラーを示します。コードを投稿したいのですが、非常に複雑で、アプリケーション全体に広がっています。そして、何が問題の根本原因なのか見当もつかないので、コードの正しい部分を切り分けることができません。

ここにいくつかのスクリーンショットがあります:

テキスト コントロールとパネル コントロールの周りの黒い境界線:

アプリケーション ウィンドウ内に別のアプリケーションのコンテンツが描画されます。左側に Windows エクスプローラーのコンテキスト メニューが表示され、右側に Excel シートの一部が表示されます。フォームの下部にあるグリッド テーブルは通常、ウィンドウのタイトルバーのすぐ下にあります: エクスプローラーのコンテキスト メニューを表示しているフォームにエラーが表示されます:

4

1 に答える 1

0

あなたが言うように、別のアプリケーションを埋め込んでいますが、GDI+ と一緒に従来の GDI 呼び出しを使用していると思いますか? それは退屈なことです。私も同じことをしましたが、プログラムの一部が描画されずに見えなくなるといういくつかの問題が発生しました。

私にとっての解決策は、GDI-Functions を使用する前に常にすべての Gdiplus::Graphics を破棄することでした (現在もそうです)。代わりに、Graphics::Flush を呼び出してみることもできます。

結局のところ、GDI+ の使用を開始することは悪い考えであり、既存の GDI アプリケーションにそれを混在させることは恐ろしい考えであることを再開しなければなりません。使用する API は 1 つだけにする必要があります (おそらく、むしろ direct3D)。GDI+ は GDI に基づいていません - 明らかに両方が並行して動作します。

GDI と GDI+ を混在させることのいくつかの制限について説明しているこの記事を見つけました: https://support.microsoft.com/en-gb/help/311221/info-interoperability-between-gdi-and-gdi

于 2013-02-26T09:31:31.957 に答える