標準コントロールからのコントロールの派生

他の CWnd の派生クラスと同様に、既存のコントロール クラスから新しいクラスを派生させることにより、コントロールの動作を変更できます。

派生コントロール クラスを作成するには

  1. 既存のコントロール クラスからクラスを派生させ、オプションで Create メンバー関数をオーバーライドして、基底クラスの Create 関数に必要な引数を提供します。

  2. 特定の Windows メッセージに応答してコントロールの動作を変更するためのメッセージ ハンドラー メンバー関数とメッセージ マップ エントリを提供します。 「関数へのメッセージの割り当て」を参照してください。

  3. コントロールの機能を拡張するための新しいメンバー関数を提供します (省略可能)。

ダイアログ ボックスで派生コントロールを使用するには、追加の作業が必要です。 ダイアログ ボックス内のコントロールの種類と位置は、通常、ダイアログ テンプレート リソースで指定されます。 派生コントロール クラスを作成した場合、これをダイアログ テンプレートで指定することはできません。それは、作成した派生クラスがリソース コンパイラに認識されないためです。

派生コントロールをダイアログ ボックスに配置するには

  1. 派生ダイアログ クラスの宣言に、派生コントロール クラスのオブジェクトを埋め込みます。

  2. ダイアログ クラス OnInitDialog のメンバー関数をオーバーライドして、派生コントロールの SubclassDlgItem メンバー関数を呼び出します。

ダイアログ テンプレートから作成されたコントロールは、SubclassDlgItem によって "動的にサブクラス化" されます。 コントロールが動的にサブクラス化されている場合は、Windows にフックし、独自のアプリケーション内で一部のメッセージを処理してから、残りのメッセージを Windows に渡します。 詳細については、"MFC のリファレンス" のクラス CWndSubclassDlgItem メンバー関数を参照してください。 次の例は、SubclassDlgItem を呼び出す OnInitDialog のオーバーライドを記述する方法を示しています。

BOOL CSubDialog::OnInitDialog()
{
   CDialog::OnInitDialog();

   m_wndMyBtn.SubclassDlgItem(IDC_MYBTN, this);

   return TRUE;
}

派生コントロールはダイアログ クラスに埋め込まれているため、ダイアログ ボックスが作成されると作成され、ダイアログ ボックスが破棄されると破棄されます。 このコードを「手動でコントロールを追加する方法」の例と比較してください。

関連項目

コントロールの作成方法と使い方
コントロール