Порядок выполнения работы. Постройте простое приложение с диалоговой панелью типа MessageBox или MessageBeep
Постройте простое приложение с диалоговой панелью типа MessageBox или MessageBeep.
Оттранслируйте его, запустите, выполните отладку. Освойте основные приемы работы с отладчиком.
Постройте приложение с главным окном. Добавьте реакцию на нажатие кнопки мыши в окне. Предусмотрите возможность изменения размеров окна и перемещения окна. Выполните отладку программы. Покажите преподавателю.
Постройте диалог с использованием редактора ресурсов. Добавьте в предыдущее приложение вызов созданной диалоговой панели как модального диалога, а также как немодального диалога. Доведите приложение до рабочего состояния.
Вопросы для самопроверки.
Опишите структуру простого Windows-приложения.
Что такое регистрация класса окна? Для чего она выполняется?
Что такое функция окна?
Что скрывается за идентификаторами CALLBACK, WINAPI, HWND, LRESULT, HINSTANCE? Почему введены эти идентификаторы?
Какие Windows-события Вы знаете?
Как отличаются понятия класса окна в Windows и MFC?
Как выполняется диспетчеризация событий?
Как строятся Windows-приложения с главной диалоговой панелью?
Как создать обработчик события?
Как построить диалоговую панель?
Чем отличаются модальные и немодальные панели?
Как вызвать модальную диалоговую панель и немодальную панель?
Приложение II
Структура Windows-приложения с главным окном:
#include <windows.h>
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg,
WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_LBUTTONUP:
{
MessageBox(NULL, "Hello, World","Window",MB_OK);
return TRUE;
}
case WM_DESTROY:
PostQuitMessage(0);
return TRUE;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR d3, int nCmdShow)
{
MSG msg;
HWND hwnd;
WNDCLASS wndClass;
memset(&wndClass, 0, sizeof(wndClass));
wndClass.style = CS_HREDRAW | CS_VREDRAW;
wndClass.lpfnWndProc = WndProc;
wndClass.hInstance = hInstance;
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wndClass.lpszClassName = "Simple";
if (!RegisterClass(&wndClass)) return FALSE;
hwnd = CreateWindow("Simple", "Простое приложение",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while (GetMessage(&msg, NULL, 0, 0))
DispatchMessage(&msg);
return msg.wParam;
}
Структура Windows-приложения с главным диалоговым окном:
#include <windows.h>
#include "resource.h"
HINSTANCE hInst;
BOOL CALLBACK DlgProc(HWND hwnd, UINT uMsg,
WPARAM wParam, LPARAM lParam)
{
UINT wId;
switch(uMsg)
{
case WM_INITDIALOG:
LoadIcon( hInst, IDI_HAND);
return TRUE;
case WM_COMMAND:
{
wId = LOWORD(wParam);
switch (wId)
{
case IDOK:
case IDCANCEL:
EndDialog(hwnd,0);
return TRUE;
}
}
break;
}
return FALSE;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE d2,
LPSTR d3, int d4)
{
DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG1),0,(DLGPROC)DlgProc);
return 0;
}
Лабораторная работа №2.
Программирование для Windows. Использование MFC. Создание простых Windows-приложений.
Цель работы.
Освоить основные приемы работы с AppWizard;
Освоить основные приемы работы с редактором ресурсов;
Освоить основные приемы работы с ClassWizard.
Теоретические сведения.
Создание приложения на Visual C++ в студии разработчика
Студия разработчика фирмы Microsoft (Microsoft Developer Studio) - это интегрированная среда для разработки, позволяющая функционировать различным средам разработки, одна из которых Visual C++, другая - Visual J++. В дальнейшем будет идти речь только о среде разработки Visual C++. В студии разработчика можно строить обычные программы на C и С++, создавать статические и динамические библиотеки, но основным режимом работы является создание Windows-приложений с помощью инструмента AppWizard (Application Wizard - мастер приложений) и библиотеки базовых классов MFC (Microsoft Foundation Class Library). Такие приложения называются MFC AppWizard-приложениями. Главная особенность этих Windows-приложений состоит в том, что они работают как совокупность взаимодействующих объектов, классы которых определены библиотекой MFC.
Такой подход к использованию идей объектно-ориентированного программирования до последнего времени не был широко распространен. Обычно классы использовали как расширение понятия "тип данных", а библиотеку классов рассматривали как набор таких типов данных. Теперь же объектный подход перенесен на создание самого приложения. Основа такого способа построения приложений - библиотека MFC.
Библиотека MFC
Главная часть библиотеки MFC состоит из классов, используемых для построения компонентов приложения. С каждым MFC AppWizard-приложением связывается определяющий его на верхнем уровне объект theApp, принадлежащий классу, производному от CWinApp.
Как правило, структура приложения определяется архитектурой Document-View (документ-облик). Это означает, что приложение состоит из одного или нескольких документов - объектов, классы которых являются производными от класса CDocument (класс "документ"). С каждым из документов связаны один или несколько видов - объектов классов, производных от CView и определяющих представление документа.
Класс CFrameWnd ("окна-рамки") и производные от него определяют окна-рамки на дисплее. Элементы управления, создаваемые при проектировании интерфейса пользователя, принадлежат семейству классов элементов управления. Появляющиеся в процессе работы приложения диалоговые окна - это объекты классов, производных от CDialog.
Классы CView, CFrameWnd, CDialog и все классы элементов управления наследуют свойства и поведение своего базового класса CWnd ("окно"), определяющего по существу Windows-окно. Этот класс в свою очередь вместе с классом CDocument является наследником базового класса CObject ("объект").
Одна из трудностей в понимании принципов устройства MFC AppWizard-приложения, заключается в том, что объекты, из которых оно строится, наследуют свойства и поведение всех своих предков, поэтому необходимо знать базовые классы.