CDialog クラス
画面にダイアログ ボックスを表示するために使用される基本クラス。
構文
class CDialog : public CWnd
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CDialog::CDialog | CDialog オブジェクトを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
CDialog::Create | CDialog オブジェクトを初期化します。 モードレス ダイアログ ボックスを作成し、オブジェクトに CDialog アタッチします。 |
CDialog::CreateIndirect | (リソース ベースではなく) メモリ内のダイアログ ボックス テンプレートからモードレス ダイアログ ボックスを作成します。 |
CDialog::D oModal | モーダル ダイアログ ボックスを呼び出し、完了したら を返します。 |
CDialog::EndDialog | モーダル ダイアログ ボックスを閉じます。 |
CDialog::GetDefID | ダイアログ ボックスの既定の押しボタン コントロールの ID を取得します。 |
CDialog::GotoDlgCtrl | ダイアログ ボックス内の指定したダイアログ ボックス コントロールにフォーカスを移動します。 |
CDialog::InitModalIndirect | (リソースベースではなく) メモリ内のダイアログ ボックス テンプレートからモーダル ダイアログ ボックスを作成します。 パラメーターは、関数 DoModal が呼び出されるまで格納されます。 |
CDialog::MapDialogRect | 四角形のダイアログ ボックスの単位を画面の単位に変換します。 |
CDialog::NextDlgCtrl | ダイアログ ボックス内の次のダイアログ ボックス コントロールにフォーカスを移動します。 |
CDialog::OnInitDialog | ダイアログ ボックスの初期化を拡張するために オーバーライドします。 |
CDialog::OnSetFont | ダイアログ ボックス コントロールがテキストを描画するときに使用するフォントを指定するには、 をオーバーライドします。 |
CDialog::PrevDlgCtrl | ダイアログ ボックスの前のダイアログ ボックス コントロールにフォーカスを移動します。 |
CDialog::SetDefID | ダイアログ ボックスの既定の押ボタン コントロールを、指定した押ボタンに変更します。 |
CDialog::SetHelpID | ダイアログ ボックスの状況依存ヘルプ ID を設定します。 |
プロテクト メソッド
名前 | 説明 |
---|---|
CDialog::OnCancel | [キャンセル] ボタンまたは ESC キー アクションを実行するには、 をオーバーライドします。 既定値はダイアログ ボックスを閉じ、 DoModal IDCANCEL を返します。 |
CDialog::OnOK | モーダル ダイアログ ボックスで [OK] ボタン アクションを実行するには、 をオーバーライドします。 既定値はダイアログ ボックスを閉じ、 DoModal IDOK を返します。 |
解説
ダイアログ ボックスには、モーダルとモードレスの 2 種類があります。 モーダル ダイアログ ボックスは、アプリケーションを続行する前にユーザーが閉じる必要があります。 モードレス ダイアログ ボックスを使用すると、ユーザーはダイアログ ボックスを表示し、ダイアログ ボックスをキャンセルまたは削除せずに別のタスクに戻ることができます。
CDialog
オブジェクトは、ダイアログ テンプレートと派生クラスのCDialog
組み合わせです。 ダイアログ エディターを使用してダイアログ テンプレートを作成し、それをリソースに格納した後、クラスの追加ウィザードを使用して から CDialog
派生したクラスを作成します。
ダイアログ ボックスは、他のウィンドウと同様に、Windows からメッセージを受信します。 ダイアログ ボックスでは、ユーザーがダイアログ ボックスを操作する方法であるため、ダイアログ ボックスのコントロールからの通知メッセージを処理することに特に関心があります。 クラス ウィザードを使用して、処理するメッセージを選択すると、適切なメッセージ マップ エントリとメッセージ ハンドラー メンバー関数がクラスに追加されます。 ハンドラー メンバー関数でアプリケーション固有のコードを記述するだけで済みます。
必要に応じて、いつでもメッセージ マップ エントリとメンバー関数を手動で記述できます。
最も簡単なダイアログ ボックス以外では、メンバー変数を派生ダイアログ クラスに追加して、ユーザーがダイアログ ボックスのコントロールに入力したデータを格納したり、ユーザーのデータを表示したりします。 変数の追加ウィザードを使用して、メンバー変数を作成し、それらをコントロールに関連付けることができます。 同時に、変数の型と、各変数の値の許容範囲を選択します。 コード ウィザードによって、派生ダイアログ クラスにメンバー変数が追加されます。
メンバー変数とダイアログ ボックスのコントロール間のデータ交換を自動的に処理するために、データ マップが生成されます。 データ マップには、ダイアログ ボックスのコントロールを適切な値で初期化し、データを取得し、データを検証する関数が用意されています。
モーダル ダイアログ ボックスを作成するには、派生ダイアログ クラスのコンストラクターを使用してスタック上に オブジェクトを作成し、 を呼び出 DoModal
してダイアログ ウィンドウとそのコントロールを作成します。 モードレス ダイアログを作成する場合は、ダイアログ クラスの コンストラクターで を呼び出 Create
します。
Windows SDK の説明に従って DLGTEMPLATE データ構造を使用して、メモリ内にテンプレートを作成することもできます。 オブジェクトを CDialog
構築した後、 CreateIndirect を 呼び出してモードレス ダイアログ ボックスを作成するか、 InitModalIndirect と DoModal を呼び出してモーダル ダイアログ ボックスを作成します。
交換と検証のデータ マップは、 の CWnd::DoDataExchange
オーバーライドで書き込まれ、新しいダイアログ クラスに追加されます。 Exchange と検証の機能の詳細については、 の CWnd
DoDataExchange メンバー関数を参照してください。
プログラマとフレームワークの両方が、CWnd::UpdateData の呼び出しを介して間接的に呼びDoDataExchange
出されます。
フレームワークは、ユーザーが [OK] ボタンをクリックしてモーダル ダイアログ ボックスを閉じるときに を呼び出 UpdateData
します。 ([キャンセル] ボタンをクリックした場合、データは取得されません)。 OnInitDialog の既定の実装では、 を呼び出 UpdateData
してコントロールの初期値を設定することもできます。 通常は、 をオーバーライド OnInitDialog
して、コントロールをさらに初期化します。 OnInitDialog
は、すべてのダイアログ コントロールが作成された後、およびダイアログ ボックスが表示される直前に呼び出されます。
モーダル ダイアログ ボックスまたはモードレス ダイアログ ボックスの実行中は、いつでも を呼び出 CWnd::UpdateData
すことができます。
手動でダイアログ ボックスを開発する場合は、派生ダイアログ ボックス クラスに必要なメンバー変数を自分で追加し、これらの値を設定または取得するためのメンバー関数を追加します。
モーダル ダイアログ ボックスは、ユーザーが [OK] または [キャンセル] ボタンを押したとき、またはコードがメンバー関数を呼び出すときに自動的に EndDialog
閉じます。
モードレス ダイアログ ボックスを実装する場合は、常にメンバー関数を OnCancel
オーバーライドし、その中から を呼び出 DestroyWindow
します。 を呼び出すので、基底クラス CDialog::OnCancel
を呼び出 EndDialog
さないでください。これにより、ダイアログ ボックスは非表示になりますが、破棄されません。 モードレス ダイアログ ボックスは通常 で割り当てられるnew
ため、 を削除this
するには、モードレス ダイアログ ボックスの をオーバーライドPostNcDestroy
する必要もあります。 モーダル ダイアログ ボックスは通常、フレーム上に構築され、クリーンアップは必要 PostNcDestroy
ありません。
の CDialog
詳細については、「 ダイアログ ボックス」を参照してください。
継承階層
CDialog
必要条件
ヘッダー: afxwin.h
CDialog::CDialog
リソースベースのモーダル ダイアログ ボックスを作成するには、コンストラクターのいずれかのパブリック フォームを呼び出します。
explicit CDialog(
LPCTSTR lpszTemplateName,
CWnd* pParentWnd = NULL);
explicit CDialog(
UINT nIDTemplate,
CWnd* pParentWnd = NULL);
CDialog();
パラメーター
lpszTemplateName
ダイアログ ボックス テンプレート リソースの名前である null で終わる文字列を格納します。
nIDTemplate
ダイアログ ボックス テンプレート リソースの ID 番号を格納します。
pParentWnd
ダイアログ オブジェクトが属する親ウィンドウ オブジェクトまたは所有者ウィンドウ オブジェクト ( CWnd 型) を指します。 NULL の場合、ダイアログ オブジェクトの親ウィンドウは メイン アプリケーション ウィンドウに設定されます。
解説
コンストラクターの 1 つの形式では、テンプレート名によってダイアログ リソースにアクセスできます。 もう 1 つのコンストラクターは、通常、IDD_ プレフィックス (たとえば、 IDD_DIALOG1 ) を持つテンプレート ID 番号によるアクセスを提供します。
メモリ内のテンプレートからモーダル ダイアログ ボックスを構築するには、最初にパラメーターなしの保護されたコンストラクターを呼び出してから を呼び出 InitModalIndirect
します。
上記のいずれかのメソッドを使用してモーダル ダイアログ ボックスを作成した後、 を呼び出します DoModal
。
モードレス ダイアログ ボックスを作成するには、コンストラクターの保護された形式を CDialog
使用します。 モードレス ダイアログ ボックスを実装するには、独自のダイアログ ボックス クラスを派生させる必要があるため、コンストラクターは保護されています。 モードレス ダイアログ ボックスの構築は、2 段階のプロセスです。 最初にコンストラクターを呼び出します。次に、 メンバー関数を Create
呼び出してリソースベースのダイアログ ボックスを作成するか、 を呼び出 CreateIndirect
してメモリ内のテンプレートからダイアログ ボックスを作成します。
CDialog::Create
を呼び出 Create
して、リソースからダイアログ ボックス テンプレートを使用してモードレス ダイアログ ボックスを作成します。
virtual BOOL Create(
LPCTSTR lpszTemplateName,
CWnd* pParentWnd = NULL);
virtual BOOL Create(
UINT nIDTemplate,
CWnd* pParentWnd = NULL);
パラメーター
lpszTemplateName
ダイアログ ボックス テンプレート リソースの名前である null で終わる文字列を格納します。
pParentWnd
ダイアログ オブジェクトが属する親ウィンドウ オブジェクト ( CWnd 型) を指します。 NULL の場合、ダイアログ オブジェクトの親ウィンドウは メイン アプリケーション ウィンドウに設定されます。
nIDTemplate
ダイアログ ボックス テンプレート リソースの ID 番号を格納します。
戻り値
ダイアログ ボックスの作成と初期化が成功した場合、どちらのフォームも 0 以外の値を返します。それ以外の場合は 0。
解説
コンストラクター内に 呼 Create
び出しを配置するか、コンストラクターが呼び出された後にそれを呼び出すことができます。
テンプレート名またはテンプレート ID 番号 (たとえば、IDD_DIALOG1) によって、ダイアログ ボックス テンプレート リソースにアクセスするための 2 つの形式 Create
のメンバー関数が提供されます。
どちらのフォームでも、親ウィンドウ オブジェクトへのポインターを渡します。 pParentWnd が NULL の場合、親ウィンドウまたは所有者ウィンドウが メイン アプリケーション ウィンドウに設定されたダイアログ ボックスが作成されます。
メンバー関数は Create
、ダイアログ ボックスを作成した直後に を返します。
親ウィンドウの作成時にダイアログ ボックスが表示される場合は、ダイアログ ボックス テンプレートのWS_VISIBLE スタイルを使用します。 それ以外の場合は、 を呼び出す ShowWindow
必要があります。 その他のダイアログ ボックス スタイルとそのアプリケーションについては、「MFC リファレンス」の「Windows SDK とウィンドウ スタイル」の DLGTEMPLATE 構造体を参照してください。
関数によって作成された CWnd::DestroyWindow
ダイアログ ボックスを破棄するには、 関数を Create
使用します。
例
void CMyDialog::OnMenuShowSimpleDialog()
{
//m_pSimpleDialog initialized to NULL in the constructor of CMyDialog class
m_pSimpleDlg = new CSimpleDlg();
//Check if new succeeded and we got a valid pointer to a dialog object
if (m_pSimpleDlg != NULL)
{
BOOL ret = m_pSimpleDlg->Create(IDD_SIMPLEDIALOG, this);
if (!ret) //Create failed.
{
AfxMessageBox(_T("Error creating Dialog"));
}
m_pSimpleDlg->ShowWindow(SW_SHOW);
}
else
{
AfxMessageBox(_T("Error Creating Dialog Object"));
}
}
CDialog::CreateIndirect
メモリ内のダイアログ ボックス テンプレートからモードレス ダイアログ ボックスを作成するには、このメンバー関数を呼び出します。
virtual BOOL CreateIndirect(
LPCDLGTEMPLATE lpDialogTemplate,
CWnd* pParentWnd = NULL,
void* lpDialogInit = NULL);
virtual BOOL CreateIndirect(
HGLOBAL hDialogTemplate,
CWnd* pParentWnd = NULL);
パラメーター
lpDialogTemplate
ダイアログ ボックスの作成に使用されるダイアログ ボックス テンプレートを含むメモリを指します。 このテンプレートは、Windows SDK で説明されているように、 DLGTEMPLATE 構造体と制御情報の形式です。
pParentWnd
ダイアログ オブジェクトの親ウィンドウ オブジェクト ( CWnd 型) をポイントします。 NULL の場合、ダイアログ オブジェクトの親ウィンドウは メイン アプリケーション ウィンドウに設定されます。
lpDialogInit
DLGINIT リソースを指します。
hDialogTemplate
ダイアログ ボックス テンプレートを含むグローバル メモリへのハンドルが含まれます。 このテンプレートは、ダイアログ ボックスの各コントロールの DLGTEMPLATE
構造とデータの形式です。
戻り値
ダイアログ ボックスが正常に作成および初期化された場合は 0 以外。それ以外の場合は 0。
解説
メンバー関数は CreateIndirect
、ダイアログ ボックスを作成した直後に を返します。
親ウィンドウの作成時にダイアログ ボックスが表示される場合は、ダイアログ ボックス テンプレートのWS_VISIBLE スタイルを使用します。 それ以外の場合は、 を呼び出 ShowWindow
して表示する必要があります。 テンプレートで他のダイアログ ボックス スタイルを指定する方法の詳細については、Windows SDK の DLGTEMPLATE 構造体を参照してください。
関数によって作成された CWnd::DestroyWindow
ダイアログ ボックスを破棄するには、 関数を CreateIndirect
使用します。
ActiveX コントロールを含むダイアログ ボックスには、DLGINIT リソースで提供される追加情報が必要です。
CDialog::DoModal
このメンバー関数を呼び出してモーダル ダイアログ ボックスを呼び出し、完了したらダイアログ ボックスの結果を返します。
virtual INT_PTR DoModal();
戻り値
int
ダイアログ ボックスを閉じるのに使用される CDialog::EndDialog メンバー関数に渡された nResult パラメーターの値を指定する値。 関数がダイアログ ボックスを作成できなかった場合は -1、他のエラーが発生した場合は IDABORT になります。その場合、出力ウィンドウには GetLastError からのエラー情報が含まれます。
解説
このメンバー関数は、ダイアログ ボックスがアクティブな間にユーザーとのすべての対話を処理します。 それによりダイアログ ボックスがモーダルになります。つまり、ダイアログ ボックスが閉じられるまでユーザーは他のウィンドウとやりとりできません。
ユーザーがダイアログ ボックスのプッシュ ボタン ([OK] や [キャンセル] など) のいずれかをクリックすると、ダイアログ ボックスを閉じようとするために 、OnOK や OnCancel などのメッセージ ハンドラー メンバー関数が呼び出されます。 既定 OnOK
のメンバー関数は、ダイアログ ボックス データを検証して更新し、結果 IDOK でダイアログ ボックスを閉じます。既定 OnCancel
のメンバー関数は、ダイアログ ボックス データを検証または更新せずに、結果 IDCANCEL でダイアログ ボックスを閉じます。 これらのメッセージ ハンドラー関数をオーバーライドして、動作を変更できます。
注意
PreTranslateMessage
は、モーダル ダイアログ ボックスのメッセージ処理に対して呼び出されるようになりました。
例
void CMyDialog::OnMenuShowAboutDialog()
{
// Construct the dialog box passing the
// ID of the dialog template resource
CDialog aboutDlg(IDD_ABOUTBOX);
// Create and show the dialog box
INT_PTR nRet = -1;
nRet = aboutDlg.DoModal();
// Handle the return value from DoModal
switch (nRet)
{
case -1:
AfxMessageBox(_T("Dialog box could not be created!"));
break;
case IDABORT:
// Do something
break;
case IDOK:
// Do something
break;
case IDCANCEL:
// Do something
break;
default:
// Do something
break;
};
}
CDialog::EndDialog
モーダル ダイアログ ボックスを終了するには、このメンバー関数を呼び出します。
void EndDialog(int nResult);
パラメーター
nResult
ダイアログ ボックスから の呼び出し元 DoModal
に返される値を格納します。
解説
このメンバー関数は、 の戻り値DoModal
として nResult を返します。 モーダル ダイアログ ボックスが EndDialog
作成されるたびに、 関数を使用して処理を完了する必要があります。
OnInitDialog でも、いつでも を呼び出EndDialog
すことができます。その場合は、ダイアログ ボックスが表示される前、または入力フォーカスが設定される前にダイアログ ボックスを閉じる必要があります。
EndDialog
はダイアログ ボックスをすぐに閉じません。 代わりに、現在のメッセージ ハンドラーが返されるとすぐにダイアログ ボックスを閉じるように指示するフラグを設定します。
例
void CMyDialog::OnMenuShowSimpleModal()
{
CSimpleDlg myDlg;
INT_PTR nRet = myDlg.DoModal();
if (nRet == IDOK || nRet == 5)
{
AfxMessageBox(_T("Dialog closed successfully"));
}
}
void CSimpleDlg::OnRButtonUp(UINT nFlags, CPoint point)
{
UNREFERENCED_PARAMETER(nFlags);
// Do something
int nRet = point.x; // Just any value would do!
EndDialog(nRet); // This value is returned by DoModal!
// Do something
return; // Dialog closed and DoModal returns only here!
}
CDialog::GetDefID
メンバー関数を GetDefID
呼び出して、ダイアログ ボックスの既定のプッシュ ボタン コントロールの ID を取得します。
DWORD GetDefID() const;
戻り値
32 ビット値 ( DWORD
)。 既定の押しボタンに ID 値がある場合、上位ワードにはDC_HASDEFIDが含まれており、下位ワードには ID 値が含まれます。 既定の押ボタンに ID 値がない場合、戻り値は 0 です。
解説
これは通常、[OK] ボタンです。
CDialog::GotoDlgCtrl
ダイアログ ボックスで指定したコントロールにフォーカスを移動します。
void GotoDlgCtrl(CWnd* pWndCtrl);
パラメーター
pWndCtrl
フォーカスを受け取るウィンドウ (コントロール) を識別します。
解説
pWndCtrl として渡すコントロール (子ウィンドウ) へのポインターを取得するには、CWnd オブジェクトへのポインターを返すメンバー関数を呼び出CWnd::GetDlgItem
します。
例
CWnd::GetDlgItem の例を参照してください。
CDialog::InitModalIndirect
メモリ内に構築するダイアログ ボックス テンプレートを使用してモーダル ダイアログ オブジェクトを初期化するには、このメンバー関数を呼び出します。
BOOL InitModalIndirect(
LPCDLGTEMPLATE lpDialogTemplate,
CWnd* pParentWnd = NULL,
void* lpDialogInit = NULL);
BOOL InitModalIndirect(
HGLOBAL hDialogTemplate,
CWnd* pParentWnd = NULL);
パラメーター
lpDialogTemplate
ダイアログ ボックスの作成に使用されるダイアログ ボックス テンプレートを含むメモリを指します。 このテンプレートは、Windows SDK で説明されているように、 DLGTEMPLATE 構造体と制御情報の形式です。
hDialogTemplate
ダイアログ ボックス テンプレートを含むグローバル メモリへのハンドルが含まれます。 このテンプレートは、ダイアログ ボックスの各コントロールの DLGTEMPLATE
構造とデータの形式です。
pParentWnd
ダイアログ オブジェクトが属する親ウィンドウ オブジェクトまたは所有者ウィンドウ オブジェクト ( CWnd 型) を指します。 NULL の場合、ダイアログ オブジェクトの親ウィンドウは メイン アプリケーション ウィンドウに設定されます。
lpDialogInit
DLGINIT リソースを指します。
戻り値
ダイアログ オブジェクトが正常に作成および初期化された場合は 0 以外。それ以外の場合は 0。
解説
モーダル ダイアログ ボックスを間接的に作成するには、まずメモリのグローバル ブロックを割り当てて、ダイアログ ボックス テンプレートで入力します。 次に、空 CDialog
のコンストラクターを呼び出して、ダイアログ ボックス オブジェクトを構築します。 次に、 を呼び出 InitModalIndirect
して、メモリ内ダイアログ ボックス テンプレートへのハンドルを格納します。 Windows ダイアログ ボックスが作成され、 後で DoModal メンバー関数が呼び出されたときに表示されます。
ActiveX コントロールを含むダイアログ ボックスには、DLGINIT リソースで提供される追加情報が必要です。
CDialog::MapDialogRect
を呼び出して、四角形のダイアログ ボックスの単位を画面の単位に変換します。
void MapDialogRect(LPRECT lpRect) const;
パラメーター
lpRect
変換するダイアログ ボックス座標を含む RECT 構造体または CRect オブジェクトを指します。
解説
ダイアログ ボックスの単位は、ダイアログ ボックス テキストに使用されるフォントの文字の平均幅と高さから派生した、現在のダイアログ ボックスの基本単位に関して記述されます。 1 つの水平方向の単位は、ダイアログ ボックスの基本幅の単位の 4 分の 1、1 つの垂直単位は、ダイアログ ボックスの基本高さの単位の 8 分の 1 です。
Windows 関数は GetDialogBaseUnits
システム フォントのサイズ情報を返しますが、リソース定義ファイルで DS_SETFONT スタイルを使用する場合は、ダイアログ ボックスごとに異なるフォントを指定できます。 Windows 関数は MapDialogRect
、このダイアログ ボックスに適したフォントを使用します。
メンバー関数は MapDialogRect
、 lpRect のダイアログ ボックス単位を画面単位 (ピクセル) に置き換えて、四角形を使用してダイアログ ボックスを作成したり、ボックス内にコントロールを配置したりできるようにします。
CDialog::NextDlgCtrl
ダイアログ ボックスの次のコントロールにフォーカスを移動します。
void NextDlgCtrl() const;
解説
フォーカスがダイアログ ボックスの最後のコントロールにある場合は、最初のコントロールに移動します。
CDialog::OnCancel
フレームワークは、ユーザーが [キャンセル ] をクリックするか、モーダルまたはモードレス ダイアログ ボックスで ESC キーを押すと、このメソッドを呼び出します。
virtual void OnCancel();
解説
ユーザーが [ キャンセル ] をクリックするか ESC キーを押してダイアログ ボックスを閉じるときにアクション (古いデータの復元など) を実行するには、このメソッドをオーバーライドします。 既定では、 EndDialog を呼び出し、 DoModal から IDCANCEL が返され、モーダル ダイアログ ボックスが閉じます。
モードレス ダイアログ ボックスで [キャンセル ] ボタンを実装する場合は、 メソッドを OnCancel
オーバーライドし、その中で DestroyWindow を 呼び出す必要があります。 を呼び出すので、基底クラスのメソッドを呼び出 EndDialog
さないでください。これにより、ダイアログ ボックスは非表示になりますが、破棄されません。
注意
Windows XP でコンパイルされたプログラムで オブジェクトを CFileDialog
使用する場合、このメソッドをオーバーライドすることはできません。 の詳細 CFileDialog
については、「 CFileDialog クラス」を参照してください。
例
void CSimpleDlg::OnCancel()
{
// TODO: Add extra cleanup here
// Ensure that you reset all the values back to the
// ones before modification. This handler is called
// when the user doesn't want to save the changes.
if (AfxMessageBox(_T("Are you sure you want to abort the changes?"),
MB_YESNO) == IDNO)
{
// Give the user a chance if he has unknowingly hit the
// Cancel button. If he says No, return. Don't reset. If
// Yes, go ahead and reset the values and close the dialog.
return;
}
m_nMyValue = m_nPrevValue;
m_pMyString = NULL;
CDialog::OnCancel();
}
CDialog::OnInitDialog
このメソッドは、メッセージに応答して WM_INITDIALOG
呼び出されます。
virtual BOOL OnInitDialog();
戻り値
アプリケーションがダイアログ ボックスのコントロールのいずれかに入力フォーカスを設定するかどうかを指定します。 が 0 以外の値を返す場合 OnInitDialog
、Windows は入力フォーカスをダイアログ ボックスの最初のコントロールである既定の場所に設定します。 アプリケーションで 0 を返すことができるのは、入力フォーカスがダイアログ ボックスのいずれかのコントロールに明示的に設定されている場合のみです。
解説
Windows は、ダイアログ ボックスが表示される直前に発生する Create、CreateIndirect、または DoModal 呼び出し中に、ダイアログ ボックスにメッセージを送信WM_INITDIALOG
します。
ダイアログ ボックスの初期化時に特別な処理を実行する場合は、このメソッドをオーバーライドします。 オーバーライドされたバージョンでは、最初に基底クラス OnInitDialog
を呼び出しますが、その戻り値は無視します。 通常は、オーバーライドされたメソッドからを返します TRUE
。
Windows は、 OnInitDialog
すべての Microsoft Foundation クラス ライブラリ ダイアログ ボックスに共通する標準のグローバル ダイアログ ボックス プロシージャを使用して関数を呼び出します。 この関数はメッセージ マップを介して呼び出されないため、このメソッドのメッセージ マップ エントリは必要ありません。
注意
Windows Vista 以降のオペレーティング システムでコンパイルされたプログラムで オブジェクトを使用 CFileDialog
する場合、このメソッドをオーバーライドすることはできません。 Windows Vista 以降での への CFileDialog
変更の詳細については、「 CFileDialog クラス」を参照してください。
例
BOOL CSimpleDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_cMyEdit.SetWindowText(_T("My Name")); // Initialize control values
m_cMyList.ShowWindow(SW_HIDE); // Show or hide a control, etc.
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
CDialog::OnOK
ユーザーが [OK] ボタン (IDOK のボタン) をクリックしたときに呼び出されます。
virtual void OnOK();
解説
[OK] ボタンがアクティブになったときにアクションを実行するには、このメソッドをオーバーライドします。 ダイアログ ボックスにデータの自動検証と交換が含まれている場合、このメソッドの既定の実装では、ダイアログ ボックスのデータが検証され、アプリケーション内の適切な変数が更新されます。
モードレス ダイアログ ボックスで [OK] ボタンを実装する場合は、 メソッドを OnOK
オーバーライドし、その中で DestroyWindow を呼び出す必要があります。 EndDialog を呼び出してダイアログ ボックスを非表示にするが破棄しないため、基底クラスのメソッドを呼び出さないでください。
注意
Windows XP でコンパイルされたプログラムで オブジェクトを CFileDialog
使用する場合、このメソッドをオーバーライドすることはできません。 の詳細 CFileDialog
については、「 CFileDialog クラス」を参照してください。
例
void CSimpleDlg::OnOK()
{
// TODO: Add extra validation here
// Ensure that your UI got the necessary input
// from the user before closing the dialog. The
// default OnOK will close this.
if (m_nMyValue == 0) // Is a particular field still empty?
{
// Inform the user that he can't close the dialog without
// entering the necessary values and don't close the
// dialog.
AfxMessageBox(_T("Please enter a value for MyValue"));
return;
}
CDialog::OnOK(); // This will close the dialog and DoModal will return.
}
CDialog::OnSetFont
テキストの描画時にダイアログ ボックス コントロールが使用するフォントを指定します。
Virtual void OnSetFont(CFont* pFont);
パラメーター
pFont
[入力]このダイアログ ボックスのすべてのコントロールの既定のフォントとして使用されるフォントへのポインターを指定します。
解説
ダイアログ ボックスでは、指定したフォントがすべてのコントロールの既定値として使用されます。
ダイアログ エディターは、通常、ダイアログ ボックス テンプレート リソースの一部としてダイアログ ボックスフォントを設定します。
注意
Windows Vista 以降のオペレーティング システムでコンパイルされたプログラムで オブジェクトを使用 CFileDialog
する場合、このメソッドをオーバーライドすることはできません。 Windows Vista 以降での への CFileDialog
変更の詳細については、「 CFileDialog クラス」を参照してください。
CDialog::PrevDlgCtrl
ダイアログ ボックスの前のコントロールにフォーカスを設定します。
void PrevDlgCtrl() const;
解説
フォーカスがダイアログ ボックスの最初のコントロールにある場合は、ボックスの最後のコントロールに移動します。
CDialog::SetDefID
ダイアログ ボックスの既定の押しボタン コントロールを変更します。
void SetDefID(UINT nID);
パラメーター
nID
既定になる押しボタン コントロールの ID を指定します。
CDialog::SetHelpID
ダイアログ ボックスの状況依存ヘルプ ID を設定します。
void SetHelpID(UINT nIDR);
パラメーター
nIDR
状況依存のヘルプ ID を指定します。