6

MFC CEditから派生したコントロールを作成していますが、コントロールのm_hwndがいっぱいになったら、初期化コードを追加する必要があります。

これを実現するために、どの関数をオーバーライドできますか、またはどのメッセージを処理できますか?

OnCreateで試しましたが、ダイアログでのみ機能するようです

編集:私が初期化しているのは、編集のキューバナーです

ありがとう

4

3 に答える 3

7

Mark Ransomのヒントに従って、私はついに自分の初期化を実装するためのより良い機能を見つけました。CWnd :: SubclassWindowをオーバーロードすることは良い考えですが、この関数は仮想ではなく、サブクラスポインターからの呼び出しが必要になります。CWnd*からSubclassWindowを呼び出すことは機能しません。

関数CWnd::PreSubclassWindowを見つけました。これは仮想であり、SubclassWindowの直前に呼び出されます。m_hwndはそこで有効なので、必要なコードを書くのに適した場所です。さらに、この関数は仮想であり、フレームワークによって自動的に呼び出されるため、適切なポインター型を使用することを心配する必要はありません。

于 2012-07-17T13:32:38.263 に答える
5

コントロールがダイアログ上にある場合、OnCreateは機能しません。これは、コントロールがウィンドウクラスにサブクラス化される前に作成されるためです。これは、ダイアログのDoDataExchangeで発生します。

CWnd :: SubclassWindowをオーバーライドして、独自のコードの前に基本メソッドを呼び出すことができます。

于 2012-07-13T15:16:31.823 に答える
0

正確に初期化する内容に応じて、をオーバーライドするか、コントロールが含まれているDialogクラスOnPaint()のに初期化コードを追加できます。OnInitDialog()

于 2012-07-13T15:16:05.977 に答える