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

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

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;

wcex.lpfnWndProc = (WNDPROC)WndProc;

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0;

wcex.hInstance = hInstance;

wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_PRINTSCREEN);

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

wcex.lpszMenuName = (LPCSTR)IDC_PRINTSCREEN;

wcex.lpszClassName = szWindowClass;

wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

return RegisterClassEx(&wcex);

}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HWND hWnd;

hInst = hInstance; // Store instance handle in our global variable

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

if (!hWnd)

{

return FALSE;

}

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);

return TRUE;

}

{

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 относятся перья, кисти, растровые изображения, палитры, шрифты.

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