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 メンバー関数を参照してください。
プログラマとフレームワークの両方の呼び出しDoDataExchange
CWnd::UpdateData への呼び出しによって間接的に行われます。
フレームワークは、ユーザーが [OK] ボタンをクリックしてモーダル ダイアログ ボックスを閉じるときに、 UpdateData
を呼び出します。 ([キャンセル] ボタンがクリックされた場合、データは取得されません)。 OnInitDialog の既定の実装では、コントロールの初期値を設定する UpdateData
も呼び出します。 通常、 OnInitDialog
をオーバーライドして、コントロールをさらに初期化します。 OnInitDialog
は、すべてのダイアログ コントロールが作成された後、およびダイアログ ボックスが表示される直前に呼び出されます。
モーダル ダイアログ ボックスまたはモードレス ダイアログ ボックスの実行中は、いつでも CWnd::UpdateData
を呼び出すことができます。
ダイアログ ボックスを手動で開発する場合は、派生ダイアログ ボックス クラスに必要なメンバー変数を自分で追加し、これらの値を設定または取得するためのメンバー関数を追加します。
モーダル ダイアログ ボックスは、ユーザーが [OK] ボタンまたは [キャンセル] ボタンを押したとき、またはコードが EndDialog
メンバー関数を呼び出したときに自動的に閉じます。
モードレス ダイアログ ボックスを実装するときは、常に OnCancel
メンバー関数をオーバーライドし、その中から DestroyWindow
を呼び出します。 基底クラス CDialog::OnCancel
を呼び出さないでください。 EndDialog
が呼び出されるため、ダイアログ ボックスは非表示になりますが、破棄されません。 モードレス ダイアログ ボックスは通常new
で割り当てられるため、this
を削除するには、モードレス ダイアログ ボックスのPostNcDestroy
をオーバーライドする必要もあります。 モーダル ダイアログ ボックスは通常、フレーム上に構築され、クリーンアップ PostNcDestroy
必要はありません。
CDialog
の詳細については、「Dialog ボックス」を参照してください。
継承階層
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
の呼び出しをコンストラクター内に配置するか、コンストラクターの呼び出し後に呼び出すことができます。
Create
メンバー関数の 2 つの形式は、テンプレート名またはテンプレート ID 番号 (IDD_DIALOG1 など) によってダイアログ ボックス テンプレート リソースにアクセスするために提供されます。
どちらのフォームでも、親ウィンドウ オブジェクトへのポインターを渡します。 pParentWnd が NULL の場合、ダイアログ ボックスは親ウィンドウまたは所有者ウィンドウをメイン アプリケーション ウィンドウに設定して作成されます。
Create
メンバー関数は、ダイアログ ボックスを作成した直後に戻ります。
親ウィンドウの作成時にダイアログ ボックスが表示される場合は、ダイアログ ボックス テンプレートのWS_VISIBLE スタイルを使用します。 それ以外の場合は、 ShowWindow
を呼び出す必要があります。 ダイアログ ボックスのスタイルとそのアプリケーションについては、「MFC リファレンスの Windows SDK および Window Styles の 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::D oModal
このメンバー関数を呼び出してモーダル ダイアログ ボックスを呼び出し、完了したらダイアログ ボックスの結果を返します。
virtual INT_PTR DoModal();
戻り値
ダイアログ ボックスを閉じるのに使用される、CDialog::EndDialog メンバー関数に渡された nResult パラメーターの値を指定するint
値。 戻り値は、関数がダイアログ ボックスを作成できなかった場合は -1、他のエラーが発生した場合は IDABORT です。その場合、出力ウィンドウには GetLastError からのエラー情報が含まれます。
解説
このメンバー関数は、ダイアログ ボックスがアクティブな間にユーザーとのすべての対話を処理します。 それによりダイアログ ボックスがモーダルになります。つまり、ダイアログ ボックスが閉じられるまでユーザーは他のウィンドウとやりとりできません。
[OK] や [キャンセル] など、ダイアログ ボックスのいずれかのプッシュ ボタンをクリックすると、ダイアログ ボックスを閉じようとするために、 OnOK や OnCancel などのメッセージ ハンドラー メンバー関数が呼び出されます。 既定の OnOK
メンバー関数は、ダイアログ ボックス データの検証と更新を行い、結果 IDOK でダイアログ ボックスを閉じます。既定の OnCancel
メンバー関数は、ダイアログ ボックス のデータを検証または更新せずに、結果 IDCANCEL でダイアログ ボックスを閉じます。 これらのメッセージ ハンドラー関数をオーバーライドして、動作を変更できます。
Note
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
関数を使用する必要があります。
EndDialog
は、OnInitDialog でもいつでも呼び出すことができます。その場合は、ダイアログ ボックスが表示される前または入力フォーカスが設定される前にダイアログ ボックスを閉じる必要があります。
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::GetDlgItem
メンバー関数を呼び出します。この関数は、CWnd オブジェクトへのポインターを返します。
例
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
を呼び出して、メモリ内のダイアログ ボックス テンプレートにハンドルを格納します。 DoModal メンバー関数が呼び出されると、Windows ダイアログ ボックスが作成され、後で表示されます。
ActiveX コントロールを含むダイアログ ボックスには、DLGINIT リソースで提供される追加情報が必要です。
CDialog::MapDialogRect
四角形のダイアログ ボックスの単位を画面単位に変換する呼び出し。
void MapDialogRect(LPRECT lpRect) const;
パラメーター
lpRect
変換するダイアログ ボックス座標を含む RECT 構造体または CRect オブジェクトを指します。
解説
ダイアログ ボックスの単位は、ダイアログ ボックス テキストに使用されるフォント内の文字の平均幅と高さから派生した現在のダイアログ ボックスの基本単位に関して記述されます。 1 つの水平単位はダイアログ ボックスの基本幅単位の 4 分の 1、垂直単位はダイアログ ボックスの基本高さの単位の 8 分の 1 です。
GetDialogBaseUnits
Windows 関数はシステム フォントのサイズ情報を返しますが、リソース定義ファイルで DS_SETFONT スタイルを使用する場合は、ダイアログ ボックスごとに異なるフォントを指定できます。 MapDialogRect
Windows 関数は、このダイアログ ボックスに適したフォントを使用します。
MapDialogRect
メンバー関数は、ダイアログ ボックスの作成やボックス内のコントロールの配置に四角形を使用できるように、lpRect のダイアログ ボックスの単位を画面単位 (ピクセル) に置き換えます。
CDialog::NextDlgCtrl
ダイアログ ボックスの次のコントロールにフォーカスを移動します。
void NextDlgCtrl() const;
解説
フォーカスがダイアログ ボックスの最後のコントロールにある場合は、最初のコントロールに移動します。
CDialog::OnCancel
フレームワークは、ユーザーが Cancel をクリックするか、モーダルまたはモードレス ダイアログ ボックスで ESC キーを押したときに、このメソッドを呼び出します。
virtual void OnCancel();
解説
ユーザーがダイアログ ボックスを閉じるときに、 Cancel または ESC キーを押して、このメソッドをオーバーライドしてアクション (古いデータの復元など) を実行します。 既定では、 EndDialog を呼び出し、 DoModal が IDCANCEL を返すことでモーダル ダイアログ ボックスを閉じます。
モードレス ダイアログ ボックスで Cancel ボタンを実装する場合は、 OnCancel
メソッドをオーバーライドし、その中で DestroyWindow を呼び出す必要があります。 基底クラスのメソッドを呼び出さないでください。 EndDialog
呼び出されるため、ダイアログ ボックスは非表示になりますが、破棄されません。
Note
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();
戻り値
アプリケーションが入力フォーカスをダイアログ ボックスのコントロールのいずれかに設定するかどうかを指定します。 OnInitDialog
0 以外の値が返された場合、Windows は入力フォーカスをダイアログ ボックスの最初のコントロールである既定の場所に設定します。 アプリケーションは、ダイアログ ボックスのコントロールのいずれかに入力フォーカスを明示的に設定した場合にのみ、0 を返すことができます。
解説
Windows は、ダイアログ ボックスが表示される直前に発生する、Create、CreateIndirect、または DoModal 呼び出し中に、WM_INITDIALOG
メッセージをダイアログ ボックスに送信します。
ダイアログ ボックスの初期化時に特別な処理を実行する場合は、このメソッドをオーバーライドします。 オーバーライドされたバージョンでは、最初に基底クラス OnInitDialog
を呼び出しますが、その戻り値は無視します。 通常、オーバーライドされたメソッドから TRUE
を返します。
Windows では、すべての Microsoft Foundation クラス ライブラリ ダイアログ ボックスに共通する標準のグローバル ダイアログ ボックス プロシージャを使用して、 OnInitDialog
関数を呼び出します。 この関数はメッセージ マップを介して呼び出されないため、このメソッドのメッセージ マップ エントリは必要ありません。
Note
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 を呼び出すと、ダイアログ ボックスは非表示になりますが、破棄されません。
Note
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
[in]このダイアログ ボックスのすべてのコントロールの既定のフォントとして使用されるフォントへのポインターを指定します。
解説
ダイアログ ボックスでは、指定したフォントがすべてのコントロールの既定値として使用されます。
ダイアログ エディターは、通常、ダイアログ ボックス テンプレート リソースの一部としてダイアログ ボックスのフォントを設定します。
Note
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 を指定します。