手動でコントロールを追加する方法
ダイアログ ボックスのコントロールは、ダイアログ エディターを使用して追加できるほか、開発者がコードで追加することができます。
コントロール オブジェクトを自分で作成するには、通常、C++ のダイアログまたはフレームウィンドウ オブジェクトに C++ のコントロール オブジェクトを埋め込みます。 フレームワークにある他の多くのオブジェクトと同様、コントロールにも 2 段階の構築が必要となります。 親となるダイアログ ボックスまたはフレーム ウィンドウを作成する過程で、コントロールの Create メンバー関数を呼び出す必要があります。 これは、ダイアログ ボックスの場合は OnInitDialog で、フレーム ウィンドウの場合は OnCreate で行うのが一般的です。
次の例は、派生したダイアログ クラスのクラス宣言で CEdit
オブジェクトを宣言し、OnInitDialog
の Create
メンバー関数を呼び出す方法を示したものです。 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 つ目のコントロール項目にフォーカスが設定されます。 ほとんどの場合、ダイアログ ボックスへのコントロールの追加には、ダイアログ エディターが好んで使用されます。