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
オブジェクトは、ダイアログ テンプレートと -derived クラスのCDialog
組み合わせです。 ダイアログ エディターを使用してダイアログ テンプレートを作成し、それをリソースに格納した後、クラスの追加ウィザードを使用して派生 CDialog
クラスを作成します。
ダイアログ ボックスは、他のウィンドウと同様に、Windows からメッセージを受信します。 ダイアログ ボックスでは、ユーザーがダイアログ ボックスを操作する方法であるため、ダイアログ ボックスのコントロールからの通知メッセージを処理することに特に関心があります。 クラス ウィザードを使用して、処理するメッセージを選択すると、適切なメッセージ マップ エントリとメッセージ ハンドラー メンバー関数がクラスに追加されます。 ハンドラー メンバー関数にアプリケーション固有のコードを記述するだけで済みます。
必要に応じて、メッセージ マップ エントリとメンバー関数をいつでも手動で記述できます。
最も単純なダイアログ ボックス以外では、メンバー変数を派生ダイアログ クラスに追加して、ユーザーがダイアログ ボックスのコントロールに入力したデータを格納したり、ユーザーのデータを表示したりします。 変数の追加ウィザードを使用して、メンバー変数を作成し、それらをコントロールに関連付けることができます。 同時に、変数の型と、各変数の値の許容範囲を選択します。 コード ウィザードは、派生ダイアログ クラスにメンバー変数を追加します。
メンバー変数とダイアログ ボックスのコントロール間のデータ交換を自動的に処理するために、データ マップが生成されます。 データ マップには、ダイアログ ボックス内のコントロールを適切な値で初期化し、データを取得し、データを検証する関数が用意されています。
モーダル ダイアログ ボックスを作成するには、派生ダイアログ クラスのコンストラクターを使用してスタック上にオブジェクトを構築し、呼び出 DoModal
してダイアログ ウィンドウとそのコントロールを作成します。 モードレス ダイアログを作成する場合は、ダイアログ クラスのコンストラクターを呼び出 Create
します。
Windows SDK の説明に従って DLGTEMPLATE データ構造を使用して、メモリ内にテンプレートを作成することもできます。 オブジェクトをCDialog
作成したら、CreateIndirect を呼び出してモードレス ダイアログ ボックスを作成するか、InitModalIndirect と DoModal を呼び出してモーダル ダイアログ ボックスを作成します。
交換と検証のデータ マップは、新しいダイアログ クラスに追加されたオーバーライド CWnd::DoDataExchange
で書き込まれます。 Exchange と検証の 機能の詳細については、DoDataExchange メンバー関数 CWnd
を参照してください。
プログラマとフレームワークの両方が、CWnd::UpdateData の呼び出しを通じて間接的に呼びDoDataExchange
出されます。
フレームワークは、ユーザーが [OK] ボタンをクリックしてモーダル ダイアログ ボックスを閉じるときに呼び出 UpdateData
します。 ([キャンセル] ボタンがクリックされた場合、データは取得されません)。OnInitDialog の既定の実装では、コントロールの初期値を設定する呼び出しUpdateData
もあります。 通常は、コントロールをさらに初期化するためにオーバーライド OnInitDialog
します。 OnInitDialog
は、すべてのダイアログ コントロールが作成された後、およびダイアログ ボックスが表示される直前に呼び出されます。
モーダル ダイアログ ボックスまたはモードレス ダイアログ ボックスの実行中はいつでも呼び出 CWnd::UpdateData
すことができます。
ダイアログ ボックスを手動で開発する場合は、派生ダイアログ ボックス クラスに必要なメンバー変数を自分で追加し、これらの値を設定または取得するためのメンバー関数を追加します。
モーダル ダイアログ ボックスは、ユーザーが [OK] ボタンまたは [キャンセル] ボタンを押したとき、またはコードがメンバー関数を呼び出すと、自動的に EndDialog
閉じます。
モードレス ダイアログ ボックスを実装する場合は、常にメンバー関数を OnCancel
オーバーライドし、その中から呼び出 DestroyWindow
します。 基底クラスCDialog::OnCancel
EndDialog
を呼び出さないでください。これは、ダイアログ ボックスを非表示にしますが破棄しないためです。 また、モードレス ダイアログ ボックスを削除this
するには、モードレス ダイアログ ボックスのオーバーライドPostNcDestroy
も行う必要があります。モードレス ダイアログ ボックスは、通常は 〘 で割り当てられるnew
ためです。 モーダル ダイアログ ボックスは通常、フレーム上に構築され、クリーンアップは必要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::D oModal
このメンバー関数を呼び出してモーダル ダイアログ ボックスを呼び出し、完了したらダイアログ ボックスの結果を返します。
virtual INT_PTR DoModal();
戻り値
int
ダイアログ ボックスを閉じるのに使用される CDialog::EndDialog メンバー関数に渡された nResult パラメーターの値を指定する値。 戻り値は、関数がダイアログ ボックスを作成できなかった場合は -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
作成されるたびに処理を完了するには、この関数を使用する必要があります。
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
を行います。 DoModal メンバー関数が呼び出されると、Windows ダイアログ ボックスが作成され、後で表示されます。
ActiveX コントロールを含むダイアログ ボックスには、DLGINIT リソースで提供される追加情報が必要です。
CDialog::MapDialogRect
四角形のダイアログ ボックスの単位を画面単位に変換する呼び出し。
void MapDialogRect(LPRECT lpRect) const;
パラメーター
lpRect
変換するダイアログ ボックス座標を 含む RECT 構造体または CRect オブジェクトを指します。
解説
ダイアログ ボックスの単位は、ダイアログ ボックス テキストに使用されるフォント内の文字の平均幅と高さから派生した現在のダイアログ ボックスの基本単位に関して記述されます。 1 つの水平単位はダイアログ ボックスの基本幅単位の 4 分の 1、垂直単位はダイアログ ボックスの基本高さの単位の 8 分の 1 です。
Windows 関数はGetDialogBaseUnits
システム フォントのサイズ情報を返しますが、リソース定義ファイルで DS_Standard Edition TFONT スタイルを使用する場合は、ダイアログ ボックスごとに異なるフォントを指定できます。 Windows 関数は MapDialogRect
、このダイアログ ボックスに適したフォントを使用します。
このメンバー関数はMapDialogRect
、lpRect のダイアログ ボックスの単位を画面単位 (ピクセル) に置き換え、四角形を使用してダイアログ ボックスを作成したり、ボックス内にコントロールを配置したりできるようにします。
CDialog::NextDlgCtrl
ダイアログ ボックスの次のコントロールにフォーカスを移動します。
void NextDlgCtrl() const;
解説
フォーカスがダイアログ ボックスの最後のコントロールにある場合は、最初のコントロールに移動します。
CDialog::OnCancel
フレームワークは、ユーザーが [キャンセル] をクリックするか、モーダルダイアログ ボックスまたはモードレス ダイアログ ボックスで ESC キーを押したときに、このメソッドを呼び出します。
virtual void OnCancel();
解説
ユーザーが [キャンセル] をクリックするか ESC キーを押してダイアログ ボックスを閉じたときにアクション (古いデータの復元など) を実行するには、このメソッドをオーバーライドします。 既定では、EndDialog を呼び出して DoModal から IDCANCEL が返されるため、モーダル ダイアログ ボックスが閉じます。
モードレス ダイアログ ボックスで [キャンセル] ボタンを実装する場合は、メソッドを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();
戻り値
アプリケーションが入力フォーカスをダイアログ ボックスのコントロールのいずれかに設定するかどうかを指定します。 0 以外の値を返す場合 OnInitDialog
、Windows は入力フォーカスを既定の場所 (ダイアログ ボックスの最初のコントロール) に設定します。 アプリケーションは、ダイアログ ボックスのコントロールのいずれかに入力フォーカスを明示的に設定した場合にのみ、0 を返すことができます。
解説
Windows は、作成、CreateIndirect、または DoModal 呼び出し中にダイアログ ボックスにメッセージを送信WM_INITDIALOG
します。この呼び出しは、ダイアログ ボックスが表示される直前に発生します。
ダイアログ ボックスの初期化時に特別な処理を実行する場合は、このメソッドをオーバーライドします。 オーバーライドされたバージョンでは、最初に基底クラス OnInitDialog
を呼び出しますが、その戻り値は無視します。 通常、オーバーライドされたメソッドから戻ります TRUE
。
Windows は、 OnInitDialog
すべての Microsoft Foundation クラス ライブラリ ダイアログ ボックスに共通する標準のグローバル ダイアログ ボックス プロシージャを使用して関数を呼び出します。 この関数はメッセージ マップを介して呼び出されないため、このメソッドのメッセージ マップ エントリは必要ありません。
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 を指定します。
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示