Share via


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

更新 : 2007 年 11 月

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

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

  1. 既存のコントロール クラスからクラスを派生させ、必要に応じて Create メンバ関数をオーバーライドします。オーバーライド関数では、基本クラスの Create 関数に必要な引数を渡します。

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

  3. 必要に応じて、コントロールの機能を拡張する新しいメンバ関数を用意します。

ダイアログ ボックスで派生クラスのコントロールを使用する場合は、さらに作業が必要になります。コントロールのタイプおよびダイアログ ボックス内の位置は通常、ダイアログ テンプレート リソースで指定します。派生コントロール クラスを作成する場合、リソース コンパイラは派生クラスのことを何も認識していないため、タイプや位置をダイアログ テンプレートで指定できません。

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

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

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

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

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

   m_wndMyBtn.SubclassDlgItem(IDC_MYBTN, this);

   return TRUE;
}

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

参照

概念

コントロール (MFC)

参照

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