コントロールをビットマップにオフスクリーンでレンダリングして、すばやくアクセスできるようにしたいと考えています。
残念ながらControl.DrawToBitmap
、それが呼び出されるすべての子コントロールを含むコントロール全体を描画するようです。内部的には、自己提供の DC を含む WM_PRINT メッセージをビットマップに発行します。この一時的なビットマップは、ユーザー提供のビットマップにブリットされます。私には受け入れられません。必要に応じてこのビットマップを更新して、ビットマップが必要なときのパフォーマンスの低下を最小限に抑えたいと思います。
理想的なシナリオでは、フォームが画面に表示されているかのように動作するようにしたいと思います (ただし、表示することはできません)。これは、たとえば、一部の Control のText
プロパティが変更された場合、フォームが部分的に無効になることを意味します。関連するメッセージ/イベントをキャッチすると、フォームを描画するために独自の DC を指定するか、フォーム DC を自分自身に単純に BitBlt することができます。
私が見たいくつかの方向:
- の
PaintEventArgs
パラメーターはOnPaint
メンバーsavedGraphicsStateを保持しているようです。おそらく、無効にする必要がないものを把握するために使用できます - フォームは表示されますが、画面領域の外にあります。ただし、コントロールは描画されません。
- ウィンドウで RedrawWindow() を手動で呼び出す、同じ話