手動でコントロールを追加する方法

ダイアログ ボックスのコントロールは、ダイアログ エディターを使用して追加できるほか、開発者がコードで追加することができます。

コントロール オブジェクトを自分で作成するには、通常、C++ のダイアログまたはフレームウィンドウ オブジェクトに C++ のコントロール オブジェクトを埋め込みます。 フレームワークにある他の多くのオブジェクトと同様、コントロールにも 2 段階の構築が必要となります。 親となるダイアログ ボックスまたはフレーム ウィンドウを作成する過程で、コントロールの Create メンバー関数を呼び出す必要があります。 これは、ダイアログ ボックスの場合は OnInitDialog で、フレーム ウィンドウの場合は OnCreate で行うのが一般的です。

次の例は、派生したダイアログ クラスのクラス宣言で CEdit オブジェクトを宣言し、OnInitDialogCreate メンバー関数を呼び出す方法を示したものです。 CEdit オブジェクトは埋め込みオブジェクトとして宣言されているため、ダイアログ オブジェクトが構築されるタイミングで自動的に構築されますが、それ自身の Create メンバー関数で初期化することは必要です。

class CCustomDialog : public CDialog
{
   CEdit m_edit;
   virtual BOOL OnInitDialog();
};

次の OnInitDialog 関数は、四角形をセットアップした後、Create を呼び出して Windows 編集コントロールを作成し、それを未初期化の CEdit オブジェクトにアタッチしています。

BOOL CCustomDialog::OnInitDialog()
{
   CDialog::OnInitDialog();
   CRect rect(85, 110, 180, 210);

   m_edit.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP |
                     ES_AUTOHSCROLL | WS_BORDER,
                 rect, this, IDC_EXTRA_EDIT);
   m_edit.SetFocus();
   return FALSE;
}

編集オブジェクトを作成した後、SetFocus メンバー関数を呼び出して、コントロールに入力フォーカスを設定することもできます。 最後に、フォーカスを自分で設定することを示す 0 を OnInitDialog から返します。 ゼロ以外の値を返した場合は、ダイアログ マネージャーによって、ダイアログ項目リストの 1 つ目のコントロール項目にフォーカスが設定されます。 ほとんどの場合、ダイアログ ボックスへのコントロールの追加には、ダイアログ エディターが好んで使用されます。

関連項目

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