It is very easy to create an irregular window in VC. It is nothing more than creating an HRGN and then calling setjavaswrgn. For example, to create a original window, you only need the following code:
CRgn rgn;rgn.CreateEllipticRgn( 100,100, 200, 200 );SetWindowRgn((HRGN)rgn, TRUE);
The example in this article is a transparent bitmap irregular window. Its main function is as follows:
void CExampleDlg::SetupRegion(CDC *pDC){ CDC memDC; CBitmap &cBitmap=m_bmpDraw; CBitmap* pOldMemBmp = NULL; COLORREF col,colMask; CRect cRect; int x, y; CRgn wndRgn, rgnTemp; GetWindowRect(&cRect); CPoint ptOrg=cRect.TopLeft(); BITMAP bmInfo; cBitmap.GetObject(sizeof(bmInfo),&bmInfo); CRect rcNewWnd=CRect(ptOrg,CSize(bmInfo.bmWidth,bmInfo.bmHeight)); memDC.CreateCompatibleDC(pDC); pOldMemBmp = memDC.SelectObject(&cBitmap); colMask=memDC.GetPixel(0,0); wndRgn.CreateRectRgn(0, 0, rcNewWnd.Width(), rcNewWnd.Height()); for(x=0; x<=rcNewWnd.Width(); x++) { for(y=0; y<=rcNewWnd.Height(); y++) { col = memDC.GetPixel(x, y); if(col == colMask) { rgnTemp.CreateRectRgn(x, y, x+1, y+1); wndRgn.CombineRgn(&wndRgn, &rgnTemp, RGN_XOR); rgnTemp.DeleteObject(); } } } memDC.SelectObject(pOldMemBmp); SetWindowRgn((HRGN)wndRgn, TRUE);}