CDialog クラスCDialog Class

画面上にダイアログボックスを表示するために使用される基本クラスです。The base class used for displaying dialog boxes on the screen.

構文Syntax

class CDialog : public CWnd

メンバーMembers

パブリック コンストラクターPublic Constructors

名前Name 説明Description
CDialog:: CDialogCDialog::CDialog CDialog オブジェクトを構築します。Constructs a CDialog object.

パブリック メソッドPublic Methods

名前Name 説明Description
CDialog:: CreateCDialog::Create CDialog オブジェクトを初期化します。Initializes the CDialog object. モードレスダイアログボックスを作成し、オブジェクトにアタッチし CDialog ます。Creates a modeless dialog box and attaches it to the CDialog object.
CDialog:: CreateIndirectCDialog::CreateIndirect メモリ内のダイアログボックステンプレートからモードレスダイアログボックスを作成します (リソースベースではありません)。Creates a modeless dialog box from a dialog-box template in memory (not resource-based).
CDialog::D oModalCDialog::DoModal モーダルダイアログボックスを呼び出し、完了した場合はを返します。Calls a modal dialog box and returns when done.
CDialog:: EndDialogCDialog::EndDialog モーダルダイアログボックスを閉じます。Closes a modal dialog box.
CDialog:: GetDefIDCDialog::GetDefID ダイアログボックスの既定のプッシュボタンコントロールの ID を取得します。Gets the ID of the default pushbutton control for a dialog box.
CDialog::GotoDlgCtrlCDialog::GotoDlgCtrl ダイアログボックス内の指定されたダイアログボックスコントロールにフォーカスを移動します。Moves the focus to a specified dialog-box control in the dialog box.
CDialog:: InitModalIndirectCDialog::InitModalIndirect リソースベースではなく、メモリ内のダイアログボックステンプレートからモーダルダイアログボックスを作成します。Creates a modal dialog box from a dialog-box template in memory (not resource-based). パラメーターは、関数が呼び出されるまで格納され DoModal ます。The parameters are stored until the function DoModal is called.
CDialog::MapDialogRectCDialog::MapDialogRect 四角形のダイアログボックス単位を画面単位に変換します。Converts the dialog-box units of a rectangle to screen units.
CDialog:: NextDlgCtrlCDialog::NextDlgCtrl ダイアログボックスの次のダイアログボックスコントロールにフォーカスを移動します。Moves the focus to the next dialog-box control in the dialog box.
CDialog::OnInitDialogCDialog::OnInitDialog ダイアログボックスの初期化を強化するためにオーバーライドします。Override to augment dialog-box initialization.
CDialog:: OnSetFontCDialog::OnSetFont テキストを描画するときにダイアログボックスコントロールが使用するフォントを指定するためにオーバーライドします。Override to specify the font that a dialog-box control is to use when it draws text.
CDialog::PrevDlgCtrlCDialog::PrevDlgCtrl ダイアログボックスの前のダイアログボックスコントロールにフォーカスを移動します。Moves the focus to the previous dialog-box control in the dialog box.
CDialog:: SetDefIDCDialog::SetDefID ダイアログボックスの既定のプッシュボタンコントロールを、指定したプッシュボタンに変更します。Changes the default pushbutton control for a dialog box to a specified pushbutton.
CDialog:: Sei PidCDialog::SetHelpID ダイアログボックスの状況依存のヘルプ ID を設定します。Sets a context-sensitive help ID for the dialog box.

プロテクト メソッドProtected Methods

名前Name 説明Description
CDialog:: OnCancelCDialog::OnCancel [キャンセル] ボタンまたは ESC キー操作を実行するには、をオーバーライドします。Override to perform the Cancel button or ESC key action. 既定では、ダイアログボックスが閉じて、 DoModal IDCANCEL が返されます。The default closes the dialog box and DoModal returns IDCANCEL.
CDialog::OnOKCDialog::OnOK をオーバーライドして、モーダルダイアログボックスで [OK] ボタンの操作を実行します。Override to perform the OK button action in a modal dialog box. 既定では、ダイアログボックスが閉じて、 DoModal IDOK が返されます。The default closes the dialog box and DoModal returns IDOK.

解説Remarks

ダイアログボックスには、モーダルとモードレスの2種類があります。Dialog boxes are of two types: modal and modeless. モーダルダイアログボックスは、アプリケーションを続行する前に、ユーザーが閉じる必要があります。A modal dialog box must be closed by the user before the application continues. モードレスダイアログボックスを使用すると、ダイアログボックスを表示したり、ダイアログボックスをキャンセルしたり削除したりせずに、別のタスクに戻ることができます。A modeless dialog box allows the user to display the dialog box and return to another task without canceling or removing the dialog box.

CDialogオブジェクトは、ダイアログテンプレートとの派生クラスを組み合わせたものです CDialogA CDialog object is a combination of a dialog template and a CDialog-derived class. ダイアログエディターを使用してダイアログテンプレートを作成し、リソースに格納します。次に、クラスの追加ウィザードを使用して、から派生したクラスを作成し CDialog ます。Use the dialog editor to create the dialog template and store it in a resource, then use the Add Class wizard to create a class derived from CDialog.

ダイアログボックスは、他のウィンドウと同様に、Windows からメッセージを受信します。A dialog box, like any other window, receives messages from Windows. ダイアログボックスでは、ダイアログボックスのコントロールからの通知メッセージを処理することに特に興味があります。これは、ユーザーがダイアログボックスと対話する方法であるためです。In a dialog box, you are particularly interested in handling notification messages from the dialog box's controls since that is how the user interacts with your dialog box. クラスウィザードを使用して、処理するメッセージを選択し、適切なメッセージマップエントリとメッセージハンドラーメンバー関数をクラスに追加します。Use the Class Wizard to select which messages you wish to handle and it will add the appropriate message-map entries and message-handler member functions to the class for you. ハンドラーメンバー関数には、アプリケーション固有のコードを記述する必要があります。You only need to write application-specific code in the handler member functions.

必要に応じて、メッセージマップエントリとメンバー関数をいつでも手動で書き込むことができます。If you prefer, you can always write message-map entries and member functions manually.

最も単純なダイアログボックス以外では、ユーザーがダイアログボックスのコントロールに入力したデータを格納したり、ユーザーのデータを表示したりするために、派生したダイアログクラスにメンバー変数を追加します。In all but the most trivial dialog box, you add member variables to your derived dialog class to store data entered in the dialog box's controls by the user or to display data for the user. 変数の追加ウィザードを使用すると、メンバー変数を作成し、コントロールに関連付けることができます。You can use the Add Variable wizard to create member variables and associate them with controls. 同時に、変数の型と、各変数に許容される値の範囲を選択します。At the same time, you choose a variable type and permissible range of values for each variable. コードウィザードでは、メンバー変数が派生ダイアログクラスに追加されます。The code wizard adds the member variables to your derived dialog class.

データマップは、メンバー変数とダイアログボックスのコントロールとの間のデータ交換を自動的に処理するために生成されます。A data map is generated to automatically handle the exchange of data between the member variables and the dialog box's controls. データマップには、ダイアログボックス内のコントロールを適切な値で初期化し、データを取得して、データを検証する関数が用意されています。The data map provides functions that initialize the controls in the dialog box with the proper values, retrieve the data, and validate the data.

モーダルダイアログボックスを作成するには、派生ダイアログクラスのコンストラクターを使用してスタック上にオブジェクトを構築し、を呼び出して DoModal ダイアログウィンドウとそのコントロールを作成します。To create a modal dialog box, construct an object on the stack using the constructor for your derived dialog class and then call DoModal to create the dialog window and its controls. モードレスダイアログを作成する場合は、 Create ダイアログクラスのコンストラクターでを呼び出します。If you wish to create a modeless dialog, call Create in the constructor of your dialog class.

Windows SDK で説明されているように、 dlgtemplateデータ構造を使用して、メモリ内にテンプレートを作成することもできます。You can also create a template in memory by using a DLGTEMPLATE data structure as described in the Windows SDK. オブジェクトを構築した後 CDialogcreateindirectを呼び出してモードレスダイアログボックスを作成するか、 InitModalIndirectおよびDoModalを呼び出してモーダルダイアログボックスを作成します。After you construct a CDialog object, call CreateIndirect to create a modeless dialog box, or call InitModalIndirect and DoModal to create a modal dialog box.

Exchange および検証データマップは、 CWnd::DoDataExchange 新しいダイアログクラスに追加されるのオーバーライドで記述されます。The exchange and validation data map is written in an override of CWnd::DoDataExchange that is added to your new dialog class. 詳細については、「」の「 DoDataExchangeメンバー関数」を参照してください CWndSee the DoDataExchange member function in CWnd for more on the exchange and validation functionality.

プログラマとフレームワークは、どちらも DoDataExchange CWnd:: UpdateDataを呼び出すことによって間接的に呼び出します。Both the programmer and the framework call DoDataExchange indirectly through a call to CWnd::UpdateData.

フレームワークは、 UpdateData ユーザーが [OK] ボタンをクリックしてモーダルダイアログボックスを閉じると、を呼び出します。The framework calls UpdateData when the user clicks the OK button to close a modal dialog box. ([キャンセル] ボタンがクリックされると、データは取得されません)。OnInitDialogの既定の実装では、 UpdateData コントロールの初期値を設定するためにもを呼び出します。(The data is not retrieved if the Cancel button is clicked.) The default implementation of OnInitDialog also calls UpdateData to set the initial values of the controls. 通常は、 OnInitDialog コントロールをさらに初期化するためにをオーバーライドします。You typically override OnInitDialog to further initialize controls. OnInitDialogは、すべてのダイアログコントロールが作成された後、ダイアログボックスが表示される直前に呼び出されます。OnInitDialog is called after all the dialog controls are created and just before the dialog box is displayed.

CWnd::UpdateDataモーダルまたはモードレスのダイアログボックスの実行中に、いつでもを呼び出すことができます。You can call CWnd::UpdateData at any time during the execution of a modal or modeless dialog box.

ダイアログボックスを手動で開発する場合は、必要なメンバー変数を派生したダイアログボックスクラスに自分で追加し、これらの値を設定または取得するメンバー関数を追加します。If you develop a dialog box by hand, you add the necessary member variables to the derived dialog-box class yourself, and you add member functions to set or get these values.

モーダルダイアログボックスは、ユーザーが [OK] ボタンまたは [キャンセル] ボタンをクリックしたとき、またはコードがメンバー関数を呼び出したときに、自動的に閉じられ EndDialog ます。A modal dialog box closes automatically when the user presses the OK or Cancel buttons or when your code calls the EndDialog member function.

モードレスダイアログボックスを実装する場合は、常に OnCancel メンバー関数をオーバーライドし、 DestroyWindow その中からを呼び出します。When you implement a modeless dialog box, always override the OnCancel member function and call DestroyWindow from within it. 基底クラスはを呼び出さないでください。これにより CDialog::OnCancel EndDialog 、ダイアログボックスは非表示になりますが、破棄されません。Don't call the base class CDialog::OnCancel, because it calls EndDialog, which will make the dialog box invisible but will not destroy it. モードレスダイアログボックス PostNcDestroy this は通常、で割り当てられるので、モードレスダイアログボックスを削除するためにもオーバーライドする必要があり new ます。You should also override PostNcDestroy for modeless dialog boxes in order to delete this, since modeless dialog boxes are usually allocated with new. モーダルダイアログボックスは通常、フレーム上に構築され、クリーンアップは必要ありません PostNcDestroyModal dialog boxes are usually constructed on the frame and do not need PostNcDestroy cleanup.

の詳細につい CDialog ては、「ダイアログボックス」を参照してください。For more information on CDialog, see Dialog Boxes.

継承階層Inheritance Hierarchy

CObjectCObject

CCmdTargetCCmdTarget

CWndCWnd

CDialog

必要条件Requirements

ヘッダー: afxwin.hHeader: afxwin.h

CDialog:: CDialogCDialog::CDialog

リソースベースのモーダルダイアログボックスを構築するには、コンストラクターのパブリックフォームを呼び出します。To construct a resource-based modal dialog box, call either public form of the constructor.

explicit CDialog(
    LPCTSTR lpszTemplateName,
    CWnd* pParentWnd = NULL);

explicit CDialog(
    UINT nIDTemplate,
    CWnd* pParentWnd = NULL);

CDialog();

パラメーターParameters

lpszTemplateNamelpszTemplateName
ダイアログボックステンプレートリソースの名前である null で終わる文字列を格納します。Contains a null-terminated string that is the name of a dialog-box template resource.

nIDTemplatenIDTemplate
ダイアログボックステンプレートリソースの ID 番号を格納します。Contains the ID number of a dialog-box template resource.

pParentWndpParentWnd
ダイアログオブジェクトが属する親またはオーナーウィンドウオブジェクト ( CWnd型) を指します。Points to the parent or owner window object (of type CWnd) to which the dialog object belongs. NULL の場合は、ダイアログオブジェクトの親ウィンドウがメインアプリケーションウィンドウに設定されます。If it is NULL, the dialog object's parent window is set to the main application window.

解説Remarks

コンストラクターの1つの形式は、テンプレート名によってダイアログリソースへのアクセスを提供します。One form of the constructor provides access to the dialog resource by template name. もう1つのコンストラクターは、テンプレート ID 番号によってアクセスを提供します。通常は、 IDD_ のプレフィックス (IDD_DIALOG1 など) を使用します。The other constructor provides access by template ID number, usually with an IDD_ prefix (for example, IDD_DIALOG1).

メモリ内のテンプレートからモーダルダイアログボックスを構築するには、最初にパラメーターなしのプロテクトコンストラクターを呼び出し、次にを呼び出し InitModalIndirect ます。To construct a modal dialog box from a template in memory, first invoke the parameterless, protected constructor and then call InitModalIndirect.

上記のメソッドのいずれかを使用してモーダルダイアログボックスを構築した後、を呼び出し DoModal ます。After you construct a modal dialog box with one of the above methods, call DoModal.

モードレスダイアログボックスを構築するには、コンストラクターの protected 形式を使用し CDialog ます。To construct a modeless dialog box, use the protected form of the CDialog constructor. このコンストラクターは、モードレスダイアログボックスを実装するために独自のダイアログボックスクラスを派生させる必要があるため、保護されています。The constructor is protected because you must derive your own dialog-box class to implement a modeless dialog box. モードレスダイアログボックスの構築は、2段階のプロセスです。Construction of a modeless dialog box is a two-step process. 最初にコンストラクターを呼び出します。次に、メンバー関数を呼び出して、 Create リソースベースのダイアログボックスを作成するか、を呼び出して、 CreateIndirect メモリ内のテンプレートからダイアログボックスを作成します。First call the constructor; then call the Create member function to create a resource-based dialog box, or call CreateIndirect to create the dialog box from a template in memory.

CDialog:: CreateCDialog::Create

Createを呼び出して、リソースからダイアログボックステンプレートを使用して、モードレスダイアログボックスを作成します。Call Create to create a modeless dialog box using a dialog-box template from a resource.

virtual BOOL Create(
    LPCTSTR lpszTemplateName,
    CWnd* pParentWnd = NULL);

virtual BOOL Create(
    UINT nIDTemplate,
    CWnd* pParentWnd = NULL);

パラメーターParameters

lpszTemplateNamelpszTemplateName
ダイアログボックステンプレートリソースの名前である null で終わる文字列を格納します。Contains a null-terminated string that is the name of a dialog-box template resource.

pParentWndpParentWnd
ダイアログオブジェクトが属する親ウィンドウオブジェクト ( CWnd型) をポイントします。Points to the parent window object (of type CWnd) to which the dialog object belongs. NULL の場合は、ダイアログオブジェクトの親ウィンドウがメインアプリケーションウィンドウに設定されます。If it is NULL, the dialog object's parent window is set to the main application window.

nIDTemplatenIDTemplate
ダイアログボックステンプレートリソースの ID 番号を格納します。Contains the ID number of a dialog-box template resource.

戻り値Return Value

ダイアログボックスの作成と初期化が正常に完了した場合、どちらの形式でも0以外が返されます。それ以外の場合は0です。Both forms return nonzero if dialog-box creation and initialization were successful; otherwise 0.

解説Remarks

コンストラクターの内部にを呼び出す Create か、コンストラクターが呼び出された後に呼び出しを呼び出すことができます。You can put the call to Create inside the constructor or call it after the constructor is invoked.

Createテンプレート名またはテンプレート ID 番号 (IDD_DIALOG1 など) によってダイアログボックステンプレートリソースにアクセスするために、メンバー関数の2つの形式が用意されています。Two forms of the Create member function are provided for access to the dialog-box template resource by either template name or template ID number (for example, IDD_DIALOG1).

どちらの形式でも、親ウィンドウオブジェクトへのポインターを渡します。For either form, pass a pointer to the parent window object. PParentWndが NULL の場合、ダイアログボックスは親ウィンドウまたはオーナーウィンドウがメインアプリケーションウィンドウに設定された状態で作成されます。If pParentWnd is NULL, the dialog box will be created with its parent or owner window set to the main application window.

Createこのメンバー関数は、ダイアログボックスを作成した直後に戻ります。The Create member function returns immediately after it creates the dialog box.

親ウィンドウが作成されたときにダイアログボックスが表示されるようにするには、ダイアログボックステンプレートで WS_VISIBLE スタイルを使用します。Use the WS_VISIBLE style in the dialog-box template if the dialog box should appear when the parent window is created. それ以外の場合は、を呼び出す必要があり ShowWindow ます。Otherwise, you must call ShowWindow. ダイアログボックスのスタイルとアプリケーションの詳細については、 MFC リファレンスの Windows SDK とウィンドウのスタイルで、 dlgtemplate構造体を参照してください。For further dialog-box styles and their application, see the DLGTEMPLATE structure in the Windows SDK and Window Styles in the MFC Reference.

関数 CWnd::DestroyWindow によって作成されたダイアログボックスを破棄するには、関数を使用し Create ます。Use the CWnd::DestroyWindow function to destroy a dialog box created by the Create function.

Example

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:: CreateIndirectCDialog::CreateIndirect

メモリ内のダイアログボックステンプレートからモードレスダイアログボックスを作成するには、このメンバー関数を呼び出します。Call this member function to create a modeless dialog box from a dialog-box template in memory.

virtual BOOL CreateIndirect(
    LPCDLGTEMPLATE lpDialogTemplate,
    CWnd* pParentWnd = NULL,
    void* lpDialogInit = NULL);

virtual BOOL CreateIndirect(
    HGLOBAL hDialogTemplate,
    CWnd* pParentWnd = NULL);

パラメーターParameters

LpのテンプレートlpDialogTemplate
ダイアログボックスの作成に使用されるダイアログボックステンプレートを格納しているメモリを指します。Points to memory that contains a dialog-box template used to create the dialog box. このテンプレートは、「Windows SDK」で説明されているように、 Dlgtemplate構造体とコントロール情報の形式になっています。This template is in the form of a DLGTEMPLATE structure and control information, as described in the Windows SDK.

pParentWndpParentWnd
ダイアログオブジェクトの親ウィンドウオブジェクト ( CWnd型) を指します。Points to the dialog object's parent window object (of type CWnd). NULL の場合は、ダイアログオブジェクトの親ウィンドウがメインアプリケーションウィンドウに設定されます。If it is NULL, the dialog object's parent window is set to the main application window.

Lpの InitlpDialogInit
DLGINIT リソースを指します。Points to a DLGINIT resource.

HのテンプレートhDialogTemplate
ダイアログボックステンプレートを含むグローバルメモリへのハンドルを格納します。Contains a handle to global memory containing a dialog-box template. このテンプレートは、 DLGTEMPLATE ダイアログボックス内の各コントロールの構造とデータの形式です。This template is in the form of a DLGTEMPLATE structure and data for each control in the dialog box.

戻り値Return Value

ダイアログボックスが作成され、正常に初期化された場合は0以外の。それ以外の場合は0です。Nonzero if the dialog box was created and initialized successfully; otherwise 0.

解説Remarks

CreateIndirectこのメンバー関数は、ダイアログボックスを作成した直後に戻ります。The CreateIndirect member function returns immediately after it creates the dialog box.

親ウィンドウが作成されたときにダイアログボックスが表示されるようにするには、ダイアログボックステンプレートで WS_VISIBLE スタイルを使用します。Use the WS_VISIBLE style in the dialog-box template if the dialog box should appear when the parent window is created. それ以外の場合は、を呼び出すと、が ShowWindow 表示されます。Otherwise, you must call ShowWindow to cause it to appear. テンプレートで他のダイアログボックススタイルを指定する方法の詳細については、Windows SDK の「 Dlgtemplate構造体」を参照してください。For more information on how you can specify other dialog-box styles in the template, see the DLGTEMPLATE structure in the Windows SDK.

関数 CWnd::DestroyWindow によって作成されたダイアログボックスを破棄するには、関数を使用し CreateIndirect ます。Use the CWnd::DestroyWindow function to destroy a dialog box created by the CreateIndirect function.

ActiveX コントロールを含むダイアログボックスでは、DLGINIT リソースに追加情報が提供されます。Dialog boxes that contain ActiveX controls require additional information provided in a DLGINIT resource.

CDialog::D oModalCDialog::DoModal

モーダルダイアログボックスを呼び出し、完了したらダイアログボックスの結果を返すには、このメンバー関数を呼び出します。Call this member function to invoke the modal dialog box and return the dialog-box result when done.

virtual INT_PTR DoModal();

戻り値Return Value

int ダイアログボックスを閉じるために使用される、 CDialog:: EndDialogメンバー関数に渡されたnresultパラメーターの値を指定する値。An int value that specifies the value of the nResult parameter that was passed to the CDialog::EndDialog member function, which is used to close the dialog box. 関数でダイアログボックスを作成できなかった場合、または IDABORT (他のエラーが発生した場合) の戻り値は-1 です。この場合、出力ウィンドウには、 GetLastErrorからのエラー情報が含まれます。The return value is -1 if the function could not create the dialog box, or IDABORT if some other error occurred, in which case the output window will contain error information from GetLastError.

解説Remarks

このメンバー関数は、ダイアログボックスがアクティブになっている間、ユーザーとのすべての対話を処理します。This member function handles all interaction with the user while the dialog box is active. これにより、ダイアログボックスがモーダルになります。つまり、ダイアログボックスが閉じられるまで、ユーザーは他のウィンドウと対話できません。This is what makes the dialog box modal; that is, the user cannot interact with other windows until the dialog box is closed.

ユーザーがダイアログボックスのプッシュボタンの1つ ([OK] や [キャンセル] など) をクリックすると、 OnOKOnCancelなどのメッセージハンドラーメンバー関数が呼び出され、ダイアログボックスを閉じようとします。If the user clicks one of the pushbuttons in the dialog box, such as OK or Cancel, a message-handler member function, such as OnOK or OnCancel, is called to attempt to close the dialog box. 既定の OnOK メンバー関数は、ダイアログボックスのデータを検証および更新し、結果 IDOK を使用してダイアログボックスを閉じます。既定のメンバー関数は、ダイアログボックスの OnCancel データを検証したり更新したりせずに、結果 IDCANCEL を使用してダイアログボックスを閉じます。The default OnOK member function will validate and update the dialog-box data and close the dialog box with result IDOK, and the default OnCancel member function will close the dialog box with result IDCANCEL without validating or updating the dialog-box data. これらのメッセージハンドラー関数をオーバーライドして、動作を変更できます。You can override these message-handler functions to alter their behavior.

注意

PreTranslateMessageは、モーダルダイアログボックスのメッセージ処理のために呼び出されるようになりました。PreTranslateMessage is now called for modal dialog box message processing.

Example

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:: EndDialogCDialog::EndDialog

モーダルダイアログボックスを終了するには、このメンバー関数を呼び出します。Call this member function to terminate a modal dialog box.

void EndDialog(int nResult);

パラメーターParameters

n 結果nResult
ダイアログボックスからの呼び出し元に返される値を格納 DoModal します。Contains the value to be returned from the dialog box to the caller of DoModal.

解説Remarks

このメンバー関数は、の戻り値としてNresultを返し DoModal ます。This member function returns nResult as the return value of DoModal. EndDialogモーダルダイアログボックスが作成されるたびに処理を完了するには、関数を使用する必要があります。You must use the EndDialog function to complete processing whenever a modal dialog box is created.

OnInitDialog でも、いつでもを呼び出すことができます。その場合は、 EndDialog ダイアログボックスが表示される前、または入力フォーカスが設定される前に閉じる必要があります。 OnInitDialogYou can call EndDialog at any time, even in OnInitDialog, in which case you should close the dialog box before it is shown or before the input focus is set.

EndDialogでは、ダイアログボックスがすぐに閉じられることはありません。EndDialog does not close the dialog box immediately. 代わりに、現在のメッセージハンドラーが戻るとすぐにダイアログボックスを閉じるように指示するフラグを設定します。Instead, it sets a flag that directs the dialog box to close as soon as the current message handler returns.

Example

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:: GetDefIDCDialog::GetDefID

メンバー関数を呼び出して、 GetDefID ダイアログボックスの既定のプッシュボタンコントロールの ID を取得します。Call the GetDefID member function to get the ID of the default pushbutton control for a dialog box.

DWORD GetDefID() const;

戻り値Return Value

32ビット値 ( DWORD )。A 32-bit value ( DWORD). 既定のプッシュボタンに ID 値が設定されている場合、上位ワードには DC_HASDEFID が含まれ、下位の単語には ID 値が含まれます。If the default pushbutton has an ID value, the high-order word contains DC_HASDEFID and the low-order word contains the ID value. 既定のプッシュボタンに ID 値がない場合、戻り値は0になります。If the default pushbutton does not have an ID value, the return value is 0.

解説Remarks

通常、これは [OK] ボタンです。This is usually an OK button.

CDialog:: GotoDlgCtrlCDialog::GotoDlgCtrl

ダイアログボックス内の指定されたコントロールにフォーカスを移動します。Moves the focus to the specified control in the dialog box.

void GotoDlgCtrl(CWnd* pWndCtrl);

パラメーターParameters

pWndCtrlpWndCtrl
フォーカスを受け取るウィンドウ (コントロール) を識別します。Identifies the window (control) that is to receive the focus.

解説Remarks

PWndCtrlとして渡すコントロール (子ウィンドウ) へのポインターを取得するには、 CWnd::GetDlgItem CWndオブジェクトへのポインターを返すメンバー関数を呼び出します。To get a pointer to the control (child window) to pass as pWndCtrl, call the CWnd::GetDlgItem member function, which returns a pointer to a CWnd object.

Example

CWnd:: GetDlgItemの例を参照してください。See the example for CWnd::GetDlgItem.

CDialog:: InitModalIndirectCDialog::InitModalIndirect

メモリ内に構築したダイアログボックステンプレートを使用してモーダルダイアログオブジェクトを初期化するには、このメンバー関数を呼び出します。Call this member function to initialize a modal dialog object using a dialog-box template that you construct in memory.

BOOL InitModalIndirect(
    LPCDLGTEMPLATE lpDialogTemplate,
    CWnd* pParentWnd = NULL,
    void* lpDialogInit = NULL);

    BOOL InitModalIndirect(
    HGLOBAL hDialogTemplate,
    CWnd* pParentWnd = NULL);

パラメーターParameters

LpのテンプレートlpDialogTemplate
ダイアログボックスの作成に使用されるダイアログボックステンプレートを格納しているメモリを指します。Points to memory that contains a dialog-box template used to create the dialog box. このテンプレートは、「Windows SDK」で説明されているように、 Dlgtemplate構造体とコントロール情報の形式になっています。This template is in the form of a DLGTEMPLATE structure and control information, as described in the Windows SDK.

HのテンプレートhDialogTemplate
ダイアログボックステンプレートを含むグローバルメモリへのハンドルを格納します。Contains a handle to global memory containing a dialog-box template. このテンプレートは、 DLGTEMPLATE ダイアログボックス内の各コントロールの構造とデータの形式です。This template is in the form of a DLGTEMPLATE structure and data for each control in the dialog box.

pParentWndpParentWnd
ダイアログオブジェクトが属する親またはオーナーウィンドウオブジェクト ( CWnd型) を指します。Points to the parent or owner window object (of type CWnd) to which the dialog object belongs. NULL の場合は、ダイアログオブジェクトの親ウィンドウがメインアプリケーションウィンドウに設定されます。If it is NULL, the dialog object's parent window is set to the main application window.

Lpの InitlpDialogInit
DLGINIT リソースを指します。Points to a DLGINIT resource.

戻り値Return Value

ダイアログオブジェクトが正常に作成され初期化された場合は0以外の。それ以外の場合は0です。Nonzero if the dialog object was created and initialized successfully; otherwise 0.

解説Remarks

モーダルダイアログボックスを間接的に作成するには、まずメモリのグローバルブロックを割り当てて、ダイアログボックステンプレートを使用します。To create a modal dialog box indirectly, first allocate a global block of memory and fill it with the dialog box template. 次に、空の CDialog コンストラクターを呼び出して、ダイアログボックスオブジェクトを作成します。Then call the empty CDialog constructor to construct the dialog-box object. 次に、 InitModalIndirect を呼び出して、メモリ内ダイアログボックステンプレートへのハンドルを格納します。Next, call InitModalIndirect to store your handle to the in-memory dialog-box template. [Windows] ダイアログボックスは、後でDoModalメンバー関数が呼び出されたときに作成されて表示されます。The Windows dialog box is created and displayed later, when the DoModal member function is called.

ActiveX コントロールを含むダイアログボックスでは、DLGINIT リソースに追加情報が提供されます。Dialog boxes that contain ActiveX controls require additional information provided in a DLGINIT resource.

CDialog:: Mapの四角形CDialog::MapDialogRect

を呼び出して、四角形のダイアログボックスの単位を画面単位に変換します。Call to convert the dialog-box units of a rectangle to screen units.

void MapDialogRect(LPRECT lpRect) const;

パラメーターParameters

lpRectlpRect
変換するダイアログボックス座標を格納しているRECT構造体またはCRectオブジェクトをポイントします。Points to a RECT structure or CRect object that contains the dialog-box coordinates to be converted.

解説Remarks

ダイアログボックスの単位は、ダイアログボックスのテキストに使用されるフォントの平均の幅と高さから派生した、現在のダイアログボックスの基本単位に関して示されています。Dialog-box units are stated in terms of the current dialog-box base unit derived from the average width and height of characters in the font used for dialog-box text. 1つの水平方向の単位はダイアログボックスの基本幅の単位の1番目で、1つの垂直方向の単位はダイアログボックスの基本高さの単位の8分の1です。One horizontal unit is one-fourth of the dialog-box base-width unit, and one vertical unit is one-eighth of the dialog-box base height unit.

GetDialogBaseUnitsWindows 関数はシステムフォントのサイズ情報を返しますが、リソース定義ファイルで DS_SETFONT スタイルを使用する場合は、各ダイアログボックスに別のフォントを指定することができます。The GetDialogBaseUnits Windows function returns size information for the system font, but you can specify a different font for each dialog box if you use the DS_SETFONT style in the resource-definition file. MapDialogRectWindows 関数は、このダイアログボックスに適切なフォントを使用します。The MapDialogRect Windows function uses the appropriate font for this dialog box.

この MapDialogRect メンバー関数は、 lpRect内のダイアログボックス単位を画面単位 (ピクセル) で置き換えます。これにより、四角形を使用してダイアログボックスを作成したり、ボックス内にコントロールを配置したりすることができます。The MapDialogRect member function replaces the dialog-box units in lpRect with screen units (pixels) so that the rectangle can be used to create a dialog box or position a control within a box.

CDialog:: NextDlgCtrlCDialog::NextDlgCtrl

ダイアログボックスの次のコントロールにフォーカスを移動します。Moves the focus to the next control in the dialog box.

void NextDlgCtrl() const;

解説Remarks

フォーカスがダイアログボックスの最後のコントロールにある場合は、最初のコントロールに移動します。If the focus is at the last control in the dialog box, it moves to the first control.

CDialog:: OnCancelCDialog::OnCancel

フレームワークは、ユーザーが [キャンセル] をクリックするか、モーダルまたはモードレスダイアログボックスで ESC キーを押すと、このメソッドを呼び出します。The framework calls this method when the user clicks Cancel or presses the ESC key in a modal or modeless dialog box.

virtual void OnCancel();

解説Remarks

ユーザーがダイアログボックスを閉じるときに、 [キャンセル] をクリックするか ESC キーを押すと、このメソッドをオーバーライドして操作 (古いデータの復元など) を実行します。Override this method to perform actions (such as restoring old data) when a user closes the dialog box by clicking Cancel or hitting the ESC key. 既定では、 EndDialogを呼び出し、 DoModalが IDCANCEL を返すようにすることで、モーダルダイアログボックスを閉じます。The default closes a modal dialog box by calling EndDialog and causing DoModal to return IDCANCEL.

モードレスダイアログボックスに [キャンセル] ボタンを実装する場合は、メソッドをオーバーライド OnCancel し、その中でDestroyWindowを呼び出す必要があります。If you implement the Cancel button in a modeless dialog box, you must override the OnCancel method and call DestroyWindow inside it. 基底クラスのメソッドを呼び出さないでください。を呼び出すと EndDialog 、ダイアログボックスは非表示になりますが、破棄はされません。Do not call the base-class method, because it calls EndDialog, which will make the dialog box invisible but not destroy it.

注意

CFileDialogWINDOWS XP でコンパイルされたプログラムでオブジェクトを使用する場合、このメソッドをオーバーライドすることはできません。You cannot override this method when you use a CFileDialog object in a program that is compiled under Windows XP. の詳細について CFileDialog は、「 CFileDialog クラス」を参照してください。For more information about CFileDialog, see CFileDialog Class.

Example

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:: OnInitDialogCDialog::OnInitDialog

このメソッドは、メッセージへの応答として呼び出され WM_INITDIALOG ます。This method is called in response to the WM_INITDIALOG message.

virtual BOOL OnInitDialog();

戻り値Return Value

アプリケーションがダイアログボックスのコントロールのいずれかに入力フォーカスを設定したかどうかを指定します。Specifies whether the application has set the input focus to one of the controls in the dialog box. OnInitDialog 0 以外の値を返した場合、Windows は、ダイアログボックスの最初のコントロールである既定の場所に入力フォーカスを設定します。If OnInitDialog returns nonzero, Windows sets the input focus to the default location, the first control in the dialog box. アプリケーションは、ダイアログボックス内のコントロールのいずれかに入力フォーカスを明示的に設定している場合にのみ、0を返すことができます。The application can return 0 only if it has explicitly set the input focus to one of the controls in the dialog box.

解説Remarks

Windows は、 WM_INITDIALOG ダイアログボックスが表示される直前に発生する、 CreateCreateindirect、またはDoModalの呼び出し中にダイアログボックスにメッセージを送信します。Windows sends the WM_INITDIALOG message to the dialog box during the Create, CreateIndirect, or DoModal calls, which occur immediately before the dialog box is displayed.

ダイアログボックスが初期化されるときに特別な処理を実行する場合は、このメソッドをオーバーライドします。Override this method if you want to perform special processing when the dialog box is initialized. オーバーライドされたバージョンでは、最初に基本クラスを呼び出し OnInitDialog ますが、その戻り値は無視します。In the overridden version, first call the base class OnInitDialog but ignore its return value. 通常は、オーバーライドされた TRUE メソッドからを返します。You will typically return TRUE from your overridden method.

Windows は、 OnInitDialog すべての Microsoft Foundation Class ライブラリダイアログボックスに共通する標準のグローバルダイアログボックスのプロシージャを使用して、関数を呼び出します。Windows calls the OnInitDialog function by using the standard global dialog-box procedure common to all Microsoft Foundation Class Library dialog boxes. メッセージマップを介してこの関数を呼び出すことはないため、このメソッドのメッセージマップエントリは必要ありません。It does not call this function through your message map, and therefore you do not need a message map entry for this method.

注意

CFileDialogWindows Vista 以降のオペレーティングシステムでコンパイルされるプログラムでオブジェクトを使用する場合、このメソッドをオーバーライドすることはできません。You cannot override this method when you use a CFileDialog object in a program that is compiled under Windows Vista or later operating systems. Windows Vista 以降でに加えられた変更の詳細につい CFileDialog ては、「 CFileDialog クラス」を参照してください。For more information about changes to CFileDialog under Windows Vista and later, see CFileDialog Class.

Example

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:: OnOKCDialog::OnOK

ユーザーが [OK ] ボタン (ID が IDOK のボタン) をクリックしたときに呼び出されます。Called when the user clicks the OK button (the button with an ID of IDOK).

virtual void OnOK();

解説Remarks

[OK ] ボタンがアクティブになったときにアクションを実行するには、このメソッドをオーバーライドします。Override this method to perform actions when the OK button is activated. ダイアログボックスに自動データ検証と exchange が含まれている場合、このメソッドの既定の実装はダイアログボックスデータを検証し、アプリケーション内の適切な変数を更新します。If the dialog box includes automatic data validation and exchange, the default implementation of this method validates the dialog box data and updates the appropriate variables in your application.

モードレスダイアログボックスに [OK ] ボタンを実装する場合は、メソッドをオーバーライド OnOK し、その中でDestroyWindowを呼び出す必要があります。If you implement the OK button in a modeless dialog box, you must override the OnOK method and call DestroyWindow inside it. 基底クラスのメソッドを呼び出さないでください。このメソッドは、ダイアログボックスが非表示になりますが、破棄されないようにするためです。Do not call the base-class method, because it calls EndDialog which makes the dialog box invisible but does not destroy it.

注意

CFileDialogWINDOWS XP でコンパイルされたプログラムでオブジェクトを使用する場合、このメソッドをオーバーライドすることはできません。You cannot override this method when you use a CFileDialog object in a program that is compiled under Windows XP. の詳細について CFileDialog は、「 CFileDialog クラス」を参照してください。For more information about CFileDialog, see CFileDialog Class.

Example

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:: OnSetFontCDialog::OnSetFont

テキストを描画するときにダイアログボックスコントロールが使用するフォントを指定します。Specifies the font a dialog-box control will use when drawing text.

Virtual void OnSetFont(CFont* pFont);

パラメーターParameters

pFontpFont
からこのダイアログボックスのすべてのコントロールの既定のフォントとして使用されるフォントへのポインターを指定します。[in] Specifies a pointer to the font that will be used as the default font for all controls in this dialog box.

解説Remarks

ダイアログボックスでは、すべてのコントロールの既定値として、指定したフォントが使用されます。The dialog box will use the specified font as the default for all its controls.

ダイアログエディターでは、通常、ダイアログボックスのテンプレートリソースの一部としてダイアログボックスフォントが設定されます。The dialog editor typically sets the dialog-box font as part of the dialog-box template resource.

注意

CFileDialogWindows Vista 以降のオペレーティングシステムでコンパイルされるプログラムでオブジェクトを使用する場合、このメソッドをオーバーライドすることはできません。You cannot override this method when you use a CFileDialog object in a program that is compiled under Windows Vista or later operating systems. Windows Vista 以降でに加えられた変更の詳細につい CFileDialog ては、「 CFileDialog クラス」を参照してください。For more information about changes to CFileDialog under Windows Vista and later, see CFileDialog Class.

CDialog::P revDlgCtrlCDialog::PrevDlgCtrl

ダイアログボックスの前のコントロールにフォーカスを設定します。Sets the focus to the previous control in the dialog box.

void PrevDlgCtrl() const;

解説Remarks

フォーカスがダイアログボックスの最初のコントロールにある場合は、ボックス内の最後のコントロールに移動します。If the focus is at the first control in the dialog box, it moves to the last control in the box.

CDialog:: SetDefIDCDialog::SetDefID

ダイアログボックスの既定のプッシュボタンコントロールを変更します。Changes the default pushbutton control for a dialog box.

void SetDefID(UINT nID);

パラメーターParameters

nIDnID
既定値になるプッシュボタンコントロールの ID を指定します。Specifies the ID of the pushbutton control that will become the default.

CDialog:: Sei PidCDialog::SetHelpID

ダイアログボックスの状況依存のヘルプ ID を設定します。Sets a context-sensitive help ID for the dialog box.

void SetHelpID(UINT nIDR);

パラメーターParameters

nIDRnIDR
状況依存のヘルプ ID を指定します。Specifies the context-sensitive help ID.

関連項目See also

MFC のサンプル DLGCBR32MFC Sample DLGCBR32
MFC のサンプル DLGTEMPLMFC Sample DLGTEMPL
CWnd クラスCWnd Class
階層図Hierarchy Chart