如何用位图填充多边形区域 我想使用位图填充一个不规则的多边形区域,怎样做呢?qq"16976440 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.CDC::FillRgn(CRgn* pRgn, CBrush* pBrush)2.CDC::PlgBlt(LPPOINT lpPoint, CDC* pSrcDC, int xSrc, int ySrc, int nWidth, int nHeight, CBitmap& maskBitmap, int xMask, int yMask) CBrush NewBrush,*pOldBrush; LOGBRUSH lb; BOOL bResult=0; CBitmap *pBitmap; switch(m_pFillStyle) { case 0://挖空,不填充 lb.lbStyle=BS_NULL; lb.lbColor=m_pFillColor; lb.lbHatch=HS_CROSS; NewBrush.CreateBrushIndirect(&lb); break; case 1://实体填充,颜色 lb.lbStyle=BS_SOLID; lb.lbColor=m_pFillColor; lb.lbHatch=HS_CROSS; NewBrush.CreateBrushIndirect(&lb); break; case 2://图形填充 pBitmap=new CBitmap(); bResult=pBitmap->LoadBitmap(IDB_BITMAP1); NewBrush.CreatePatternBrush(pBitmap); break; case 3://斜线填充 lb.lbStyle=BS_HATCHED; lb.lbHatch=HS_CROSS; lb.lbColor=m_pFillColor; NewBrush.CreateBrushIndirect(&lb); break; } pOldBrush=pDC->SelectObject(&NewBrush); //选择新的画笔画刷 pOldPen=pDC->SelectObject(&NewPen); pDC->Polygon(m_pPoints,m_pNum); //画多边形 pDC->SelectObject(pOldPen); //恢复画笔,画刷 pDC->SelectObject(pOldBrush); if (bResult!=0) delete pBitmap; NewBrush.DeleteObject(); 1.生成RGN HRGN cr; BeginPath(hDC); MoveToEx(hDC, 0, 0, NULL); LineTo(hDC, 64, 0); LineTo(hDC, 64, 16); LineTo(hDC, 48, 32); LineTo(hDC, 0, 32); LineTo(hDC, 0, 0); EndPath(hDC); cr = CreateRectRgn(0, 0, 63, 63); cr = PathToRegion(hDC);.... DeleteObject(cr);生成CBitmap就不用我说了吧 CBrush NewBrush,*pOldBrush; LOGBRUSH lb; BOOL bResult=0; CBitmap *pBitmap; switch(m_pFillStyle) { case 0://挖空,不填充 lb.lbStyle=BS_NULL; lb.lbColor=m_pFillColor; lb.lbHatch=HS_CROSS; NewBrush.CreateBrushIndirect(&lb); break; case 1://实体填充,颜色 lb.lbStyle=BS_SOLID; lb.lbColor=m_pFillColor; lb.lbHatch=HS_CROSS; NewBrush.CreateBrushIndirect(&lb); break; case 2://图形填充 pBitmap=new CBitmap(); bResult=pBitmap->LoadBitmap(IDB_BITMAP1); NewBrush.CreatePatternBrush(pBitmap); break; case 3://斜线填充 lb.lbStyle=BS_HATCHED; lb.lbHatch=HS_CROSS; lb.lbColor=m_pFillColor; NewBrush.CreateBrushIndirect(&lb); break; } pOldBrush=pDC->SelectObject(&NewBrush); //选择新的画笔画刷 pOldPen=pDC->SelectObject(&NewPen); pDC->Polygon(m_pPoints,m_pNum); //画多边形 pDC->SelectObject(pOldPen); //恢复画笔,画刷 pDC->SelectObject(pOldBrush); if (bResult!=0) delete pBitmap; NewBrush.DeleteObject(); 好人做到底:CBitmap bmp;bmp.LoadBitmap(IDB_TEST);CBrush br;br.CreatePatternBrush(CBitmap::FromHandle(bmp));........::DeleteObject(br);::DeleteObject(bmp); int nSaveDC=dc.SaveDC();1.建立你的区域2.SelectClipRgn( CRgn* pRgn );然后就可以画你的位图了,只显示区域内图像的dc.RestoreDC(nSaveDC); spwnihao(海盗) 的方法真的好!谢谢海盗!!!!robothn(雷鸟)的也可以,雷鸟兄,你回答我的自画listbox,listview的滚动条的问题,你尝试过吗,我以前尝试过,好象不好用. 如何让应用程序以管理员身份进行安装执行 VC代码实现 mfc连接sql2005的2个问题 请问如何通过句柄修改其他程序控件的背景颜色? 如何实现Braille盲文和英文的相互转换? MFC的文件操作 求 拖拉机 的源代码 100 分相送 请问如何修改配置是动态链接的exe改为静态链接? 程序怎么自动打开控制面板中的某项 CMutex有何作用? Windows 7 DirectWrite 接口能否渲染RTF格式文本吗? 哪里有串口通讯的程序 如何隐藏程序
CDC::FillRgn(CRgn* pRgn, CBrush* pBrush)2.CDC::PlgBlt(LPPOINT lpPoint, CDC* pSrcDC, int xSrc, int ySrc,
int nWidth, int nHeight, CBitmap& maskBitmap, int xMask, int yMask)
LOGBRUSH lb;
BOOL bResult=0;
CBitmap *pBitmap;
switch(m_pFillStyle)
{
case 0://挖空,不填充
lb.lbStyle=BS_NULL;
lb.lbColor=m_pFillColor;
lb.lbHatch=HS_CROSS;
NewBrush.CreateBrushIndirect(&lb);
break;
case 1://实体填充,颜色
lb.lbStyle=BS_SOLID;
lb.lbColor=m_pFillColor;
lb.lbHatch=HS_CROSS;
NewBrush.CreateBrushIndirect(&lb);
break;
case 2://图形填充
pBitmap=new CBitmap();
bResult=pBitmap->LoadBitmap(IDB_BITMAP1);
NewBrush.CreatePatternBrush(pBitmap);
break;
case 3://斜线填充
lb.lbStyle=BS_HATCHED;
lb.lbHatch=HS_CROSS;
lb.lbColor=m_pFillColor;
NewBrush.CreateBrushIndirect(&lb);
break;
}
pOldBrush=pDC->SelectObject(&NewBrush); //选择新的画笔画刷
pOldPen=pDC->SelectObject(&NewPen);
pDC->Polygon(m_pPoints,m_pNum); //画多边形
pDC->SelectObject(pOldPen); //恢复画笔,画刷
pDC->SelectObject(pOldBrush);
if (bResult!=0)
delete pBitmap;
NewBrush.DeleteObject();
HRGN cr; BeginPath(hDC);
MoveToEx(hDC, 0, 0, NULL);
LineTo(hDC, 64, 0);
LineTo(hDC, 64, 16);
LineTo(hDC, 48, 32);
LineTo(hDC, 0, 32);
LineTo(hDC, 0, 0);
EndPath(hDC);
cr = CreateRectRgn(0, 0, 63, 63);
cr = PathToRegion(hDC);
....
DeleteObject(cr);
生成CBitmap就不用我说了吧
LOGBRUSH lb;
BOOL bResult=0;
CBitmap *pBitmap;
switch(m_pFillStyle)
{
case 0://挖空,不填充
lb.lbStyle=BS_NULL;
lb.lbColor=m_pFillColor;
lb.lbHatch=HS_CROSS;
NewBrush.CreateBrushIndirect(&lb);
break;
case 1://实体填充,颜色
lb.lbStyle=BS_SOLID;
lb.lbColor=m_pFillColor;
lb.lbHatch=HS_CROSS;
NewBrush.CreateBrushIndirect(&lb);
break;
case 2://图形填充
pBitmap=new CBitmap();
bResult=pBitmap->LoadBitmap(IDB_BITMAP1);
NewBrush.CreatePatternBrush(pBitmap);
break;
case 3://斜线填充
lb.lbStyle=BS_HATCHED;
lb.lbHatch=HS_CROSS;
lb.lbColor=m_pFillColor;
NewBrush.CreateBrushIndirect(&lb);
break;
}
pOldBrush=pDC->SelectObject(&NewBrush); //选择新的画笔画刷
pOldPen=pDC->SelectObject(&NewPen);
pDC->Polygon(m_pPoints,m_pNum); //画多边形
pDC->SelectObject(pOldPen); //恢复画笔,画刷
pDC->SelectObject(pOldBrush);
if (bResult!=0)
delete pBitmap;
NewBrush.DeleteObject();
CBitmap bmp;
bmp.LoadBitmap(IDB_TEST);
CBrush br;
br.CreatePatternBrush(CBitmap::FromHandle(bmp));
........
::DeleteObject(br);
::DeleteObject(bmp);
1.建立你的区域
2.SelectClipRgn( CRgn* pRgn );
然后就可以画你的位图了,只显示区域内图像的
dc.RestoreDC(nSaveDC);