Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
.docx
Скачиваний:
8
Добавлен:
30.10.2018
Размер:
824.42 Кб
Скачать

3.Створити програму у Windows (Win32 api), яка виводе одне (головне) вікно.

Для создания окна вызывается функция CreateWindow, прототип которой следующий:

HWNDCreateWindow (

LPCTSTRlpClassName, – имязарегестрированногокласса

LPCTSTRlpWindowName, – имяокна

DWORDdwStyle, – стиль окна

intx, – горизонтальная позиция

inty, – вертикальная позиция

intnWidth, – ширина окна

intnHeight, – высота окна

HWNDhWndParent, – дескриптор родительского окна

HMENUhMenu, – дескриптор меню окна или идентификатор элемента управления

HINSTANCEhInstance, – дескриптор экземпляра приложения

LPVOIDlParam – указатель на данные, передаваемые в сообщении WM_CREATE

);

Сама программа:

#include <windows.h>

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

//-----------------------------------------------------------------------------------------------

int WINAPI WinMain(HINSTANCE hInstance. HINSTANCE hPrevInstance, LPSTR lpCmdLine, intnCmdShow)

{

HWND hMainWnd;

charszClassName[] = "MyClass";

MSGmsg;

WNOCLASSEXwc;

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

wc.cbSize = sizeof(wc);

wc.Style = CSJREDRAW | CSJ/REDRAW;

wc.1pfnWndProc = WndProc:

wc.cbClsExtra = 0;

wc.cbWndExtra = 0;

wc.hlnstance = hlnstance;

wc.hlcon = LoadICOn(NULL. IDI_APPLICATION);

wc.hCursor = LoadCursor(NULL, IDC_ARR0W):

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

wc.lpszMenuName = NULL;

wc.lpszClassName = szClassName;

wc.hlconSm = LoadIcon(NULL, IDI_APPLICATION);

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

if (!RegisterClassEx(&wc)) {

MessageBoxCNULL, "Cannot register class", "Error", MB_0K);

return 0;

}

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

hMainWnd = CreateWindow(

szClassName, "Hello", 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_0K);

return 0;

}

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

ShowWindow(hMainWnd, nCmdShow);

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

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

TranslateMessage(Smsg);

DispatchMessage(&msg);

}

returnmsg.wParam;

}

//=============„======!===„==========================================

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

{

HDC hDC;

PAINTSTRUCT ps;

RECT rect;

switch (uMsg)

{

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);

break;

case WM_CLOSE:

DestroyWindow(hWnd);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

returnDefWindowProc(hWnd, uMsg, wParam, lParam);

}

return 0;

}

4. Обмін інформацією між процесами та потоками. Обмін повідомленнями.

Посылка сообщения в другой процесс осуществляется вызовом функции SendMessage(),в числе параметров которого указывается дескриптор окна, которому посылаетсяданное сообщение, код сообщения и соответствующие конкретному сообщению параметры. Внутри разрабатываемого приложения не составляет труда сохранить дескрипторы всех созданных окон; дескрипторы окон других процессов мы, конечно, не знаем. Однако для их определения предусмотрена функция WindowsFindWindow() со следующим

прототипом:

HWND FindWindow(

LPCTSTR lpClassName,//Имя класса искомого окна

LPCTSTR lpWindowName//Заголовок искомого окна

) ;

Таким образом, получить дескриптор окна активного приложения Windows не составляет труда - надо лишь знать имя класса этого окна или его заголовок. Если функцияFindWindow() находит среди активных окон'искомое, она возвращает значение дескриптора этого окна; если окно не найдено, возвращается FALSE.

Получив дескриптор окна приложения, с которым мы хотим установить связь, можнопосылать в него любые сообщения, имеющие для приложения-приемника смысл (т. е. такие, которые в нем обрабатываются, хотя бы и по умолчанию). Разумеется, посылка сообщения в приложение подразумевает, что в приложении-приемнике существует очередьсообщений и цикл обработки сообщений, т. е. что оно является интерфейсным.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]