Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_5(слайды)_2012.doc
Скачиваний:
14
Добавлен:
21.08.2019
Размер:
496.13 Кб
Скачать

If (!hWnd)

{

return FALSE;

}

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);

return TRUE;

}

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

{

Int wmId, wmEvent;

TCHAR szHello[MAX_LOADSTRING];

HDC hDC,hCompatibleDC,hDC1,hdcScreen,hdcCompatible;

PAINTSTRUCT PaintStruct;

HANDLE hBitmap,hOldBitmap,hbmScreen,hwnd;

RECT Rect;

BITMAP Bitmap;

LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

switch (message)

{

case WM_COMMAND:

wmId = LOWORD(wParam);

wmEvent = HIWORD(wParam);

// Parse the menu selections:

switch (wmId)

{

case IDM_EXIT:

DestroyWindow(hWnd);

break;

default:

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

}

break;

case WM_CREATE:

hdcScreen = GetDC(NULL);

hdcCompatible = CreateCompatibleDC(hdcScreen);

hbmScreen = CreateCompatibleBitmap(hdcScreen,GetDeviceCaps(hdcScreen, HORZRES),GetDeviceCaps(hdcScreen, VERTRES));

// Выбираем совместимый точеный рисунок в DC.

hOldBitmap=SelectObject(hdcCompatible,hbmScreen);

// копируем цветовые данные для всего дисплея в точечный рисунок,

// который выбирается в совместимый DC.

BitBlt(hdcCompatible,0,0,GetDeviceCaps(hdcScreen,HORZRES),GetDeviceCaps(hdcScreen,VERTRES),hdcScreen,0,0,SRCCOPY);

break;

case WM_PAINT:

hDC1=BeginPaint(hWnd,&PaintStruct);

BitBlt(hDC1,0,0,GetDeviceCaps(hdcScreen, HORZRES),GetDeviceCaps(hdcScreen, VERTRES),hdcCompatible,0,0,SRCCOPY);

EndPaint(hWnd,&PaintStruct);

return 0;

case WM_DESTROY:

SelectObject(hdcCompatible,hOldBitmap);

DeleteObject(hOldBitmap);

DeleteDC(hdcCompatible);

ReleaseDC(NULL, hdcScreen);

PostQuitMessage(0);

break;

default:

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

}

return 0;

}

Задание для самостоятельной работы:

1) Исправить программку, которая приведена в примере 1. Довести приложение до рабочего состояния.

2) Преобразовать программу таким образом, чтобы изображение рабочего окна выводилось в главное окно приложения с масштабированием.

Общие операции с графическими объектами

GDI содержит набор графических объектов, обеспечивающих выполнение графических операций. К графическим объектам в Windows относятся перья, кисти, растровые изображения, палитры, шрифты.

Использование любого графического объекта предполагает выполнение следующей последовательности операций:

  1. Создать графический объект;

  2. Выбрать созданный объект в контекст устройства;

  3. Вызвать графическую функцию, работающую с объектом;

  4. Удалить объект из контекста устройства, вернув предшествующий объект;

  5. Уничтожить объект.

Для создания GDI-объектов предназначены соответствующие функции Create…, которые в случае успешного завершения возвращают дескриптор объекта.

Выбор объекта в контекст устройства осуществляется при помощи функции SelectObject (палитры выбираются с помощью функции SelectPalette). Функция SelectObject имеет следующий прототип:

HGDIOBJ SelectObject (

HDC hdc, – дескриптор контекста устройства

HGDIOBJ hgdiobj – дескриптор GDI-объекта

);

Для корректной работы приложение должно запомнить предшествующий дескриптор и после окончания рисования с новым объектом (шаг 3) вернуть в контекст устройства предшествующий объект (шаг 4).

Для уничтожения объекта вызывается функция DeleteObject.

Рисование точек

Перед рисованием линий необходимо настроить контекст устройства в соответствии с выполняемой операцией, установив нужные значения атрибутов. Назначение атрибутов контекста устройства следующее:

  • Текущее перо (Pen). Определяет вид проводимой линии — толщину, цвет, стиль.

  • Текущая позиция пера (Pen Position).

  • Цвет фона (Background Color).

  • Режим заполнения фона (Background Mode).

  • Режим рисования (Drawing Mode).

  • Направление рисования дуг эллипсов (Arc Direction).

По умолчанию текущая позиция пера установлена в точку (0,0).

Для изменения текущей позиции пера можно воспользоваться функцией:

BOOL MoveToEx( HDC hDC, – дескриптор контекста устройства

int nX, – x координата новой текщей позиции

int nY, – у координата новой текущей позиции

LPPOINT lpPoint – предыдущая позиция пера

);

Функция MoveToEx перемещает текущую точку пера в указанное место, не выполняя рисования.

Для того, чтобы получить значение текущей позиции пера необходимо вызвать функцию:

GetCurrentPositionEx(HDC hDC, POINT &pt).

Результат выполнения функции помещается в переменную pt.

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