Азбука программирования в Win32 API


Азбука программирования в Win32 API - стр. 36


39

/* Show our window */

ShowWindow(hWnd,nCmdShow);

UpdateWindow(hWnd);

/* Beginning of messages cycle */

while(GetMessage(&Msg, NULL, 0, 0))

! TranslatcMessage(&Msg);

DispatchMessage(&Msg);

} return Msg.wParam;

LRESULT CALLBACK DCDemoWndProc (HWND hWnd, UINT Message,

UINT wParam. LONG IParam )

HDC hDC, hCompatibleDC; PAINTSTRUCT PaintStnict; HANDLE hBitmap, hOldBitmap; RECT Rect; BITMAP Bitmap; switch(Messagc)

{

case WM_PATNT: // Получаем контекст устройства.

hDC = BeginPaint(hWnd, &PaintStruct);

// Загружаем bitmap, который будет отображаться в окне , из файла. hBitmap = LoadImage(NULL, "MSDOGS.BMP", IMAGEJ3ITMAP, 0,0,

LR_LOADFROMFILH); // Получаем размерность загруженного bitmap'a.

GetObject(hBitmap, sizeof(BITMAP), &Bitmap); //' Создаем совместимый с контекстом окна контекст в памяти.

hCompatibleDC = CreateCompatibleDC(hDC); // Делаем зафуженный из файла bitmap текущим в совместимом контексте.

hOldBitmap - SelectObject(hCompatiblcDC, hBitmap); // Определяем размер рабочей области окна.

GctClientRect(h\Vnd,&Rect);

// Копируем bitmap с совместимого на основной контекст с масштабированием. SlrctchBlt(hDC, 0, 0, Rect.right, Rect.bottom,

hCompatibleDC, 0, 0, Bitmap.bmWidth, Bitmap.bmHcight, SRCCOPY); // Вновь делаем старый bitmap текущим.

SelcctObject(hCompatibleDC, hOldBitmap); i/ Удаляем загруженный с диска bitmap.

DeleteObject(hBitmap); // Удаляем совместимый контекст.

40

DeleteDC(hCompatibleDC);

// Освобождаем основной контекст, завершая перерисовку рабочей области окна. EndPaint(hWnd,&PaintStruct); return 0;

case WM_DESTROY: PostQuitMessage(O); return 0; } return DefWindowProc(hWnd,Mcssage,wParam, IParam);

Листинг № 2. Программа, осуществляющая отображение bitmap'a с масштабированием.

Результатом работы программы является окно, показанное на рис. 2.

Если читатель набрал программу буква в букву, его при запуске ожи­дает одна неприятность - отобразится точно такое же окно с белым фоном, как и при запуске «Hello, world!» (только без надписи в центре жрана). Дело в том, что в моей программе отображается тот bitmap, который нравится мне и, что более важно, находится на моем компьютере в доступной директории. Предлагаю читателю в тексте программы найти оператор, который начинается с «hBitmap = Loadlmage» и заменить в нем имя моего bitmap'a, «msdogs.bmp», на имя того bitmap'a, который будет отображать программа на читательском компьютере. Не забудьте при ном проверить, чтобы новый bitmap был доступен, т. е. находился бы в директории, доступной через переменную окружения PATH, или в теку­щей директории. Сделали? Теперь попробуйте еще раз запустить про­грамму. Если все выполнено правильно, то bitmap точно впишется в окно, причем можно будет заметить, что он несколько растянут или сжат в обоих направлениях. Попробуйте поизменять размеры окна. Bitmap




Начало  Назад  Вперед



Книжный магазин