Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Шаг2. Выбираем «An empty project»Содержание книги
Поиск на нашем сайте Простейшая программа в MFC
Рассмотрим работу с представленными выше классами на примере простейшего приложения с использованием MFC.
Создаем новое приложение: File->New, далее: Шаг1. Win32 Application Шаг2. Выбираем «An empty project»
Создаем файлы следующего содержания:
Листинг 4.
// File “First.h” ///////////////////////////////////////////////////////////////// #include <afxwin.h> // Ядро MFC и стандартные компоненты class CMyMainFrame : public CFrameWnd { public: CMyMainFrame(); protected: //'afx_msg' означает, что функция - // часть системы распределения сообщений MFC afx_msg void OnPaint(); DECLARE_MESSAGE_MAP() }; class CFirstApp : public CWinApp { public: virtual BOOL InitInstance(); }; // File “First.cpp” ///////////////////////////////////////////////////////////////// #include "First.h" CMyMainFrame::CMyMainFrame() { CString s("MFC-приложение"); Create(NULL,s); //Загружает требуемые ресурсы, определяет существующий // класс окна Win32 и создает объект окна Win32. //NULL – вместо ссылки на строку с именем класса окна //(означает предопределенный класс по умолчанию). } void CMyMainFrame::OnPaint() { CPaintDC dc(this); dc.TextOut(0,0,"Hello, world!"); } CFirstApp theApp; BOOL CFirstApp::InitInstance() { m_pMainWnd = new CMyMainFrame(); m_pMainWnd->ShowWindow(m_nCmdShow); //Отображает фрейм окна на экране //m_nCmdShow соответствует параметру nCmdShow, //поступившему от Windows в WinMain m_pMainWnd->UpdateWindow();// обновляет клиентскую область return TRUE; } BEGIN_MESSAGE_MAP(CMyMainFrame,CFrameWnd) ON_WM_PAINT() END_MESSAGE_MAP()
После компиляции простейшего MFC приложения, скорее всего, будут выданы ошибки. Исправляются они в опции проекта: Project->Properties->General->Use of MFC:”Use MFC in a Shared DLL”.
Основное назначение этого примера - в том, что он позволяет нам ознакомиться с принципами построения программ на базе библиотеки классов MFC. Каждое приложение, которое использует библиотеку MFC, может содержать только один объект «приложение», который конструируется в самом начале работы программы, еще до запуска функции WinMain.Последняя скрыта от нас в недрах MFC и не требует никакого внимания с нашей стороны. Для того, чтобы заставить наш объект класса производного от CWinApp, работать, функция WinMain найдет его через глобальную функцию MFC AfxGetApp().
Переопределенная нами функция CWinApp::InitInstance() отвечает за инициализацию каждого нового экземпляра приложения.Именно здесь, как правило, регистрируется и создается «главное окно» приложения (аналогично функциям RegisterMyWindow и InitInstance в рассмотренной выше программе “Hello, World!” под Windows (Листинг 3) и выполняются прочие подготовительные действия приложения.
Кроме того, часто приходится заменять базовый конструктор данного класса и методы, отвечающие за: · внешний вид приложения (включая его курсоры, пиктограммы, фон и т.д.) · получение информации из системного реестра, командной строки и INI-файла · работу приложения в то время, когда очередь его сообщений пуста · взаимодействие документов и их представлений в приложениях SDI и MDI (далее обсудим подробнее)
Объект класса CMyMainFrame представляет основное окно программы. Когда конструктор вызывает функцию-член Create его базового класса CFrameWnd, Windows создает соответствующую оконную структуру, а каркас приложения связывает ее с C++-объектом. Для вывода окна на экран вызываются функции ShowWindow и UpdateWindow из базового класса, аналогичные функциям WinAPI, рассмотренным нами в первом приложении.
Функция OnPaint вызывается каркасом каждый раз по сообщению WM_PAINT. Подробнее механизм связывания сообщений и их функций-обработчиков будет обсуждаться далее.
Переменная типа CPaintDC, используемая в этой функции, представляет собой один из классов-оболочек MFC для контекстов графических устройств Win32. Данный класс особенно удобен тем, что его конструктор автоматически вызывает BeginPaint, а деструктор – соответственно EndPaint, причем если контекст устройства создан на стеке, то вызов EndPaint происходит автоматически.
В будущем в вашем проекте вы не будете непосредственно пользоваться классом CFrameWnd, предназначенным в первую очередь для SDI-приложений. Вместо этого мастер AppWizard автоматически создаст для вас каркас MDI-приложения на основе двух потомков CFrameWnd: главное окно является производным от CMDIFrameWnd, а дочерние фреймы документов являются объектами класса CMDIChildFrame.Подробнее об архитектуре многодокументного приложения мы поговорим в другой раз.
Включенный нами файл "afxwin.h" выполняет роль шлюза в библиотеку MFC. Через него подключаются все остальные файлы заголовков, включая "windows.h". Обычно, например, в случае формирования стандартного проекта MFC-программы с помощью AppWizard, все необходимые для программы библиотеки, в частности, "afxwin.h", объявляются в отдельном файле “stdafx.h”. Это делается для сокращения времени компиляции программы (большие по объему файлы заголовков, собранные здесь, не меняются между компиляциями, и поэтому при создании каркаса приложения AppWizard-ом файлу “stdafx.h” назначается режим предкомпиляции заголовков, чтобы обрабатывать его только раз).
|
||
|
Последнее изменение этой страницы: 2024-06-27; просмотров: 48; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.007 с.) |