Подскажите, как создать окно неправильной формы используя
только API.
Prisoner
19-10-2003, 08:50
int SetWindowRgn
(
HWND hWnd, // handle to window whose window region is to be set
HRGN hRgn, // handle to region
BOOL bRedraw // window redraw flag
);
Т.е рисуешь свой регион какой угодно и его handle передаешь функции.
Megabizon
19-10-2003, 10:48
Пример - окно в форме звездочек
int __fastcall Sin(int a, int R)
{
double W=36*3.14159265/180.0;
return R*sin(W*a);
}
int __fastcall Cos(int a, int R)
{
double W=36*3.14159265/180.0;
return R*cos(W*a);
}
HRGN __fastcall GetStarReg(int X, int Y, int R)
{
TPoint P[5];
P[0]=Point(X, Y-R);
P[1]=Point(X-Sin(4, R), Y-Cos(4, R));
P[2]=Point(X-Sin(8, R), Y-Cos(8, R));
P[3]=Point(X-Sin(2, R), Y-Cos(2, R));
P[4]=Point(X-Sin(6, R), Y-Cos(6, R));
return CreatePolygonRgn(P, 5, WINDING);
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
int X=Width/2, Y=Height/2; *
HRGN R1, R2, R; *
R=GetStarReg(X, Y, 100); *
for (int i=1;i<10;i+=2) *
*
{ *
*
R1=GetStarReg(X-Sin(i, 120), Y-Cos(i, 110), 40); *
CombineRgn(R, R, R1, RGN_OR); *
*
} *
*
R1=GetStarReg(X, Y, 30);
CombineRgn(R, R, R1, RGN_DIFF);
R1=CreateEllipticRgn(3, 3, Width-6, Height-6);
R2=CreateEllipticRgn(20, 10, Width-20, Height-10);
CombineRgn(R1, R1,R2, RGN_DIFF);
CombineRgn(R, R, R1, RGN_OR);
SetWindowRgn(Handle, R, TRUE);
}
Дальше, ядумаю, разберешся.
Спасибо за помощь и скажите, кто знает где есть
полное описание API на русском.
Prisoner
20-10-2003, 00:58
http://freesoft.ru/?id=8916
на download.ru есть еще, но за 50 вечнодеревянных (было так, но сейчас кажется занахаляву)- http://www.download.ru/russian/sp/9904.htm
http://www.download.ru/russian/sp/11785.htm
Исправлено: Prisoner, 2:02 20-10-2003
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC