Создание простого диалогового приложения Windows типа Dialog Based Application с использованием библиотеки MFC ( Microsoft Foundation Classes )
Выполнение
1. Загрузить MS Visual Studio.
Подробный пример создания приложения в MS Visual Studio по шаблону Windows Forms описывается здесь .
2. Создание проекта
После загрузки MS Visual Studio надо вызвать команду
File -> New -> Project
В окне, которое откроется (рис. 1), выбрать шаблон C++ а в списке типов проектов выбрать MFC Application .
Имя папки, в которой сохраняется проект, даем, например:
E:ProgramsCPPTrain-03
Имя приложения даем MFCApplication1 . Если установленная опция « Create directory for solution » (создать директорию для решения), то будет создана еще одна поддиректория с именем MFCApplication1 .
Как создать DialogFragment/Диалоговое окно в Android Studio/Kotlin
Рис. 1. Выбор приложения типа « MFC Application «
В результате, вызовется мастер « MFC Application Wizard » (рис. 2). В окне мастера выдается информация о текущих настройках проекта, которые можно оставить без изменений нажатием кнопки « Finish «.
Текущие настройки проекта следующие.
1. Поддержка проектом многих документов – MDI Application ( MDI – Multiple Document Interface ). Это означает, что приложение может одновременно держать открытыми несколько документов, каждый из которых представлен отдельным файлом.
2. Нет поддержки баз данных.
3. Нет поддержки составленных (встроенных) документов (контейнер, мини-сервер, полный сервер документов и т.п.).
4. Внешний вид приложения — поддается настройке (панели инструментов, панели состояния приложения и т.п.).
5. Внешний вид приложения такой как в MS Visual Studio 2008 .
6. Стиль типа проекта как Visual Studio (оформление панелей, открытие документов и т.п.).
Рис. 2. Опции по умолчанию
В нашем случае выбираем другой вариант, делаем клик на кнопке « Next > «.
Вызовется окно « Application Type «, которое изображено на рисунке 3.
Рис. 3. Окно Application Type
Объясним некоторые поля окна.
Тип приложения ( Application Type ):
1. Single Document – поддержка SDI -приложения ( Single Document Interface – интерфейс с единым документом). Это есть интерфейс с единым документом, который разрешает в каждый момент времени иметь открытым только один документ. Например, редактор Notepad (Блокнот).
2. Multiple Documents – поддержка MDI -приложения ( Multiple Document Interface – «многодокументный интерфейс»). В этом случае в приложении может одновременно создаваться (открываться) несколько документов, каждый из которых представляется отдельным файлом. Например, текстовый редактор Microsoft Word старых версий есть приложение типа MDI .
Как создать диалоговую систему в Unity за 5 минут
3. Dialog Based – создание приложения как простого диалогового окна, которое вообще не открывает документов. Например, программа Калькулятор из пакета Windows .
4. Multiple top level documents – поддержка многодокументного интерфейса такая же как в MDI -приложении. Только в этом случае документы группируются в разных окнах в панели задач Windows , а не в границах приложения. Например, новые версии Windows поддерживают этот режим.
В нашем случае нужно выбрать Dialog Based , как показан на рисунке 3.
Поле « Use of MFC: » определяет, как нужно формировать MFC библиотеку. Есть два варианта. Первый вариант « Use MFC in a shared DLL » предлагает, чтобы библиотека MFC была распределенной динамично связываемой библиотекой (shared DLL ). Использование DLL как динамической библиотеки сокращает объем приложения но усложняет установку продукта.
Второй вариант « Use MFC in a static library » предлагает, чтобы библиотека MFC была статически прикомпонованной. При этом варианте получается больший по размерам « .exe » файл, но не будет трудности при сопровождении приложения. В этом случае модули библиотеки прикомпонованы статически, поэтому приложение легко перемещается с одного компьютера на другой.
Для нашего приложения пока что не имеет значения, какой вариант формирования MFC библиотеки выбирать.
После выбора « Next > » откроется окно « User Interface Features «. В этом окне предлагается выбрать оформление фрейма (рамки) главного окна приложения. Фрейм включает в себя системное меню, строку заголовка, кнопки минимизации и максимизации, границы окна и т.п..
Рис. 4. Выбор оформления фрейма (рамки) главного окна приложения
Свойства фрейма « Main frame styles » есть такие:
- Thick frame (утолщенная рамка). В этом случае границы окна есть утолщенные.
- Minimize box – кнопка минимизации окна.
- Maximize box – кнопка максимизации окна.
- System menu – системное меню, которое размещается в левому верхнем углу окна.
- Minimized – режим, при котором во время запуска окно приложения свертывается в пиктограмму.
- Maximized – режим, при котором во время запуска окно приложения разворачивается на весь экран.
Выбор опций можно установить на собственное усмотрение.
В поле Dialog Title устанавливается название приложения.
После установления опций фрейма делаем клик на « Next > «. В результате откроется окно как показано на рисунке 5.
Рис. 5. Окно настройки дополнительных свойств
В окне на рисунке 5 доступны опции настройки дополнительных свойств приложения. Объясним некоторые из них.
- Context Sensitive Help (HTML) – контекстная справка. Будет создано меню Help приложения, которое будет иметь опции Index и Using Help .
- Active X controls – разрешает включать Active X элементы управления в приложении.
- Automation – разрешает приложению выставлять объекты для скриптов и других приложений.
- Windows sockets – разрешает приложению иметь непосредственный доступ к Internet через протоколы FTP , HTTP .
Делаем клик на « Next > «. В последнем окне (рис. 6) нужно подтвердить имена классов и имена файлов, которые создает MFC Application Wizard .
Рис. 6. Запрос к подтверждению имен создаваемых классов
Оставляем все как есть и делаем клик на « Finish «. Сформируется программный код классов. Форма приложения будет иметь вид как показано на рис. 7.
Рис. 7. Форма приложения после выполнения мастера App Wizard
Теперь можно запустить приложение на выполнение и проанализировать его работу.
3. Классы, создаваемые в приложении
В результате выполненных действий, будет создано два класса с именами CMFCApplication1App и CMFCApplication1Dlg .
Класс CMFCApplication1App унаследован от CWinApp . Этот класс есть классом приложения в целом.
Класс CMFCApplication1Dlg есть классом диалога для приложения в целом.
После создания приложения в Solution Explorer создаются файлы классов (рис. 8).
Классу CMFCApplication1App соответствуют файлы « MFCApplication1.h » и « MFCApplication1.cpp «.
Классу CMFCApplication1Dlg соответствуют файлы « MFCApplication1Dlg.h » и « MFCApplication1Dlg.cp p».
Рис. 8. Файлы приложения в Solution Explorer
Листинг файла заголовка «MFCApplication1.h» для приложения следующий:
// MFCApplication1.h : main header file for the PROJECT_NAME application // #pragma once #ifndef __AFXWIN_H__ #error «include ‘stdafx.h’ before including this file for PCH» #endif #include «resource.h» // main symbols // CMFCApplication1App: // See MFCApplication1.cpp for the implementation of this class // class CMFCApplication1App : public CWinApp public: CMFCApplication1App(); // Overrides public: virtual BOOL InitInstance(); // Implementation DECLARE_MESSAGE_MAP() >; extern CMFCApplication1App theApp;
В вышеприведенном листинге между директивой
#ifndef . #endif
реализовано предотвращение повторного использования одинаковых имен файлов заголовков, которые даже могут быть размещены в разных папках.
Далее объявляется класс CMFCApplicationApp который унаследован от класса CWinApp . Класс CWinApp включает в себя большинство функциональных возможностей, необходимых приложению. Мастер AppWizard сгенерировал несколько функций для класса-наследника, которые «перегружают» собственные функции базового класса. В классе перегружается виртуальная функция InitInstance() .
DECLARE_MESSAGE_MAP()
означает, что используется карта сообщений.
Реализация класса CMFCApplication1App приведена в файле « CMFCApplication1App.cpp «.
Листинг файла «CMFCApplication1App.cpp» следующий.
#include «stdafx.h» #include «MFCApplication1.h» #include «MFCApplication1Dlg.h» #ifdef _DEBUG #define new DEBUG_NEW #endif // CMFCApplication1App BEGIN_MESSAGE_MAP(CMFCApplication1App, CWinApp) ON_COMMAND(ID_HELP, // TODO: add construction code here, // Place all significant initialization in InitInstance > // The one and only CMFCApplication1App object CMFCApplication1App theApp; // CMFCApplication1App initialization BOOL CMFCApplication1App::InitInstance() // InitCommonControlsEx() is required on Windows XP if an application // manifest specifies use of ComCtl32.dll version 6 or later to enable // visual styles. Otherwise, any window creation will fail.
INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); // Set this to include all the common control classes you want to use // in your application. InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx( CWinApp::InitInstance(); AfxEnableControlContainer(); // Create the shell manager, in case the dialog contains // any shell tree view or shell list view controls. CShellManager *pShellManager = new CShellManager; // Standard initialization // If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need // Change the registry key under which our settings are stored // TODO: You should modify this string to be something appropriate // such as the name of your company or organization SetRegistryKey(_T(«Local AppWizard-Generated Applications»)); CMFCApplication1Dlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); if (nResponse == IDOK) // TODO: Place code here to handle when the dialog is // dismissed with OK > else if (nResponse == IDCANCEL) // TODO: Place code here to handle when the dialog is // dismissed with Cancel > // Delete the shell manager created above. if (pShellManager != NULL) delete pShellManager; > // Since the dialog has been closed, return FALSE so that we exit the // application, rather than start the application’s message pump. return FALSE; >
В вышеприведенном листинге наибольший интерес представляет функция InitInstance() .
В функции InitInstance() создается окно приложения.
Описывается переменная dlg типа окно приложения.
m_pMainWnd = &dlg;
означает, что данное окно приложения есть главным окном среди всех окон, которые могут быть еще созданы в приложении.
Следующей вызывается функция DoModal() , которая открывает окно приложения. После вызова происходит проверка на значение, которое было возвращено после нажатия на кнопках « OK » или « Cancel «.
Похожие темы
- Создание нового проекта в Delphi.
- Создание приложения типа Windows Forms Application в MS Visual Studio.
- Создание Windows-приложения в Borland C++ Builder.
Источник: www.bestprog.net
Практическое руководство. Создание диалогового окна (C++)
Расположение и размер диалогового окна C++, а также расположение и размер элементов управления в нем измеряются в единицах диалога. При их выборе значения для отдельных элементов управления и диалогового окна отображаются в нижнем правом углу строки состояния Visual Studio.
Инструкции
Редактор диалогов позволяет:
Создание диалогового окна
- В представлении ресурсов щелкните правой кнопкой мыши RC-файл и выберите Добавить ресурс.
- В диалоговом окне Добавление ресурса выберите Диалоговое окно в списке Тип ресурса , а затем нажмите кнопку Создать. Если рядом с типом ресурса Диалоговое окно отображается знак «плюс» (+), это означает, что доступны шаблоны диалоговых окон. Щелкните знак «плюс», чтобы развернуть список шаблонов, выбрать шаблон и нажмите кнопку Создать. Откроется новое диалоговое окно в редакторе диалогов.
Вы также можете открыть существующие диалоговые окна в редакторе диалоговых окон для редактирования.
Создание диалогового окна, из которое пользователь не может выйти
Вы можете создать диалоговое окно среды выполнения, из которое пользователь не может выйти. Такой тип диалогового окна используется для входа в систему, блокирования приложений или документов.
- В области Свойства диалогового окна задайте для свойства Системное меню значение false . Этот параметр отключает системное меню диалогового окна и кнопку Закрыть .
- В форме диалогового окна удалите кнопки Отмена и ОК . Во время выполнения пользователь не может выйти из модального диалогового окна с этими характеристиками.
Чтобы включить тестирование такого типа диалоговых окон, функция тестового диалогового окна определяет, когда нажата клавиша ESC . Esc также называется виртуальным ключом VK_ESCAPE. Независимо от того, как диалоговое окно будет работать во время выполнения, вы можете завершить тестовый режим, нажав клавишу ESC.
Для приложений MFC, чтобы создать диалоговое окно, из которое пользователи не могут выйти, необходимо переопределить поведение OnOK по умолчанию, OnCancel так как даже если удалить связанные кнопки, диалоговое окно по-прежнему можно закрыть, нажав клавишу ВВОД или ESC.
Указание расположения и размера диалогового окна
В окне свойств можно задать свойства, чтобы указать, где диалоговое окно будет отображаться на экране.
- Свойство Boolean Center . Если задать значение True, диалоговое окно всегда будет отображаться в центре экрана. Если для этого свойства задано значение False, можно задать свойства XPos и YPos .
- Свойства XPos и YPos , которые используются для явного определения места отображения диалогового окна на экране. Эти свойства позиции представляют собой значения смещения из левого верхнего угла области просмотра, которая определяется как .
- Свойство Absolute Align, влияющее на позицию. Если задано значение True, координаты находятся относительно экрана. Значение False указывает, что координаты относятся к окну владельца диалогового окна.
Проверка диалогового окна
При разработке диалогового окна можно смоделировать и протестировать его поведение во время выполнения, не компилируя программу. В этом режиме можно выполнять следующие действия:
- вводить текст, выбирать пункты в полях со списками, включать и отключать параметры, выбирать команды;
- тестировать последовательность табуляции;
- проверять группировку элементов управления, например переключателей и флажков;
- тестировать сочетания клавиш, используемые для доступа к элементам управления в диалоговом окне.
Подключения к коду диалогового окна, созданные с помощью мастеров, не включаются в имитацию.
При тестировании диалогового окна его положение обычно определяется относительно главного окна программы. Если для свойства Абсолютное выравнивание диалогового окна задано значение True, диалоговое окно отображается в позиции относительно левого верхнего угла экрана.
- Если редактор диалогов является активным окном, перейдите в меню Формат>тестового диалогового окна.
- Чтобы завершить имитацию, нажмите клавишу ESC или нажмите кнопку Закрыть в тестируемом диалоговом окне.
Источник: learn.microsoft.com
1. 9. Составление диалоговых программ
Диалоговый режим работы программы заключается в диалоге пользователя с программой в соответствии с запрограммированной схемой возможных вариантов. Во время выполнения программы происходит запрос к пользователю ввести дополнительные данные, определяющие дальнейшую работу программы. Приведем пример программы угадывания случайно выбранного числа в интервале от 5 до 16 с пяти попыток.
PROGRAM NUMBER;
Var I, n, n1: integer;
Randomize; N1:= Random(12) + 5;
for i:= 1 to 5 do begin
Write(‘угадайте число от 5 до 16 N=’); readln(N);
IF N<>N1 then begin Writeln(‘не угадал’);
Writeln(‘осталось ‘, 5-i, ‘ попыток’) end
else begin Writeln(‘угадал’); Writeln(‘Нажмите Enter’);
readln; Halt end
end; Writeln(‘Нажмите Enter’); readln;
Определение формулы для «N1» производится по следующему алгоритму. Пусть дано N_Min и N_Max — интервал изменения N1, тогда случайное значение
N1:= Random(A) + B; где B:= N_Min; A:= N_Max — N_Min + 1;
Практическое задание N 1. 17
Составьте диалоговые программы:
1. Угадывания случайно выбранных координат цели в квадрате: по оси «х» от 3 до 7, по оси «у» от -4 до 2 с пяти попыток с сообщением корректировщика, например: уменьшить «Х», увеличить “Y”.
2. Угадывания случайно выбранных координат цели в квадрате: по оси «х» от -10 до 30, по оси «у» от 2 до 28 с восьми попыток с двойным сообщением корректировщика, например: уменьшить «Х», либо: немного уменьшить «Х» (если отклонение от цели меньше 3).
3/4. Выбора пути при наличии на указателе трех, либо четырех вариантов согласно приведенному ниже рисунку. Программа должна пригласить на прогрулку, а в случае согласия предложить на выбор варианты движения и в зависимости от введенного номера выдать сообщение, например: » Бац! Тебя предупреждали!» и т. п.
3
Домой потеряешь
1. 10. Массивы
Массив — упорядоченные данные одного типа. Возможно создание массива, включающего массив другого типа. Массивом часто обозначают характеристики обьектов одного типа, имеющих одинаковые единицы измерения. Массив состоит из элементов, имеющих порядковые номера, т. е. элементы массива упорядоченны.
Таким образом, если обьекты одного типа обозначить именем, например «A», то элементы обьекта будут A[1], A[2] и т. д. В квадратных скобках указан номер элемента. Порядковый номер элемента массива, обычно не несет никакой информации о значении элемента, а показывает расположение элемента среди других. К элементам массива можно обращаться только по их номеру (индексу).
Значения элементам массива присваиваются также как и другим переменным с учетом типа массива. Если элементы массива имеют один индекс, то массив называется одномерным или линейным, либо массив — вектор. Значения элементов одномерного массива обычно выводят на экран или бумагу в виде столбца или строки.
В некоторых случаях удобно элементы массива пронумеровывать двуми независимыми индексами, такие массивы называются двумерными или матрицами. Значения элементов двумерного массива обычно выводят на экран в виде таблицы. Если элементы массива имеют три независимых индекса, то массив называется трехмерным. Значения элементов трехмерного массива обычно выводят на экран в виде набора таблиц.
Источник: studfile.net