MFC - диалоговые окна
В этой главе мы рассмотрим диалоговые окна. Приложения для Windows часто общаются с пользователем через диалоговые окна.CDialog classпредоставляет интерфейс для управления диалоговыми окнами. Редактор диалогов Visual C ++ упрощает проектирование диалоговых окон и создание ресурсов для их шаблонов диалогов.
Создание диалогового объекта - это двухэтапная операция:
Создайте объект диалога.
Создайте диалоговое окно.
Давайте рассмотрим простой пример, создав новый проект Win32.
Step 1 - Откройте Visual Studio и выберите пункт меню File → New → Project.
Step 2 - Теперь вы можете увидеть диалоговое окно «Новый проект».
Step 3 - На левой панели выберите «Шаблоны» → «Visual C ++» → «Win32».
Step 4 - На средней панели выберите Win32 Project.
Step 5- Введите имя проекта «MFCDialogDemo» в поле «Имя» и нажмите «ОК», чтобы продолжить. Вы увидите следующий диалог.
Step 6 - Щелкните Далее.
Step 7 - Выберите параметры, показанные в приведенном выше диалоговом окне, и нажмите Готово.
Step 8 - Создан пустой проект.
Step 9 - Чтобы сделать его проектом MFC, щелкните проект правой кнопкой мыши и выберите «Свойства».
Step 10 - В левом разделе нажмите Свойства конфигурации → Общие.
Step 11 - Выберите параметр «Использовать MFC в общей DLL» в разделе «Параметры проекта по умолчанию» и нажмите «ОК».
Step 12 - Добавить новый исходный файл.
Step 13 - Щелкните правой кнопкой мыши свой проект и выберите «Добавить» → «Новый элемент».
Step 14 - В разделе "Шаблоны" нажмите "Файл C ++" (.cpp).
Step 15 - Задайте Имя как Пример и нажмите Добавить.
Step 16 - Чтобы создать приложение, нам нужно добавить класс и унаследовать его от CWinApp MFC.
#include <afxwin.h>
class CExample : public CWinApp {
public:
BOOL InitInstance();
};
Создание диалогового окна
Step 1 - Чтобы создать диалоговое окно, щелкните правой кнопкой мыши папку «Файлы ресурсов» в проводнике решений и выберите «Добавить» → «Ресурс».
Step 2 - В диалоговом окне «Добавить ресурс» выберите «Диалог» и нажмите «Создать».
Step 3 - Диалоговое окно требует некоторой подготовки перед фактическим программным созданием.
Step 4 - Диалоговое окно можно сначала создать вручную как текстовый файл (в файле ресурсов).
Step 5 - Теперь вы можете увидеть файл MFCDialogDemo.rc, созданный в разделе «Файлы ресурсов».
Step 6- Файл ресурсов открыт в дизайнере. То же самое можно открыть как текстовый файл. Щелкните правой кнопкой мыши файл ресурсов и выберите «Открыть с помощью».
Step 7 - Выберите редактор исходного кода (текст) и нажмите кнопку «Добавить».
Step 8 - Вернитесь к конструктору, щелкните правой кнопкой мыши диалоговое окно и выберите «Свойства».
Step 9 - Вам нужно выбирать из множества вариантов.
Step 10- Как и большинство других элементов управления, диалоговое окно должно быть идентифицировано. Идентификатор (ID) диалогового окна обычно начинается с IDD_. Давайте изменим ID на IDD_EXAMPLE_DLG.
Расположение диалогового окна
Диалоговое окно должно быть «физически» расположено в приложении. Поскольку диалоговое окно обычно создается как родительский для других элементов управления, его расположение зависит от его отношения к родительскому окну или к рабочему столу.
Если вы посмотрите и окно свойств, вы увидите два поля: X Pos и Y Pos.
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;
}
Модальные диалоговые окна
Есть два типа диалоговых окон - modeless и modal. Модальные и немодальные диалоговые окна различаются процессом их создания и отображения.
Немодальное диалоговое окно
Для немодального диалогового окна вы должны предоставить свой собственный общедоступный конструктор в своем классе диалога.
Чтобы создать немодальное диалоговое окно, вызовите свой общедоступный конструктор, а затем вызовите функцию-член Create объекта диалогового окна, чтобы загрузить ресурс диалогового окна.
Вы можете вызвать Create либо во время, либо после вызова конструктора. Если ресурс диалога имеет свойство WS_VISIBLE, диалоговое окно появляется немедленно.
Если нет, необходимо вызвать его функцию-член ShowWindow.
Модальный диалог
Чтобы создать модальное диалоговое окно, вызовите любой из двух общедоступных конструкторов, объявленных в CDialog.
Затем вызовите объект диалога DoModal функция-член для отображения диалогового окна и управления взаимодействием с ним, пока пользователь не выберет ОК или Отмена.
Это управление DoModal делает диалоговое окно модальным. Для модальных диалоговых окон DoModal загружает ресурс диалога.
Step 1 - Чтобы отобразить диалоговое окно как модальное, в событии CExample :: InitInstance () вызовите метод DoModal (), используя переменную диалога -
BOOL CExample::InitInstance() {
CExampleDlg myDlg;
m_pMainWnd = &myDlg;
myDlg.DoModal();
return TRUE;
}
Step 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;
Step 3 - Когда приведенный выше код скомпилирован и выполнен, вы увидите следующее диалоговое окно.
Приложения на основе диалогов
Microsoft Visual Studio предоставляет более простой способ создания приложения, в основном основанного на диалоговом окне. Вот шаги для создания базового проекта диалогового окна с использованием шаблонов проектов, доступных в Visual Studio:
Step 1- Откройте Visual Studio и выберите пункт меню File → New → Project. Вы можете увидеть диалоговое окно «Новый проект».
Step 2 - На левой панели выберите «Шаблоны» → «Visual C ++» → «MFC».
Step 3 - На средней панели выберите Приложение MFC.
Step 4- Введите имя проекта «MFCModalDemo» в поле «Имя» и нажмите «ОК», чтобы продолжить. Вы увидите следующее диалоговое окно.
Step 5 - Щелкните Далее.
Step 6 - Выберите параметры, показанные в диалоговом окне выше, и нажмите «Далее».
Step 7 - Отметьте все параметры, которые вы выбираете для своего диалогового окна, например «Развернуть» и «Свернуть поля», и нажмите «Далее».
Step 8 - Щелкните Далее.
Step 9- Он сгенерирует эти два класса. Вы можете изменить название классов и нажать Готово.
Step 10 - Теперь вы можете видеть, что мастер MFC создает это диалоговое окно и файлы проекта по умолчанию.
Step 11 - Когда вы запустите это приложение, вы увидите следующий результат.