Вы находитесь на странице: 1из 5

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное учреждение


высшего образования
«МИРЭА – Российский технологический университет»
РТУ МИРЭА

Институт информационных технологий (ИИТ)


Кафедра инструментального и прикладного программного обеспечения
(ИППО)

ОТЧЁТ ПО ПРАКТИЧЕСКОЙ РАБОТЕ №1


по дисциплине
«Системное ПО»
на тему:
«Простейшее приложение на базе WIN32/64 API»

Выполнил студент группы ИКБО-01-17 Аракелян А.А.

Принял Алпатов А.Н.

Работа выполнена «__»_______202__ г.


(подпись студента)

«Зачтено» «__»_______202__ г. (подпись руководителя)

Москва 2020
Цель практический работы
Изучить основы создания и управления окнами Windows-приложений на
базе WIN32/64 API.
Постановка задачи
Разработать приложение, в котором регистрируются оконные классы,
создаются окна классов в соответствии с вариантом задания.
Вариант – 2 (рис. 1)

Рисунок 1 – вариант для выполнения практической работы


Ход работы
Были изучены теоретические материалы и выполнена практическая
работа. Результат выполнения программы представлен на рисунке 2.
Исходный код представлен в таблице 1.
Рисунок 1 – результат выполнения программы
Таблица 1 – исходный код программы
#include "windows.h"
#include "windowsx.h"

#define MAX_LOADSTRING 99
#define ID_FIRSTCHILD 100
#define ID_SECONDCHILD 101
#define ID_THIRDCHILD 102

#define ID_FIRSTCHILD 100


#define ID_SECONDCHILD 101
#define ID_THIRDCHILD 102

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);


LRESULT CALLBACK ChildProc(HWND, UINT, WPARAM, LPARAM);

HINSTANCE hinst;

int APIENTRY WinMain(HINSTANCE hInstance,


HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS w;
hinst = hInstance;
memset(&w, 0, sizeof(WNDCLASS));
w.style = CS_HREDRAW | CS_VREDRAW;
w.lpfnWndProc = WndProc;
w.hInstance = hInstance;
w.hbrBackground = w.hbrBackground = CreateSolidBrush(RGB(51, 153,
102));
w.lpszClassName = "C Windows";
w.hCursor = LoadCursor(NULL, IDC_ARROW);
RegisterClass(&w);
hwnd = CreateWindow("C Windows", "C Windows",
WS_OVERLAPPEDWINDOW,
200, 200, 780, 450, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wparam,


LPARAM lparam)
{
RECT rcClient, rcWind;
POINT ptDiff;
GetClientRect(hwnd, &rcClient);
GetWindowRect(hwnd, &rcWind);
ptDiff.x = rcWind.right - rcClient.right + 300;
ptDiff.y = rcWind.bottom - rcWind.top+300;

switch (Message)
{
case WM_CREATE: // создание основного окна
WNDCLASS w;
memset(&w, 0, sizeof(WNDCLASS));
w.lpfnWndProc = ChildProc;
w.hInstance = hinst;
w.hbrBackground = w.hbrBackground = CreateSolidBrush(RGB(0,
255, 255));
w.lpszClassName = "ChildOne";
w.hCursor = LoadCursor(NULL, IDC_CROSS);
RegisterClass(&w);
HWND child;
child = CreateWindowEx(0, "ChildOne", (LPCTSTR)NULL,
WS_CHILD | WS_BORDER | WS_VISIBLE, ptDiff.x, 150,
250, 200, hwnd, (HMENU)(int)(ID_FIRSTCHILD + 1),
hinst, NULL);
ShowWindow(child, SW_NORMAL);
UpdateWindow(child);

WNDCLASS w1;
memset(&w1, 0, sizeof(WNDCLASS));
w1.lpfnWndProc = ChildProc;
w1.hInstance = hinst;
w1.hbrBackground = CreateSolidBrush(RGB(51, 102, 255));
w1.lpszClassName = "ChildWTwo";
w1.hCursor = LoadCursor(NULL, IDC_CROSS);
RegisterClass(&w1);
HWND child1;
child1 = CreateWindowEx(0, "ChildWTwo", (LPCTSTR)NULL,
WS_CHILD | WS_BORDER | WS_VISIBLE, 100, 50,
300, 300, hwnd, (HMENU)(int)(ID_FIRSTCHILD + 2),
hinst, NULL);
ShowWindow(child1, SW_NORMAL);
UpdateWindow(child1);

if (Message == WM_DESTROY)
{
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, Message, wparam, lparam);
}

LRESULT CALLBACK ChildProc(HWND hwnd, UINT Message, WPARAM wparam,


LPARAM lparam)
{
if (Message == WM_DESTROY)
{
return 0;
}
return DefWindowProc(hwnd, Message, wparam, lparam);
}

Вывод
В ходе выполнения данной практической работы были изучены основы
создания приложения на C++ с использованием Win API.