我看到一个播放器他使用的是图形窗体,他的基类是CStiac 中派生的?
请问这样的窗体如何创建呢?

解决方案 »

  1.   

    HRGN hRGN=CreateRoundRectRgn(0,0,200,200,20,20);//创建圆角矩形区域2、SetWindowRgn(hRGN,TRUE);//将创建的区域设定为窗口区域
    例2:多个区域叠加(布尔运算)1、HRGN hRGN1=CreateRoundRectRgn(0,0,200,200,20,20);//创建圆角矩形区域2、HRGN hRGN2=CreateRectRgn(10,10,20,20);//创建矩形区域3、HRGN hRGN; CombineRgn(hRGN,hRGN1,hRGN2,RGN_DIFF);   //使用区域1减区域2,生成新区域hRGN(可选的参数有加,减,交等,详见MSDN)4、SetWindowRgn(hRGN,TRUE);//将创建的区域设定为窗口区域 
      

  2.   

    再看看这个函数,应该可吧
    void CTransDlg::SetupRegion(CDC *pDC /*对话框窗口DC*/,                          UINT BackBitmapID /*背景位图资源ID*/,                         UINT MaskBitmapID /*区域处理位图资源ID*/,                         COLORREF TransColor /*透明颜色值*/){      CDC                     memDC;      CBitmap         cBitmap;      CBitmap*              pOldMemBmp = NULL;      COLORREF          cl;      CRect                   cRect;      UINT                    x, y;      CRgn                    wndRgn, rgnTemp;       //取得窗口大小      GetWindowRect(&cRect);       //背景位图资源ID       m_BackBitmapID = BackBitmapID       //装载位图      cBitmap.LoadBitmap(MaskBitmapID);       memDC.CreateCompatibleDC(pDC);      pOldMemBmp = memDC.SelectObject(&cBitmap);      //首先创建默认的完整区域为完整的窗口区域       wndRgn.CreateRectRgn(0, 0, cRect.Width(), cRect.Height());              //下面的两层循环为检查背景位图象素颜色,进行透明区域处理;              //当象素颜色为指定的透明值时,即将该点从区域中剪裁掉。              //其中用到的几个成员变量m_MaskLeftOff、m_MaskTopOff、//m_MaskRightOff、m_MaskBottomOff、m_FrameWidth//和m_CaptionHeight,其作用后面再作说明,此时可全部当作0来处理。      for(x= m_FrameWidth+m_MaskLeftOff;           x<=cRect.Width() - m_FrameWidth-m_MaskRightOff; x++){for(y = m_CaptionHeight+m_MaskTopOff; 
               y<=cRect.Height() - m_FrameWidth-m_MaskBottomOff; y++){                     //取得坐标处象素的颜色值                    cl = memDC.GetPixel(x - m_FrameWidth-m_MaskLeftOff, y - m_CaptionHeight-m_MaskTopOff);                    if(col == TransColor)                    {                            //象素颜色为指定的透明色,创建透明“微区域”                           rgnTemp.CreateRectRgn(x, y, x+1, y+1);                            //“扣像”,从完整的区域中“扣除”透明的“微区域”                           wndRgn.CombineRgn(&wndRgn, &rgnTemp, RGN_XOR);                            //删除刚创建的透明“微区域”,释放系统资源                           rgnTemp.DeleteObject();                           }             }      }      if (pOldMemBmp) memDC.SelectObject(pOldMemBmp);              //用设定窗口为指定的区域      SetWindowRgn((HRGN)wndRgn, TRUE);}