0

いくつかのアイテムをペイントできるグリッドコントロールを保持するCWnd(親)があります。問題は、洗練されたCWndを描画したいのですが、グリッドコントロールでは、CWndとは関係のない「ItemBase」クラスから派生したアイテムしかペイントできないということです。

このItemBaseクラスを使用すると、仮想関数void drawItem(CDC *、CRect)をオーバーライドできます。これにより、提供されたCDCおよびクリップされた領域のCRectに独自の図面をペイントできます。

私が持っているアイデアは、親ウィンドウの非表示の子として洗練されたCWndを作成し、ItemBaseのdrawItemで提供されたCDCでCWnd::Paintを使用することです。

だから私がすることは:

  1. グリッドコントロールがあります。
  2. 洗練されたウィンドウのセットを作成します
  3. ItemBaseから派生したクラスのオブジェクトを(洗練されたウィンドウごとに)作成します
  4. 基本タイプItemBaseのオブジェクトのセットをグリッドコントロールに追加します
  5. drawItem(CDC * dc、CRect area)で、私は次のように呼び出します。

    m_sophisticatedWindow-> MoveWindow(area); //ウィンドウを適切な場所に移動しますm_sophisticatedWindow->Print(dc、PRF_CLIENT); //レンダリングします

したがって、グラインドコントロールの適切な場所で、適切な洗練されたウィンドウがペイントされることを期待していますが、何も起こりません。Printの代わりにPrintClient/PrintWindowを使用してみました。私はMoveWindowで実験も行っていました-位置をいくつかの固定位置に変更するようなものですが、それは役に立ちません。

drawItemのCDCに直接何か(線、点など)をペイントすると、すべてが正常になります。印刷機能だけでは、期待どおりに機能しないようです。

手がかりはありますか?

4

1 に答える 1

0

私が抱えていた問題は、私が入手したCDCに設定されたクリッピング領域があることでした。「間違った」場所で描いている限り、何も現れませんでした。

于 2012-12-03T13:29:38.440 に答える