HRGN wndrgn; //Дескриптор региона, задающего форму окна int Bord - 0: //Признаки обновления неклиентской области int Erase - 0: //и стирания фона
//Функция загрузки рисунка и формирования его описания (структуры RIS): int LoadRisCRIS *R) {BITMAP bm;
R->hbm - (HBITMAP)Loadlmage(NULL. R->Name,IMAGE_BITMAP.0.0.LR_LOADFROMFILE); if (R->hbm - NULL) //Выход по ошибке - картинка не загружена
{MessageBox(NULL.R->Name. "Нет картинки.смотри путь".0): return 12:} GetObject(R->hbm. sizeof(BITMAP). &bm); //Заполнение полей R->RY - bm.bmHeight; //описания картинки R->RX - bm.bmWidth/R->KolX;
if (R->xC--1) R->xC - R->RX/2; //Если точка привязки задана числами (-1.-1). if (R->yC-1) R->yC - R->RY/2; //размещаем ее в центре картинки return 0; //Возврат при отсутствии ошибки. }
Функция отображения рисунка уже не раз описывалась. Нужно лишь отметить, что в ней не создается прозрачный фон. Для упрощения функции ShowRi s( ) будем считать, что положение объекта на панели фиксировано и та его часть, что должна быть прозрачной, совпадает с фоновым рисунком окна.
Следует также отметить, что функция ShowRi s ( ) рисует во всем окне, а не в клиентской области и использует оконные координаты, поэтому передаваемый ей
Создание и применение регионов
контекст должен быть получен оператором HDC hdc - GetWi ndowDC (hWnd). Код функции ShowRisC) приведен в листинге 20.4.
Листинг 20.4
int ShowRisCHDC hdc.RIS *R)
{HBITMAP OldBitMap;
R->MemDC - CreateCompatibleDC(hdc):
OldBitMap - (HBITMAP) SelectObject(R->MemDC.R->hbm);
nt Err - BitBltChdc. R->abs_x-R->xC. R->abs_y-R->yC.
R->RX.R->RY.R->MemDC.R->Pos*R->RX.0.SRCCOPY); Sei ectObject(R->MemDC.OldBitMap); DeleteDC(R->MemDC); return 0; }
Этой же функцией можно отображать тумблер, так как она использует при копировании на экран номер Pos видимого элемента рисунка. Но для тумблера при старте приложения надо не только загрузить картинку, но и создать регион. Эти операции выполняются следующей функцией, код которой приведен в листинге 20.5.