Порядок выполнения работы. Постройте простое приложение с диалоговой панелью типа 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-приложения, заключается в том, что объекты, из которых оно строится, наследуют свойства и поведение всех своих предков, поэтому необходимо знать базовые классы.

Наши рекомендации