Mfc c что это за программа

Создание простого диалогового приложения 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 .

Visual C++. Создание приложения по шаблону MFC Application

Изучаем С++ MFC Часть 1

Рис. 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 (оформление панелей, открытие документов и т.п.).

Visual C++. Создание приложения MFC Applicaiton. Опции по умолчанию

Рис. 2. Опции по умолчанию

В нашем случае выбираем другой вариант, делаем клик на кнопке « Next > «.

Вызовется окно « Application Type «, которое изображено на рисунке 3.

Visual C++. Создание приложения по шаблону MFC Application

Рис. 3. Окно Application Type

Объясним некоторые поля окна.

Тип приложения ( Application Type ):

1. Single Document – поддержка SDI -приложения ( Single Document Interface – интерфейс с единым документом). Это есть интерфейс с единым документом, который разрешает в каждый момент времени иметь открытым только один документ. Например, редактор Notepad (Блокнот).

2. Multiple Documents – поддержка MDI -приложения ( Multiple Document Interface – «многодокументный интерфейс»). В этом случае в приложении может одновременно создаваться (открываться) несколько документов, каждый из которых представляется отдельным файлом. Например, текстовый редактор Microsoft Word старых версий есть приложение типа MDI .

Программирование на С++ / MFC . Часть 1. Калькулятор — начало.

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

Visual C++. Шаблон MFC Application. Выбор оформления фрейма главного окна приложения

Рис. 4. Выбор оформления фрейма (рамки) главного окна приложения

Свойства фрейма « Main frame styles » есть такие:

  1. Thick frame (утолщенная рамка). В этом случае границы окна есть утолщенные.
  2. Minimize box – кнопка минимизации окна.
  3. Maximize box – кнопка максимизации окна.
  4. System menu – системное меню, которое размещается в левому верхнем углу окна.
  5. Minimized – режим, при котором во время запуска окно приложения свертывается в пиктограмму.
  6. Maximized – режим, при котором во время запуска окно приложения разворачивается на весь экран.

Выбор опций можно установить на собственное усмотрение.

В поле Dialog Title устанавливается название приложения.

После установления опций фрейма делаем клик на « Next > «. В результате откроется окно как показано на рисунке 5.

Visual C++. Шаблон MFC Application.

Рис. 5. Окно настройки дополнительных свойств

В окне на рисунке 5 доступны опции настройки дополнительных свойств приложения. Объясним некоторые из них.

  1. Context Sensitive Help (HTML) – контекстная справка. Будет создано меню Help приложения, которое будет иметь опции Index и Using Help .
  2. Active X controls – разрешает включать Active X элементы управления в приложении.
  3. Automation – разрешает приложению выставлять объекты для скриптов и других приложений.
  4. Windows sockets – разрешает приложению иметь непосредственный доступ к Internet через протоколы FTP , HTTP .

Делаем клик на « Next > «. В последнем окне (рис. 6) нужно подтвердить имена классов и имена файлов, которые создает MFC Application Wizard .

Читайте также:
Местоположение по сети что это за программа на Андроид

Visual C++. Шаблон MFC Application. Запрос к подтверждению имен создаваемых классов

Рис. 6. Запрос к подтверждению имен создаваемых классов

Оставляем все как есть и делаем клик на « Finish «. Сформируется программный код классов. Форма приложения будет иметь вид как показано на рис. 7.

C++. MFC Application шаблон. Форма приложения после выполнения мастера App Wizard

Рис. 7. Форма приложения после выполнения мастера App Wizard

Теперь можно запустить приложение на выполнение и проанализировать его работу.

3. Классы, создаваемые в приложении

В результате выполненных действий, будет создано два класса с именами CMFCApplication1App и CMFCApplication1Dlg .

Класс CMFCApplication1App унаследован от CWinApp . Этот класс есть классом приложения в целом.

Класс CMFCApplication1Dlg есть классом диалога для приложения в целом.

После создания приложения в Solution Explorer создаются файлы классов (рис. 8).

Классу CMFCApplication1App соответствуют файлы « MFCApplication1.h » и « MFCApplication1.cpp «.

Классу CMFCApplication1Dlg соответствуют файлы « MFCApplication1Dlg.h » и « MFCApplication1Dlg.cp p».

Visual C++. Шаблон MFC Application. Файлы приложения в Solution Explorer

Рис. 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

Введение в Visual C++. MFC

Визуальное программирование на C++ возможно реализовать без использования разного рода библиотек классов, шаблонов и прочих вспомогательных инструментов. Но тот, кто уже достаточно глубоко проникся изучением этого языка, вероятно в состоянии представить, насколько непростая это задача. Даже, для создания примитивного оконного приложения понадобиться огромное количество времени и усилий. Именно тут-то нам и приходят на помощь визуальные среды разработки, например, такие как Visual C++ или C++ Builder. Они содержат специальные библиотеки классов, которые значительно облегчают процесс написания приложений.

Вероятно, что лучшей интегрированной средой разработки приложений под Windows, является Microsoft Visual C++. Именно этой программой мы и будем пользоваться в дальнейшим. Установочный образ Вы можете скачать на сайте разработчика , впрочем, думаю у вас не возникнет проблем с этой фундаментальной задачей.

Компания Microsoft разработала мощный инструмент для разработки сложных приложений — MFC. MFC (Microsoft Foundation Classes) — библиотека классов языка C++, предназначенная для создания визуальных приложений при помощи встроенных средств. MFC поддерживает современные технологии программирования, благодаря чему программы написанные с ее помощью будут обладать необходимой функциональностью и надежностью. Благодаря ей программист получает шаблонный «скелет» программы, после чего ему остается вписать код в необходимые места.

Читайте также:
360 тотал секьюрити что это за программа отзывы

Итак, теперь стоит поговорить о более грустных вещах. Библиотека MFC достаточно сложна, так как во всю использует возможности языка C++. А это значит, что в «арсенале» начинающего изучать визуальное программирование используя этот «дар» от Microsoft должны присутствовать навыки написания кода на C++. В частности было бы неплохо изучить: рекурсию и перегрузку функций, основы классов, перегрузку операций и наследование. Но для самых отчаянных (тех кто не боится не разобраться что к чему), думаю возможно дуализировать задачи, то есть одновременно изучать как библиотеку MFC, так и базовые понятия C++.

Что касается самой Visual C++, то тут стоит добавить, что эта среда разработки обычно входит в линейку программ под общим названием Visual Studio, но вполне реально приобрести ее в отдельном экземпляре.

Источник: kvodo.ru

47794 (Общая информация про MFC. Иерархия классов MFC. Место MFC в среде разработчика Visual C++)

Документ из архива «Общая информация про MFC. Иерархия классов MFC. Место MFC в среде разработчика Visual C++», который расположен в категории » «. Всё это находится в предмете «информатика» из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе «контрольные работы и аттестации», в предмете «информатика, программирование» в общих файлах.

Онлайн просмотр документа «47794»

Текст из документа «47794»

Общая информация про MFC. Иерархия классов MFC. Место MFC в среде разработчика Visual C++ Иерархия основных классов MFC.

CObject (обеспечивает базовые операции ввода/вывода) →CGDIObject (поддержка графических объектов); CDC (класс, обеспечивающий связь с устройствами); CExeption (обработка исключительных ситуаций в MFC); CFile (базовый класс для обработки файлов); CMenu (поддержка обьектов меню); CCmdTarget (базовый для обработки сообщения)1)→CWnd (базовый класс для окон); СFrameWnd; 2)→CWinThread;CwinApp; Структура простой MFC программы. Программа на MFC содержит, по крайней мере, 2 класса.

И эти классы порождаются от CWnd и CWinThread. Для реализации простой программы сделаем следующую последовательность шагов: 1) Создать класс приложений, порожденный от CWinApp. 2) Создать класс окна, порожденный от CFrameWnd. 3) Для класса приложения объявить функцию InitInstance(). 4) В конструкторе класса окна вызвать функцию Create для создания окна.

5) Объявить глобальный объект приложения. 6) Создать карту сообщения. 7) Подключить заголовочные файлы и определиться с типом объектов.

//App.h class CApp: public CWinApp ; Class CMainWin:public CFrameWnd ; //App.cpp #include #include “App.h” BOOL CApp::InitInstance () CMainWin::CMainWin () CApp App; BEGIN_MESSAGE_MAP (CMainWin, CFrameWnd) END_MESSAGE_MAP ()

MFC — (Microsoft Foundation Class Library) базовая библиотека классов; Иерархия классов MFC. Библиотека MFC содержит большую иерархию классов, написанных на C++.

В ее вершине находится класс CObject, который содержит различные функции, используемые во время выполнения программы и предназначенные, в частности, для предоставления информации о текущем типе во время выполнения, для диагностики, и для сериализации. Информация о типе времени выполнения.

Если указатель или ссылка ссылается на объект, производный от класса CObject, то в этом случае предусмотрен механизм определения реального типа объекта с помощью макроса RUNTIME­ _CLASS(). Хотя в C++ имеется механизм RTTI, механизм, реализованный в MFC, намного более эффективен по производительности. Диагностика.

Каждый класс, производный от CObject, может по запросу проверить свое внутреннее состояние и выдать диагностическую информацию. Это интенсивно используется в MFC при отладке. Сериализации.

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

Некоторые классы порождаются непосредственно от CObject. Наиболее широко используемыми среди них являются CCmdTarget, CFile, CDC, CGDIObject и CMenu. Класс CCmdTarget предназначен для обработки сообщений. Класс CFile предназначен для работы с файлами. Класс CDC обеспечивает поддержку контекстов устройств. Об контекстах устройств мы будем говорить несколько позднее.

В этот класс включены практически все функции графики GDI. CGDIObject является базовым классом для различных DGI-объектов, таких как перья, кисти, шрифты и другие. Класс CMenu предназначен для манипуляций с меню. От класса CCmdTarget порождается очень важный класс CWnd.

Он является базовым для создания всех типов окон, включая масштабируемые («обычные») и диалоговые, а также различные элементы управления. Наиболее широко используемым производным классом является CFrameWnd. Как Вы увидите в дальнейшем, в большинстве программ главное окно создается с помощью именно этого класса.

От класса CCmdTarget, через класс CWinThread, порождается, наверное, единственный из наиболее важных классов, обращение к которому в MFC-программах происходит напрямую: С WinApp. Это один из фундаментальных классов, поскольку предназначен для создания самого приложения. В каждой программе имеется один и только один объект этого класса. Как только он будет создан, приложение начнет выполняться.

Функции-члены в MFC. Большинство функций, вызываемых в MFC-программе, являются членами одного из классов, определенных в библиотеке. Большинство функций API доступны через функции-члены MFC. Тем не менее, всегда можно обращаться к функциям API напрямую. Иногда это бывает необходимым, но все же в большинстве случаев удобнее использовать функции-члены MFC.

Глобальные функции в MFC. В библиотеке есть ряд глобальных функций. Все они начинаются с префикса Afx. (Когда MFC только разрабатывалась, то проект назывался AFX, Application Framework.

После ряда существенных изменений AFX была переработана в MFC, но прежнее название сохранилось во многих идентификаторах библиотеки и в названиях файлов.) Например, очень часто используется функция AfxMessageBox(), отображающая заранее определенное окно сообщения. Но есть и член-функция MessageBox(). Таким образом, часто глобальные функции перекрываются функциями-членами.

Читайте также:
Ярлык программы что это

Файл AFXWIN.H. Все MFC-программы включают заголовочный файл AFXWIN.H. В нем, а также в различных вспомогательных файлах, содержатся описания классов, структур, переменных и других объектов MFC.

Он автоматически подключает большинство заголовочных файлов, относящихся к MFC, в том числе и WINDOWS.H, в котором определены все функции Windows API и другие объекты, которые используются при традиционном программировании на С и «чистом» APL. Каркас MFC-программы.

В простейшем случае программа, написанная с помощью MFC, содержит два класса, порождаемые от классов иерархии библиотеки: класс, предназначенный для создания приложения, и класс, предназначенный для создания окна. Другими словами, для создания минимальной программы необходимо породить один класс от CWinApp, а другой — от CFrameWnd. Эти два класса обязательны для любой программы.

Кроме создания вышеупомянутых классов, в программе также должна быть организована обработка всех сообщений, поступающих от Windows. В данном примере программа еще ничего полезного не делает, поэтому отвечать на каждое сообщение не нужно. MFC обработает все сообщения, которые нас не интересуют.

Тем не менее в этом примере присутствует карта откликов на сообщения, или просто карта сообщений. Позже мы рассмотрим ее подробнее. Для создания стандартного окна в приложении должен наследоваться класс от CFrameWnd. В данном примере он называется CMainWin. Он содержит конструктор и макрос DECLARE_MESSAGE_MAP().

Макрос на самом деле разворачивается в декларацию карты сообщений, которая определяет, какая член-функция класса должна вызываться в ответ на сообщение Windows. Этот макрос применяется для любого окна, в котором обрабатываются сообщения. Он должен быть последним в декларации класса. Само окно создается в конструкторе с помощью вызова функции Create().

Эта функция используется почти во всех приложениях. Она выполняет действия по созданию окна. В этом примере приведен самый простой случай ее использования. Пока нам нужно знать, что второй параметр определяет заголовок окна, а первый чаще всего равен NULL. Класс САрр приложения порождается от CWinApp. Этот класс отвечает за работу программы.

В примере используется член-функция со следующим прототипом: virtual BOOL CWinApp::lnitlnstance(); Это виртуальная функция, которая вызывается каждый раз при запуске программы. В ней должны производиться все действия, связанные с инициализацией приложения. Функция должна возвращать TRUE при успешном завершении и FALSE в противном случае.

В нашем случае, в функции сначала создается объект класса CMainWin, и указатель на него запоминается в переменной m_pMainWnd. Эта переменная является членом класса CWinThread. Она имеет тип CWnd* и используется почти во всех MFC-программах, потому что содержит указатель на главное окно. В последующих двух строчках через нее вызываются функции-члены окна.

Когда окно создано, вызывается функция с прототипом: BOOL CWnd::ShowWindow(int How); Обработка сообщений. Windows взаимодействует с приложением, посылая ему сообщения. Поэтому обработка сообщений является ядром всех приложений. В традиционных приложениях Windows (написанных с использованием только API) каждое сообщение передается в качестве аргументов оконной функции.

Там обычно с помощью большого оператора switch определяется тип сообщения, извлекается информация и производятся нужные действия. Это громоздкая и чреватая ошибками процедура. С помощью MFC все делается намного проще. Здесь мы рассмотрим обработку в программе некоторых наиболее часто используемых сообщений. Обработка сообщений в MFC.

В MFC включен набор предопределенных функций-обработчиков сообщений, которые можно использовать в программе. Если программа содержит такую функцию, то она будет вызываться всякий раз, когда поступает связанное с ней сообщение. При наличии дополнительной информации в сообщении она передается в качестве аргументов функции.

Для организации обработки сообщений нужно выполнить следующие действия: В карту сообщений программы должна быть включена команда соответствующего сообщения. Прототип функции-обработчика должен быть включен в описание класса, ответственного за обработку данного сообщения. В программу должна быть включена реализация функции-обработчика. 2.

Понятие контекста устройства, применение контекстов устройства, обработка сообщений WM_СHAR, WM_PAINT В широком смысле контекст устройства является путем, по которыму Windows-программа, используя соответствующий драйвер, выводит информацию в рабочую область окна. Контекст устройства является структурой, которая полностью определяет состояние этого драйвера и способ вывода информации.

Прежде чем программа начнет выводить информацию в рабочую область окна, она должны получить контекст устройства. Пока это не сделано, нет связи между программой и окном, предназначенным для вывода. В традиционных Windows-программах контекст устройства получают вызовом функции GetDC(), а освобождают с помощью ReleaseDC().

Поскольку Windows может предоставить лишь небольшое количество контекстов, важно, чтобы программа освободила контекст после окончания работы с ним. MFC имеет соответствующие классы, способные руководить этим процессом. В частности, при создании экземпляра объекта типа CClientDC программе предоставляется контекст устройства.

Если этот объект необходимо изъять, вызывается функция ReleaseDC() и контекст устройства автоматически освобождается. Конструктор класса СClientDC записывается в виде: СClientDC (CWnd *Windows); где параметр Windows является указателем на окно, которому предоставляется контекст устройства. Для активного окна можно указать ключевое слово this. Вывод в клиентскую область окна программы может обеспечиваться с помощью функции TextOut(): virtual BOOL CDC::TextOut(int X, int Y, LPCSTR lpszStr, int Length); где X, Y – координаты точки начала вывода в пикселях (относительно левого верхнего угла окна программы), lpszStr – указатель на строку, которая выводится, а Length – его длина. Пример иллюстрирует возможный вариант реализации обработчика нажатия клавиш клавиатуры — в точку (1, 1) окна программы. Пример обработчика нажатия клавиш клавиатуры char str [80]; // строка символов для вывода void CMainWin::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)

Источник: studizba.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru