K vytvoření kulatýho wokna tu existuje jedna API funkce,
která se nazývá :
SetWindowRgn(HWND hwnd, HRGN rgn, int bredraw);
Tato funkce nastaví tvar okna na tvar, odpovídající útvaru v
datové struktuře HRGN (region). Ta se dá vytvořit několika
funkcemi, já popíšu jen jména, vyhelpujte si to sami.
CreateEllipticRgn(x, y, w, h); // vytvoří eliptický region o rozměrech w x h na souřadnicích x, y.
Tyto souřadnice se dají zjistit voláním :
RECT rect; // pravoúhelník
int x, y, w, h;
GetWindowRect(hwnd, &rect);
x = rect.left;
y = rect.top;
w = rect.right - rect.left;
h = rect.bottom - rect.top;
|
Ale můžete použít :
CreateEllipticRgnIndirect(&rect);
Která vytvoří region do pravoúhelníka rect. Takže miloučký sample - uděláte si Win32 exe
a za příkaz:
ShowWindow(hwnd, nCmdShow);
|
Doplníte :
RECT rect;
HRGN rgn;
GetWindowRect(hwnd, &rect); // načtení pravoúhelníka
rgn = CreateEllipticRgnIndirect(&rect); // vytvoření elipsy
SetWindowRgn(hwnd, rgn, TRUE); // nastavení regionu, TRUE = překreslit
|
Pokud takovouhle aplikaci zkompilujete, dostanete krásné
šišaťoučké okno ;-)
Potom jsou tu funkce :
- CombineRgn(rgn, rgn, rgn, mod) // kombinace 2 regionů - výřezy, díry ...
- CreatePolygonRgn(POINT *, num, mod) // vytvoří region z pole bodú
- CreateRectangleRgn(x, y, w, h) // vytvoří pravoúhelníkový region
- CreateRectangleRgnIndirect(&rect) // vytvoří pravoúh. region uvnitř rect
Najdete je normálně v indexu pod jejich názvy. Vyberte si API ne CWnd::, nebo CWindow::
Je to fakt nářez :-) !!
-tHE SWINe-