Учебники

MFC — Диалоговые окна

В этой главе мы рассмотрим диалоговые окна. Приложения для Windows часто общаются с пользователем через диалоговые окна. Класс CDialog предоставляет интерфейс для управления диалоговыми окнами. Диалоговый редактор Visual C ++ позволяет легко проектировать диалоговые окна и создавать их ресурсы шаблона диалога.

  • Создание объекта диалога является двухфазной операцией —

    • Построить объект диалога.

    • Создайте диалоговое окно.

Создание объекта диалога является двухфазной операцией —

Построить объект диалога.

Создайте диалоговое окно.

Давайте рассмотрим простой пример, создав новый проект Win32.

Шаг 1 — Откройте Visual Studio и выберите пункт меню Файл → Создать → Проект.

Шаг 2 — Теперь вы можете увидеть диалоговое окно New Project.

Диалоговое окно «Новый проект»

Шаг 3 — На левой панели выберите Шаблоны → Visual C ++ → Win32.

Шаг 4 — В средней панели выберите Win32 Project.

Шаг 5 — Введите имя проекта «MFCDialogDemo» в поле «Имя» и нажмите «ОК» для продолжения. Вы увидите следующий диалог.

MFCDialogDemo Project

Шаг 6 — Нажмите Далее.

Настройка MFCDialogDemo

Шаг 7 — Выберите параметры, показанные в диалоговом окне, указанном выше, и нажмите Готово.

Параметры MFCDialogDemo

Шаг 8 — Пустой проект создан.

Шаг 9 — Чтобы сделать его проектом MFC, щелкните проект правой кнопкой мыши и выберите «Свойства».

MFCDialogDemo Property

Шаг 10 — В левом разделе нажмите Свойства конфигурации → Общие.

Шаг 11 — Выберите параметр «Использовать MFC в общей библиотеке DLL» в разделе «Параметры проекта по умолчанию» и нажмите «ОК».

Шаг 12 — Добавьте новый исходный файл.

Шаг 13 — Щелкните правой кнопкой мыши по вашему проекту и выберите Добавить → Новый элемент.

Шаг 14 — В разделе «Шаблоны» нажмите «Файл C ++» (.cpp)

MFCDialogDemo Добавить запись

Шаг 15 — Установите имя в качестве примера и нажмите «Добавить».

Шаг 16. Чтобы создать приложение, нам нужно добавить класс и извлечь его из CWinApp MFC.

#include <afxwin.h>

class CExample : public CWinApp {
   public:
      BOOL InitInstance();
};

Создание диалогового окна

Шаг 1. Чтобы создать диалоговое окно, щелкните правой кнопкой мыши папку Resource Files в обозревателе решений и выберите Add → Resource.

Добавить ресурс

Шаг 2 — В диалоговом окне «Добавить ресурс» выберите «Диалог» и нажмите «Создать».

Шаг 3 — Диалоговое окно требует некоторой подготовки, прежде чем фактически его создавать программно.

Шаг 4 — Сначала можно вручную создать диалоговое окно в виде текстового файла (в файле ресурсов).

Шаг 5 — Теперь вы можете увидеть файл MFCDialogDemo.rc, созданный в разделе Resource Files.

MFCDialogDemo FIle

Шаг 6 — Файл ресурсов открыт в конструкторе. То же самое можно открыть как текстовый файл. Щелкните правой кнопкой мыши файл ресурса и выберите «Открыть с помощью».

Открыть с помощью файла MFCDialogDemo

Шаг 7 — Выберите редактор исходного кода (текст) и нажмите кнопку Добавить.

Редактор исходного кода

Шаг 8 — Вернитесь к конструктору, щелкните правой кнопкой мыши диалоговое окно и выберите «Свойства».

DialogBox Выбрать свойства

Шаг 9 — Вам нужно выбрать из множества вариантов.

Шаг 10 — Как и большинство других элементов управления, диалоговое окно должно быть идентифицировано. Идентификатор (ID) диалогового окна обычно начинается с IDD_. Давайте изменим ID на IDD_EXAMPLE_DLG.

Расположение диалога

Диалоговое окно должно быть «физически» расположено в приложении. Поскольку диалоговое окно обычно создается в качестве родительского элемента для других элементов управления, его расположение зависит от его отношения к родительскому окну или к рабочему столу.

Если вы посмотрите и окно свойств, вы увидите два поля, X Pos и ​​Y Pos.

Расположение диалога

  • X — расстояние от левой границы монитора до левой границы диалогового окна.

  • Y — расстояние от верхней границы монитора до верхней границы диалогового окна.

X — расстояние от левой границы монитора до левой границы диалогового окна.

Y — расстояние от верхней границы монитора до верхней границы диалогового окна.

По умолчанию эти поля установлены на ноль. Вы также можете изменить, как показано выше.

Если вы укажете эти два измерения как 0, левая и верхняя границы диалогового окна будут установлены так, что объект появится в центре по центру экрана.

Диалоговое окно Размеры

Размеры диалогового окна относятся к его ширине и высоте. Вы можете изменить ширину и высоту с помощью мыши в окне дизайнера.

Диалоговое окно Размер

Вы можете увидеть изменения ширины и высоты в строке состояния.

Методы диалоговых окон

Базовый класс, используемый для отображения диалоговых окон на экране, — это класс CDialog. Чтобы создать диалоговое окно, нам нужно извлечь класс из CDialog. Сам класс CDialog предоставляет три конструктора:

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

Давайте создадим еще один класс CExampleDlg и выведем его из CDialog. Мы реализуем его конструктор по умолчанию, как показано в следующем коде.

class CExampleDlg : public CDialog {
   public:
      enum { IDD = IDD_EXAMPLE_DLG };
   
      CExampleDlg();
      ~CExampleDlg();
};

CExampleDlg::CExampleDlg():CDialog(CExampleDlg::IDD) {

}

CExampleDlg::~CExampleDlg() {

}

Нам нужно создать этот диалог в методе CExample :: InitInstance (), как показано в следующем коде.

BOOL CExample::InitInstance() {
   CExampleDlg myDlg;
   m_pMainWnd = &myDlg;
   
   return TRUE;
}

Модальные диалоговые окна

Существует два типа диалоговых окон — немодальное и модальное . Модальные и немодальные диалоговые окна отличаются процессом, используемым для их создания и отображения.

Немодальное диалоговое окно

  • Для немодального диалогового окна вы должны предоставить свой собственный общедоступный конструктор в вашем диалоговом классе.

  • Чтобы создать немодальное диалоговое окно, вызовите ваш общедоступный конструктор, а затем вызовите функцию Create member объекта диалога, чтобы загрузить ресурс диалога.

  • Вы можете вызвать Create во время или после вызова конструктора. Если ресурс диалога имеет свойство WS_VISIBLE, диалоговое окно появляется немедленно.

  • Если нет, вы должны вызвать его функцию-член ShowWindow.

Для немодального диалогового окна вы должны предоставить свой собственный общедоступный конструктор в вашем диалоговом классе.

Чтобы создать немодальное диалоговое окно, вызовите ваш общедоступный конструктор, а затем вызовите функцию Create member объекта диалога, чтобы загрузить ресурс диалога.

Вы можете вызвать Create во время или после вызова конструктора. Если ресурс диалога имеет свойство WS_VISIBLE, диалоговое окно появляется немедленно.

Если нет, вы должны вызвать его функцию-член ShowWindow.

Модальный диалог

  • Чтобы создать модальное диалоговое окно, вызовите любой из двух открытых конструкторов, объявленных в CDialog.

  • Затем вызовите функцию- член DoModal объекта диалога, чтобы отобразить диалоговое окно и управлять взаимодействием с ним, пока пользователь не выберет OK или Отмена.

  • Это управление DoModal делает модальное диалоговое окно. Для модальных диалоговых окон DoModal загружает ресурс диалога.

Чтобы создать модальное диалоговое окно, вызовите любой из двух открытых конструкторов, объявленных в CDialog.

Затем вызовите функцию- член DoModal объекта диалога, чтобы отобразить диалоговое окно и управлять взаимодействием с ним, пока пользователь не выберет OK или Отмена.

Это управление DoModal делает модальное диалоговое окно. Для модальных диалоговых окон DoModal загружает ресурс диалога.

Шаг 1 — Чтобы отобразить диалоговое окно как модальное, в событии CExample :: InitInstance () вызовите метод DoModal () с помощью вашей диалоговой переменной —

BOOL CExample::InitInstance() {
   CExampleDlg myDlg;
   m_pMainWnd = &myDlg;
   myDlg.DoModal();
   return TRUE;
}

Шаг 2 — Вот полная реализация файла Example.cpp.

#include <afxwin.h>
#include "resource.h"

class CExample : public CWinApp {
   public:
      BOOL InitInstance();
};
   
class CExampleDlg : public CDialog {
   public:
      enum { IDD = IDD_EXAMPLE_DLG };
   
      CExampleDlg();
     ~CExampleDlg();
};

CExampleDlg::CExampleDlg():CDialog(CExampleDlg::IDD) {

}

CExampleDlg::~CExampleDlg() {

}

BOOL CExample::InitInstance() {
   CExampleDlg myDlg;
   m_pMainWnd = &myDlg;
   myDlg.DoModal();
   return TRUE;
}
CExample MyApp;

Шаг 3 — Когда приведенный выше код скомпилирован и выполнен, вы увидите следующее диалоговое окно.

Диалоговое окно

Приложения на основе диалогов

Microsoft Visual Studio предоставляет более простой способ создания приложения, основанного главным образом на диалоговом окне. Вот шаги для создания базового проекта диалога, используя шаблоны проектов, доступные в Visual Studio —

Шаг 1 — Откройте Visual Studio и выберите пункт меню Файл → Создать → Проект. Вы можете увидеть диалоговое окно New Project.

Диалоговый шаблон проекта

Шаг 2 — На левой панели выберите Шаблоны → Visual C ++ → MFC.

Шаг 3 — В средней панели выберите Приложение MFC.

Шаг 4 — Введите имя проекта «MFCModalDemo» в поле «Имя» и нажмите «ОК» для продолжения. Вы увидите следующее диалоговое окно.

MFCModalDemo Application2

Шаг 5 — Нажмите Далее.

MFCModalDemo Type

Шаг 6 — Выберите параметры, показанные в диалоговом окне выше, и нажмите Далее.

Параметры приложения MFCModalDemo

Шаг 7 — Отметьте все параметры, которые вы выбрали в диалоговом окне, такие как «Развернуть и свернуть поля», и нажмите «Далее».

MFCModalDemo Расширенные возможности

Шаг 8 — Нажмите Далее.

MFCModalDemo сгенерированные классы

Шаг 9 — Он сгенерирует эти два класса. Вы можете изменить название классов и нажать «Готово».

Шаг 10. Теперь вы видите, что мастер MFC создает это диалоговое окно и файлы проекта по умолчанию.

Приложение DialogBox

Шаг 11 — Когда вы запустите это приложение, вы увидите следующий вывод.