背景SendMessage()
: 私のクライアントには、C で効果的に実装された非常に広範な独自のフォーム ライブラリがあります (実際には、これは基本的に Windows コントロールをラップし、SetStyle()
、 などと対話する独自のオブジェクト指向言語です)。
解決したい問題: 上記のフレームワークで実装されたアプリでトップレベル ウィンドウをドラッグ/サイズ変更 (またはスプリッターをドラッグ) すると、大きなちらつきが発生します。最上位のウィンドウが再描画され、そこに含まれるすべてのコントロールが再描画されます。
質問 1 : フォーム ライブラリに外科的にダブル バッファリングを導入する方法はありますか。特に、標準の Windows GDI 関数を使用してダブル バッファリングを実装できるかどうかを知りたいです。
たとえば、トップ レベル ウィンドウのすべての子ウィンドウも自動的にダブル バッファリングされるように、トップ レベル ウィンドウをダブル バッファリングできるとします。さらに良い代替手段は、任意のウィンドウにダブルバッファリングを導入し、そのすべての子にこれを継承させることです。
最善の解決策はBeginPaint()
、個々のコントロール クラスごとに特別なコードを記述する必要がないように、子コントロールの関数がオフスクリーン バック バッファーの DC にハンドルを返すようにすることです。
質問 2 : 一般的な Windows コントロール (EDIT、BUTTON など) をダブル バッファで描画させる方法 (フラグのセットなど) はありますか? これは、利用するためのバック バッファーをシームレスに提供するより一般的なアプローチよりも悪い解決策ですが、許容できる場合もあります。
すべてのヘルプは大歓迎です。何か明確にできることがあれば教えてください。