VC 불규칙 창 구현

1656 단어 VC
VC에서 불규칙 창을 만드는 것은 매우 간단합니다. HRGN을 만들고 SetWindowRgn을 호출하면 됩니다. 만약에 우리가 원형의 창을 만들려면 다음과 같은 코드만 필요합니다.
CRgn rgn;



rgn.CreateEllipticRgn( 100,100, 200, 200 );



SetWindowRgn((HRGN)rgn, TRUE);


이 문서의 예는 다음과 같은 투명 비트맵 불규칙 윈도우입니다.
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);

}

좋은 웹페이지 즐겨찾기