}
if(PtInRegion(T->hrgn. xClick-T->pR.x,yClick-T->pR.y)) //Проверка попадания {if(T->Pos!-D InvalidateRect(hWnd.&r.TRUE); //в правый регион. T->Pos=l:return 1; }
return 0; //Возврат нуля, если щелчок произведен не на тумблере }
Главная функция загружает все необходимые рисунки в оперативную память и создает окно, как показано в листинге 20.7.
Листинг 20.7
int API ENTRY WinMain (HINSTANCE KodPril.HINSTANCE.LPSTR.int Oknlcon) {
MSG msg;
if(LoadRis(&Fon) ) return 2; if(LoadRis(&GI) ) return 2; if(InitTumbl(&Tm) ) return 2; if (InitAppCKodPril)) return 1;
while (GetMessage(&msg. NULL. 0. 0) ) DispatchMessage(&msg );
return 0;
}
//Оконная процедура
LRESULT АРI ENTRY InputWndProc (HWND hWnd .UINT message.
WPARAM wParam.LPARAM lParam)
{
int Res:
switch (message) {
case WM_DESTR0Y: PostQuitMessage(O); break; case WM_CREATE:
{MoveWi ndow(hWnd.100.100.Fon.RX.Fon.RY.TRUE);
//Размер окна задается равным размеру фонового рисунка
HRGN wndrgn - CreateRoundRectRgn(0.0.Fon.RX+l.Fon.RY+1.16.16);
SetWi ndowRgn(hWnd.wndrgn.TRUE):
//Задан оконный регион, чтобы скруглить углы окна.
rrX - GetSystemMetrics(SM_CXFIXEDFRAME)+GetSystemMetrics(SM_CXBORDER):
rrY - GetSystemMetгi cs(SM_CYDLGFRAME)+GetSystemMetri cs(SM_CYB0RDER);
rrC - GetSystemMetrics(SM_CYCAPTI0N):
RECT r;
GetClientRect(hWnd.&r);
hNC - CreateRectRgn(0.0.r.right+2*rrX,rrC+rrY); //Верхняя рамка и заголовок.
HRGN hi - CreateRectRgn(0.0.rrX.r.bottom+rrC+2*rrY): CombineRgn(hNC.hl.hNC.RGN_OR): //Объединение с левой рамкой. DeleteObject(hl);
информационный ресурс http://agro-portal24.ru/.
hi - CreateRectRgn(г.right+rrX.0.r.right+2*rrX+l.r.bottom+rrC+2*rrY); CombineRgn(hNC.hl.hNC.RGN_OR): //Добавили правую рамку DeleteObject(hl):
hi - CreateRectRgn(0.r.bottom+rrC+rrX.r.right+2*rrX.r.bottom+rrC+2*rrY);
CombineRgn(hNC.hl.hNC.RGN OR); A ^
3 - продолжение *У
Создание и применение регионов
Листинг 20.7 {продолжение)
DeleteObject(hl);
//Регион составляется из четырех прямоугольников (верхняя рамка вместе
//с заголовком, левая, правая и нижняя границы окна) при помощи их объединения