0

StrechDIBitsを使用してラベルのhdcに生のビットマップ画像をペイントするアプリケーションを構築しています。

ptr = g->GetHdc();
dc = (HDC)ptr.ToInt32 ();
SetStretchBltMode (dc, COLORONCOLOR);
StretchDIBits (dc, 0, 0, (int) (LabelPictureShow->Width), (int) (LabelPictureShow->Height), 0, 0, width, height, data, bitmapInfo, DIB_RGB_COLORS, SRCCOPY);    
 g->ReleaseHdc (ptr);

このようにして、ビデオストリーム全体を、ストリームから次々と画像を描画します。これは完璧に機能します。フルスクリーンを実現するために、フォームとラベルを画面全体にサイズ変更する機能もあります。wchichはビデオの再生にも最適です。

しかし、ビデオを停止するか、1つの画像のみを送信して、完全な画面機能を呼び出すと、それは画像を塗り直しません、そしてそれは私の問題です。サイズ変更後に画像を再度ペイントするために、フォームとラベルの両方でペイントイベント、サイズ変更イベントを使用しようとしましたが、何も機能しません。フルスクリーンまたは通常のサイズに戻ると、画像が短時間点滅しますが、その後、コントロールの色で再描画されて消えます。StretchDIBitsを使用してペイントコードをどこにでも配置しようとしましたが、どちらも機能しません。どんな助けやアドバイスも本当にありがたいです。

編集:私にとって悲しいことは、たとえば、ラベルのクリックイベントにペイントコードを入れると、正常に機能することです...

4

1 に答える 1

0

他のプロジェクトで使用されているカスタムPaintBoxコントロールを使用して解決しました。このコントロールは、画像が再描画される上書きされたOnPaintメソッドを使用します。どういうわけかこのソリューションは機能しますが、以前のほとんど同じソリューションは機能しません。

于 2011-05-11T17:10:32.900 に答える