0

UserControl から派生した Windows フォーム コントロールを作成して、WPF アプリに埋め込みます。私は通常、このリンクに記載されている手順に従いました。

public ref class CTiledImgViewControl : public UserControl
{
...

virtual void OnPaint( PaintEventArgs^ e ) override;

...
};

そして私のCPPファイルでは:

void CTiledImgViewControl::OnPaint( PaintEventArgs^ e )
{
    UserControl::OnPaint(e);
    // do something interesting...
}

すべてがコンパイルされて実行されますが、OnPaint メソッドが呼び出されることはありません。

探すべきもののアイデアはありますか?私はC++で多くのことを行ってきましたが、WinFormsとWPFにはかなり慣れていないので、明らかなことかもしれません...

4

2 に答える 2

2

メソッドを使用して構築するときに適切なスタイルを設定しない限り、通常はOnPainta で呼び出されません。を呼び出すには、スタイルを trueに設定する必要があります。UserControlSetStyleUserPaintOnPaint

SetStyle(ControlStyles::UserPaint, true);


アップデート

私は最近この問題に遭遇し、答えを探しに行きました。(ペイント メッセージの独自の処理を活用するために) ペイント中にいくつかの計算を実行したかったのですが、常にOnPaint.

Reflector を掘り下げた後、対応するメッセージのクリッピング四角形が空でないOnPaint場合にのみ呼び出されることを発見しました。WM_PAINT私のUserControlインスタンスには、クライアント領域全体を埋める子コントロールがあったため、すべてが切り取られました。これは、クリッピング四角形が空で、OnPaint呼び出しがないことを意味していました。

私が望むものを達成する別の方法を見つけることができなかったので、直接WndProcハンドラをオーバーライドして追加することでこれを回避しました。WM_PAINT

于 2008-09-29T23:13:26.097 に答える
1

誰かが興味を持っている場合に備えて、私は問題を解決しました。これは、WinForms コントロールが ViewBox に埋め込まれていたためです。私はそれをグリッドに変更し、すぐにペイント イベントを取得し始めました。WPF について質問するときは、常に XAML を質問に含める必要があると思います。

于 2008-09-30T14:13:05.090 に答える