ダイアログ ボックスにコントロールを追加する方法には、ダイアログ エディターを使用する方法と、コードから直接追加する方法があります。
通常、コントロール オブジェクトを直接作成するには、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 から返します。 0 以外の値を返した場合、ダイアログ マネージャーはダイアログ項目リストの最初のコントロール項目にフォーカスを設定します。 ほとんどの場合、ダイアログ ボックスにコントロールを追加するには、ダイアログ エディターを使用します。