Kicsit meglepő, mert mostanában nagyon nem ment...
Biztos sokan láttatok már olyan programot, aminek nem szokványos alakja, kinézete volt. Konkrétan a formájára gondolok. Itt van pl. a bsPlayer, vagy régebben a crackelt játékok mellett volt ilyen kis ablak, ki törte fel, vagy pár demo inditóképernyője.
Szerintem magamon kivül senki sem érti, mit is magyarázok. 
if(érted && kiváncsivagyahowtora) olvasstovább; else klikkazxre; 
Szóval, azt szeretném megmutatni, hogyan is lehet is pofás win ablakot létrehozni.
Gondolom, a CreateWindow(Ex)-ig mindenki eljutott már. Ha már van egy működő (egyelőre átlagos) ablakunk, akkor a következő lépésként létre kell hozzunk egy "régiót", ami az ablak területét irja le.
HRGN ghRgn;
ghRgn = CreateRectRgn(0, 0, w, h);
paraméterként két koordinátát vár, x,y és x1,y1. A terület méretei.
Ezután betöltünk egy bmp képet (vagy ami akarunk), egy tömbben tárolva az rgb adatokat. Ezután nincs mit tenni, végigmegyünk a tömbbön, és ahol rgb a megfelelő értékű (értsd, ahol átlátszó a kép, ergo ha a fehér az átlátszó, akkor r = g = b = 0) ott a területünk is átlátszó:
HRGN temp = CreateRectRgn(x, y, x+1, y+1);
CombineRgn(ghRgn, ghRgn, temp, RGN_XOR);
DeleteObject(temp);
Ebben a CreateRectRgn-ben x és y ciklus számlálok, vagyis a képünk x, y paramétere. Kombinálva az eredeti (teljes) területtel végül megkapjuk a kivánt alakot:
(persze, ez a már a ciklus után van)
SetWindowRgn(ghWnd, ghRgn, true);
ghWnd az ablakunk érvényes kezelője!
A törlésnél ne feledkezzünk meg a régió törléséről sem
DeleteObject(ghRgn);
Ez a kód csak az alakot olvassa ki a bmp-ből, tehát nem fog a bmp megjelenni az ablakunkra húzva, arról magunk kell gondoskonunk (BitBlt pl.).
Ha nem képből akarunk extrém kinézeteket létrehozni, biztosit a winAPI pár függvényt, pl. kör alakú forma létrehozásához is (CreateXYRgn függvények).
Az eredmény:
