Класс CDialogCDialog Class

Базовый класс, используемый для отображения диалоговых окон на экране.The base class used for displaying dialog boxes on the screen.

СинтаксисSyntax

class CDialog : public CWnd

ЧленыMembers

Открытые конструкторыPublic Constructors

nameName ОписаниеDescription
CDialog:: CDialogCDialog::CDialog Формирует объект CDialog.Constructs a CDialog object.

Открытые методыPublic Methods

nameName ОписаниеDescription
CDialog:: CreateCDialog::Create Выполняет инициализацию объекта CDialog.Initializes the CDialog object. Создает немодальное диалоговое окно и прикрепляет его к CDialog объекту.Creates a modeless dialog box and attaches it to the CDialog object.
CDialog:: КреатеиндиректCDialog::CreateIndirect Создает немодальное диалоговое окно из шаблона диалогового окна в памяти (не на основе ресурсов).Creates a modeless dialog box from a dialog-box template in memory (not resource-based).
CDialog::D ОмодалCDialog::DoModal Вызывает модальное диалоговое окно и по завершении возвращает.Calls a modal dialog box and returns when done.
CDialog:: EndDialogCDialog::EndDialog Закрывает модальное диалоговое окно.Closes a modal dialog box.
CDialog:: ЖетдефидCDialog::GetDefID Возвращает идентификатор элемента управления "Кнопка" по умолчанию для диалогового окна.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:: ИнитмодалиндиректCDialog::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:: МапдиалогректCDialog::MapDialogRect Преобразует единицы диалогового окна прямоугольника в единицы экрана.Converts the dialog-box units of a rectangle to screen units.
CDialog:: НекстдлгктрлCDialog::NextDlgCtrl Перемещает фокус на следующий элемент управления диалогового окна в диалоговом окне.Moves the focus to the next dialog-box control in the dialog box.
CDialog:: ОнинитдиалогCDialog::OnInitDialog Переопределите для расширения инициализации диалогового окна.Override to augment dialog-box initialization.
CDialog:: ОнсетфонтCDialog::OnSetFont Переопределите, чтобы указать шрифт, который должен использоваться элементом управления "диалоговое окно" при отрисовке текста.Override to specify the font that a dialog-box control is to use when it draws text.
CDialog::P РевдлгктрлCDialog::PrevDlgCtrl Перемещает фокус на предыдущий элемент управления диалогового окна в диалоговом окне.Moves the focus to the previous dialog-box control in the dialog box.
CDialog:: СетдефидCDialog::SetDefID Изменяет элемент управления "Кнопка" по умолчанию для диалогового окна на указанную.Changes the default pushbutton control for a dialog box to a specified pushbutton.
CDialog:: СеселпидCDialog::SetHelpID Задает контекстно-зависимый идентификатор справки для диалогового окна.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 возвращается значение идканцел.The default closes the dialog box and DoModal returns IDCANCEL.
CDialog:: ОНОКCDialog::OnOK Переопределите, чтобы выполнить действие кнопки ОК в модальном диалоговом окне.Override to perform the OK button action in a modal dialog box. По умолчанию диалоговое окно закрывается и DoModal возвращается значение идок.The default closes the dialog box and DoModal returns IDOK.

КомментарииRemarks

Диалоговые окна имеют два типа: модальные и немодальные.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Объект — это сочетание шаблона диалогового окна и класса, CDialog производного от.A 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.You can also create a template in memory by using a DLGTEMPLATE data structure as described in the Windows SDK. После создания CDialog объекта вызовите креатеиндирект , чтобы создать немодальное диалоговое окно, или вызовите метод инитмодалиндирект и 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. Дополнительные сведения о функциях Exchange и проверки см. в описании функции членства в DoDataExchange CWnd .See the DoDataExchange member function in CWnd for more on the exchange and validation functionality.

Программист и инфраструктура вызывают DoDataExchange непрямо через вызов CWnd:: упдатедата.Both the programmer and the framework call DoDataExchange indirectly through a call to CWnd::UpdateData.

Платформа вызывает, UpdateData когда пользователь нажимает кнопку ОК, чтобы закрыть модальное диалоговое окно.The framework calls UpdateData when the user clicks the OK button to close a modal dialog box. (При нажатии кнопки Отмена данные не извлекаются.) Реализация онинитдиалог по умолчанию также вызывает метод 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.

Модальное диалоговое окно закрывается автоматически при нажатии пользователем кнопок ОК или Отмена или когда код вызывает 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. Модальные диалоговые окна обычно создаются на фрейме и не требуют PostNcDestroy очистки.Modal 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

лпсзтемплатенамеlpszTemplateName
Содержит строку, завершающуюся нулем, которая является именем ресурса шаблона диалогового окна.Contains a null-terminated string that is the name of a dialog-box template resource.

нидтемплатеnIDTemplate
Содержит ИДЕНТИФИКАЦИОНный номер ресурса шаблона диалогового окна.Contains the ID number of a dialog-box template resource.

ппарентвндpParentWnd
Указывает на родительский элемент или объект окна-владельца (типа 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

Одна форма конструктора предоставляет доступ к ресурсу диалогового окна по имени шаблона.One form of the constructor provides access to the dialog resource by template name. Другой конструктор предоставляет доступ по ИДЕНТИФИКАТОРу шаблона, обычно с префиксом 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.

Чтобы создать немодальное диалоговое окно, используйте защищенную форму 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. Создание немодального диалогового окна — это двухэтапный процесс.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

лпсзтемплатенамеlpszTemplateName
Содержит строку, завершающуюся нулем, которая является именем ресурса шаблона диалогового окна.Contains a null-terminated string that is the name of a dialog-box template resource.

ппарентвндpParentWnd
Указывает на объект родительского окна (типа 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.

нидтемплатеnIDTemplate
Содержит ИДЕНТИФИКАЦИОНный номер ресурса шаблона диалогового окна.Contains the ID number of a dialog-box template resource.

Возвращаемое значениеReturn Value

Обе формы возвращают ненулевое значение, если создание диалогового окна и инициализация завершились успешно; в противном случае — 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 члена предоставляются для доступа к ресурсу шаблона диалогового окна по имени шаблона или идентификационному номеру шаблона (например, IDD_DIALOG1).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. Если ппарентвнд имеет значение 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. Дополнительные стили диалоговых окон и их приложения см. в структуре длгтемплате в разделе стили Windows SDK и окна в справочнике по MFC.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:: КреатеиндиректCDialog::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

лпдиалогтемплатеlpDialogTemplate
Указывает на память, содержащую шаблон диалогового окна, используемый для создания диалогового окна.Points to memory that contains a dialog-box template used to create the dialog box. Этот шаблон представлен в виде структуры длгтемплате и управления данными, как описано в Windows SDK.This template is in the form of a DLGTEMPLATE structure and control information, as described in the Windows SDK.

ппарентвндpParentWnd
Указывает на родительский объект Window объекта диалогового окна (типа 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.

лпдиалогинитlpDialogInit
Указывает на ресурс ДЛГИНИТ.Points to a DLGINIT resource.

хдиалогтемплате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.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.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, требуются дополнительные сведения, предоставляемые в ресурсе ДЛГИНИТ.Dialog boxes that contain ActiveX controls require additional information provided in a DLGINIT resource.

CDialog::D ОмодалCDialog::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 Значение типа, указывающее значение параметра nрезультат , переданного в функцию-член CDialog:: EndDialog , которая используется для закрытия диалогового окна.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. Возвращаемое значение равно-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.

Если пользователь нажимает одну из кнопок в диалоговом окне, например ОК или Отмена, вызывается функция-член обработчика сообщений, например ОНОК или OnCancel, для попыток закрыть диалоговое окно.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 проверит и обновит данные диалогового окна и закроет диалоговое окно с результатом идок, а функция-член по умолчанию OnCancel закроет диалоговое окно с результатом идканцел без проверки или обновления данных диалогового окна.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

Эта функция – член возвращает nрезультат в качестве возвращаемого значения 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.

Вы можете вызвать в EndDialog любое время, даже в онинитдиалог. в этом случае следует закрыть диалоговое окно до его отображения или до установки фокуса ввода.You 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:: ЖетдефидCDialog::GetDefID

Вызовите GetDefID функцию-член, чтобы получить идентификатор элемента управления "Кнопка" по умолчанию для диалогового окна.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, а младшее слово содержит значение идентификатора.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

Обычно это кнопка ОК.This is usually an OK button.

CDialog:: ГотодлгктрлCDialog::GotoDlgCtrl

Перемещает фокус на указанный элемент управления в диалоговом окне.Moves the focus to the specified control in the dialog box.

void GotoDlgCtrl(CWnd* pWndCtrl);

ПараметрыParameters

пвндктрлpWndCtrl
Определяет окно (элемент управления), получающее фокус.Identifies the window (control) that is to receive the focus.

КомментарииRemarks

Чтобы получить указатель на элемент управления (дочернее окно) для передачи в виде пвндктрл, вызовите 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:: жетдлгитем.See the example for CWnd::GetDlgItem.

CDialog:: ИнитмодалиндиректCDialog::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

лпдиалогтемплатеlpDialogTemplate
Указывает на память, содержащую шаблон диалогового окна, используемый для создания диалогового окна.Points to memory that contains a dialog-box template used to create the dialog box. Этот шаблон представлен в виде структуры длгтемплате и управления данными, как описано в Windows SDK.This template is in the form of a DLGTEMPLATE structure and control information, as described in the Windows SDK.

хдиалогтемплате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.

ппарентвндpParentWnd
Указывает на родительский элемент или объект окна-владельца (типа 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.

лпдиалогинитlpDialogInit
Указывает на ресурс ДЛГИНИТ.Points to a DLGINIT resource.

Возвращаемое значениеReturn Value

Ненулевое значение, если объект диалогового окна был создан и инициализирован успешно; в противном случае — 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, требуются дополнительные сведения, предоставляемые в ресурсе ДЛГИНИТ.Dialog boxes that contain ActiveX controls require additional information provided in a DLGINIT resource.

CDialog:: МапдиалогректCDialog::MapDialogRect

Вызов для преобразования единиц диалогового окна прямоугольника в единицы экрана.Call to convert the dialog-box units of a rectangle to screen units.

void MapDialogRect(LPRECT lpRect) const;

ПараметрыParameters

лпректlpRect
Указывает на структуру Rect или объект крект , содержащий координаты диалогового окна для преобразования.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. Одна горизонтальная единица — это одна четвертая единица базовой ширины диалогового окна, а одна единица по вертикали — одна восьмая от базовой единицы высоты диалогового окна.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.

GetDialogBaseUnitsФункция Windows возвращает сведения о размере системного шрифта, но при использовании стиля 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. MapDialogRectФункция Windows использует для этого диалогового окна соответствующий шрифт.The MapDialogRect Windows function uses the appropriate font for this dialog box.

MapDialogRectФункция-член заменяет единицы диалогового окна в лпрект с помощью единиц экрана (пикселей), чтобы прямоугольник можно было использовать для создания диалогового окна или размещения элемента управления в поле.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:: НекстдлгктрлCDialog::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 для возвращения идканцел.The default closes a modal dialog box by calling EndDialog and causing DoModal to return IDCANCEL.

При реализации кнопки Отмена в немодальном диалоговом окне необходимо переопределить OnCancel метод и вызвать дестройвиндов внутри него.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.

Примечание

Этот метод нельзя переопределить при использовании CFileDialog объекта в программе, компилируемой в Windows 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:: ОнинитдиалогCDialog::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 возвращает ненулевое значение, 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 сообщение в диалоговое окно во время вызовов CREATE, креатеиндиректили 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.

Примечание

Этот метод нельзя переопределить при использовании CFileDialog объекта в программе, скомпилированной в Windows 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. Дополнительные сведения об изменениях в CFileDialog Windows Vista и более поздних версиях см. в разделе класс 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:: ОНОКCDialog::OnOK

Вызывается, когда пользователь нажимает кнопку " ОК " (кнопка с идентификатором идок).Called when the user clicks the OK button (the button with an ID of IDOK).

virtual void OnOK();

КомментарииRemarks

Переопределите этот метод для выполнения действий при активации кнопки ОК .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.

При реализации кнопки ОК в немодальном диалоговом окне необходимо переопределить OnOK метод и вызвать дестройвиндов внутри него.If you implement the OK button in a modeless dialog box, you must override the OnOK method and call DestroyWindow inside it. Не вызывайте метод базового класса, так как он вызывает EndDialog , что делает диалоговое окно невидимым, но не уничтожает его.Do not call the base-class method, because it calls EndDialog which makes the dialog box invisible but does not destroy it.

Примечание

Этот метод нельзя переопределить при использовании CFileDialog объекта в программе, компилируемой в Windows 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:: ОнсетфонтCDialog::OnSetFont

Задает шрифт, который будет использоваться элементом управления "диалоговое окно" при рисовании текста.Specifies the font a dialog-box control will use when drawing text.

Virtual void OnSetFont(CFont* pFont);

ПараметрыParameters

пфонтpFont
окне Задает указатель на шрифт, который будет использоваться в качестве шрифта по умолчанию для всех элементов управления в этом диалоговом окне.[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.

Примечание

Этот метод нельзя переопределить при использовании CFileDialog объекта в программе, скомпилированной в Windows 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. Дополнительные сведения об изменениях в CFileDialog Windows Vista и более поздних версиях см. в разделе класс CFileDialog.For more information about changes to CFileDialog under Windows Vista and later, see CFileDialog Class.

CDialog::P РевдлгктрлCDialog::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:: СетдефидCDialog::SetDefID

Изменяет элемент управления "Кнопка" по умолчанию для диалогового окна.Changes the default pushbutton control for a dialog box.

void SetDefID(UINT nID);

ПараметрыParameters

nIDnID
Указывает идентификатор элемента управления "Кнопка", который станет значением по умолчанию.Specifies the ID of the pushbutton control that will become the default.

CDialog:: СеселпидCDialog::SetHelpID

Задает контекстно-зависимый идентификатор справки для диалогового окна.Sets a context-sensitive help ID for the dialog box.

void SetHelpID(UINT nIDR);

ПараметрыParameters

нидрnIDR
Задает контекстно-зависимый идентификатор справки.Specifies the context-sensitive help ID.

См. также разделSee also

Пример DLGCBR32 для MFCMFC Sample DLGCBR32
Пример ДЛГТЕМПЛ для MFCMFC Sample DLGTEMPL
CWnd, классCWnd Class
Иерархическая диаграммаHierarchy Chart