怎样创建一个图形窗体(多边形的)? 我看到一个播放器他使用的是图形窗体,他的基类是CStiac 中派生的?请问这样的窗体如何创建呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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);//将创建的区域设定为窗口区域 再看看这个函数,应该可吧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);} 使用CComboBoxEx控件遇到的问题? 帮我看下代码`图为啥闪动啊 怎样获得新开进程名和刚刚关闭的进程名? 求助:tab control控件的Item有5个,如何分两行排列,就是上面放三个,下面放两个 请问怎么样在系统托盘区显示16位色的图标?? 关于消息的问题!!!肯请赐教,谢谢! 求一控件 关于MFC开线程失败和堆栈溢出的问题,求指点,谢谢关注 一个目标定位的问题 大家来看看如何查询某个程序的内存使用情况的方法!!!!!!!经典!!!!!! 很郁闷的问题,有分送 请教如何在 CAsyncSocket中设置发送和接收超时,谢谢
例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);//将创建的区域设定为窗口区域
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);}