Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні роботи з ОС (win32API).doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
195 Кб
Скачать
☆

2.Описати документацію на типи даних, структури та функції win32 api, які використовуються в програмі.

3.За завданням викладача розробити власний проект на основі існуючого.

Послідовність виконання:

1 Створюємо додаток: File/New/Application

2 Добавте кнопку на форму Form1.

3 Добавляємо нову форму: File/New/Form

4 Добавте кнопку на форму Form2.

5 У файл Unit1.cpp дописуємо код:

#include "Unit2.cpp"

6 У конструктор форми TForm1::TForm1 вставте:

Form2=new TForm2(Application);

7 У реалізацію методу TForm1::Button1Click вставте:

Form2->ShowModal();

8 У реалізацію методу TForm2::Button1Click вставте:

Form2->Close();

9 Зберігаємо усе: File/Save All

10 Компілюємо: Run.

Створення модальних форм розміщених у dll

Послідовність виконання:

1 File/New/Other/DLL Wizard

2 Source Type: C++, Use VCL, Ok

3 Добавляємо нову форму: File/New/Form

4 Добавляємо новий заголовочний файл File/New/Other/Header File і зберігаємо його під іменем Unit1.h, дописуємо у нього код:

extern "C" void __declspec(dllexport)ShowMyForm(void);

5 У файл Unit1.cpp дописуємо код:

#include "Unit1.h"

#include "Unit2.h"

6 Добавляємо у файл Unit1.cpp функцію:

void ShowMyForm(void)

{

Form2 = new TForm2(NULL);

Form2->ShowModal();

delete Form2;

}

7 Зберігаємо усе: File/Save All.

8 Компілюємо: Project/Build Project1.

Створюємо програму, яка динамічно використовує DLL:

9 Створюємо додаток: File/New/Application

10 Добавте кнопку на форму.

11 У розділ private класу форми TForm1 вставте код:

HINSTANCE Dll;

12 У конструктор форми TForm1::TForm1 вставте код:

Dll = NULL;

13 У реалізацію методу TForm1::Button1Click вставте код:

typedef void __declspec(dllimport)SHOWMYFORM(void);

SHOWMYFORM *ShowMyForm;

Dll = LoadLibrary("Project1.dll");

ShowMyForm = (SHOWMYFORM *)GetProcAddress(Dll, "_ShowMyForm");

ShowMyForm();

FreeLibrary(Dll);

14 Зберігаємо: File/Project As... Називаємо модуль Unit3, а проект Project2.

15 Компілюємо: Run.

Створюємо програму, яка статично використовує DLL:

9 Створюємо додаток: File/New/Application

10 Добавте кнопку на форму.

11 Добавте до проекту бібліотеку Project1.lib

12 У файл модуля дописуємо код:

#include "Unit1.h"

13 У реалізацію методу TForm1::Button1Click вставте код:

ShowMyForm();

14 Зберігаємо: File/Project As... Називаємо модуль Unit4, а проект Project3.

15 Компілюємо: Run.

Лабораторна робота 7 Тема: Взаємодія з користувачем в Windows xp

Завдання:

1.Дослідити роботу програми.

2.Описати документацію на типи даних, структури та функції win32 api, які використовуються в програмі.

3.За завданням викладача розробити власний проект на основі існуючого. Основи створення gui в Win32api

// Hello1.cpp

#include <windows.h>

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

///////////////////////////////////////////////////////////////////////////////////////////////

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

{

HWND hMainWnd;

char szClassName[] = "MyClass";

MSG msg;

WNDCLASSEX wc;

// Заполняем структуру класса окна

wc.cbSize = sizeof(wc);

wc.style = CS_HREDRAW | CS_VREDRAW;

wc.lpfnWndProc = WndProc;

wc.cbClsExtra = 0;

wc.cbWndExtra = 0;

wc.hInstance = hInstance;

wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);

wc.hCursor = LoadCursor(NULL, IDC_ARROW);

wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);

wc.lpszMenuName = NULL;

wc.lpszClassName = szClassName;

wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

// Регистрируем класс окна

if (!RegisterClassEx(&wc)) {

MessageBox(NULL, "Cannot register class", "Error", MB_OK);

return 0;

}

// Создаем основное окно приложения

hMainWnd = CreateWindow(

szClassName, "A Hello1 Application", WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,

(HWND)NULL, (HMENU)NULL,

(HINSTANCE)hInstance, NULL

);

if (!hMainWnd) {

MessageBox(NULL, "Cannot create main window", "Error", MB_OK);

return 0;

}

// Показываем наше окно

ShowWindow(hMainWnd, nCmdShow);

// UpdateWindow(hMainWnd);

// Выполняем цикл обработки сообщений до закрытия приложения

while (GetMessage(&msg, NULL, 0, 0)) {

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

///////////////////////////////////////////////////////////////////////////////////////////////

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)

{

HDC hDC;

PAINTSTRUCT ps;

RECT rect;

switch (msg)

{

case WM_PAINT:

hDC = BeginPaint(hWnd, &ps);

GetClientRect(hWnd, &rect);

DrawText(hDC, "Hello, World!", -1, &rect,

DT_SINGLELINE | DT_CENTER | DT_VCENTER );

EndPaint(hWnd, &ps);

return 0;

case WM_CLOSE:

DestroyWindow(hWnd);

return 0;

case WM_DESTROY:

PostQuitMessage(0);

return 0;

default:

return DefWindowProc(hWnd, msg, wParam, lParam);

}

return 0;

}