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