OpenGL 描画ルーチンを使用して、MFC で構築された社内アプリケーションがいくつかあります。それらはすべて同じコードを使用して画面に描画し、画面を印刷するか、JPEG ファイルに保存します。Windows XP ではすべて正常に動作しており、Vista でも動作させる方法を見つける必要があります。
3 つのアプリケーションでは、すべてが機能します。残りの 1 つでは、ウィンドウの境界線、タイトル バー、メニュー、およびタスク バーを取得できますが、内部は表示されません。前述したように、これらのアプリケーションはまったく同じコードを使用して画面に書き込み、ウィンドウ イメージをキャプチャします。関連しているように見える唯一の違いは、問題のアプリケーションが MFC マルチ ドキュメント インターフェイスを使用しているのに対して、その作業は、単一のドキュメント インターフェイスを使用します。
答えがネット上にないか、思ったよりグーグルが下手です。MSDN フォーラムで質問したところ、GDI ではなく GDI+ を使用するという実際的な提案しか得られませんでしたが、それでも違いはありませんでした。ウィンドウへのポインターを指定して、キャプチャ、印刷、または保存するコードのすべての部分でさまざまなことを試しましたが、明らかにウィンドウ自体の問題です。私はまだ SDI を使用して問題のあるアプリケーションを再構築しておらず、他にアイデアがありません。
誰もこのようなものを見たことがありますか?
私が持っているのは 4 つのアプリケーションです。多くの共通コードを使用し、実際の .h ファイルと .cpp ファイルを共有しているため、描画とスクリーン キャプチャのコードが同一であることがわかります。
*pWnd と、ソースの四角形と宛先のサイズを受け取る WindowtoDIB() ルーチンがあります。Microsoft のコードをわずかに変更したように見えますが、Microsoft の Web サイトで、このファイルに他の関数を見つけました。私の 4 つのアプリケーションのうち、3 つがこれを問題なく処理しますが、1 つがそうではありません。最も明白な違いは、問題の 1 つが MDI であることです。
*pWnd が問題のようです。私は決して MFC の第一人者ではありません。問題は、SDI に 1 つのウィンドウ設定があり、MDI に複数のウィンドウ設定があることにあるように思えます。関数に間違った *pWnd を渡している可能性があります。
その間、64 ビット Vista テスト マシンでは正常に動作するようになりましたが、32 ビット Vista マシンではまだ動作しません。理由がわかりません。前回のテスト以来、私は何も変更していません。他の誰も変更していないと思います。(32 ビット バージョンでは、Print Screen キーは期待どおりに機能しますが、画面を JPEG として保存しません。)