求助,C++在MFC中画圆,要求填充的是透明的背景 20
CGraphicDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);if(!pDoc)return;cont=0;CRectrect;Ge...
CGraphicDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
cont=0;
CRect rect;
GetWindowRect(&rect);
int w=rect.Width()/2;
int h=rect.Height()/2;
CPen *pPen=new CPen;
CPen *pOldPn;
pPen->CreatePen(PS_SOLID,5,RGB(0,0,0));
pOldPn=pDC->SelectObject(pPen);
pDC->Ellipse(w,w,h,h);
if(pOldPn)pDC->SelectObject(pOldPn);
pPen->DeleteObject();
这是我的代码,求各位大神帮忙,就是把画出的圆填充为背景,因为我实在位图上画圆,谢谢 展开
ASSERT_VALID(pDoc);
if (!pDoc)
return;
cont=0;
CRect rect;
GetWindowRect(&rect);
int w=rect.Width()/2;
int h=rect.Height()/2;
CPen *pPen=new CPen;
CPen *pOldPn;
pPen->CreatePen(PS_SOLID,5,RGB(0,0,0));
pOldPn=pDC->SelectObject(pPen);
pDC->Ellipse(w,w,h,h);
if(pOldPn)pDC->SelectObject(pOldPn);
pPen->DeleteObject();
这是我的代码,求各位大神帮忙,就是把画出的圆填充为背景,因为我实在位图上画圆,谢谢 展开
展开全部
CClient DC(this);
CBrush *pOldBrush = DC.SelectObject(CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSHL)));
DC.ClientDC.Ellipse(10,10,100,100);
DC.SelectObject(pOldBrush);
其中GetStockObject它是返回一个空的画刷, 但是这个画刷的类型是HGDIOBJECT, 它和HBRUSH不一样, 但是HBRUSH和HGDIOBJECT的关系就像基类和派生类, 但是还不是, 所以不强制类型转换的话就会报错. 因此需要加一个强制类型转换.
转换后的画刷句柄传给CBrush类的一个静态成员函数FromHandle, 它会把句柄变为一个CBrush类的对象, 并返回其指针.
这样就得到了一个空画刷的对象, 然后用CClientDC的成员函数SelectObject把空画刷对象选到设备描述表中, 然后就可以画圆了.
最后还要记得把原始画刷替换回去, 不然会引发一些图像的错误.
CBrush *pOldBrush = DC.SelectObject(CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSHL)));
DC.ClientDC.Ellipse(10,10,100,100);
DC.SelectObject(pOldBrush);
其中GetStockObject它是返回一个空的画刷, 但是这个画刷的类型是HGDIOBJECT, 它和HBRUSH不一样, 但是HBRUSH和HGDIOBJECT的关系就像基类和派生类, 但是还不是, 所以不强制类型转换的话就会报错. 因此需要加一个强制类型转换.
转换后的画刷句柄传给CBrush类的一个静态成员函数FromHandle, 它会把句柄变为一个CBrush类的对象, 并返回其指针.
这样就得到了一个空画刷的对象, 然后用CClientDC的成员函数SelectObject把空画刷对象选到设备描述表中, 然后就可以画圆了.
最后还要记得把原始画刷替换回去, 不然会引发一些图像的错误.
展开全部
CRect rect;
GetWindowRect(&rect);
int w=rect.Width()/2;
int h=rect.Height()/2;
CPen *pPen=new CPen;
CPen *pOldPn;
pPen->CreatePen(PS_SOLID,5,RGB(0,0,0));
pOldPn=pDC->SelectObject(pPen);
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//获取透明画刷
CBrush *pOldBrush=dc.SelectObject(pBrush);//选入设备
pDC->Ellipse(w,w,h,h);//你这里确定能画出来?我记得貌似是外接矩形的左上角和右下角的坐标
if(pOldPn)pDC->SelectObject(pOldPn);
pPen->DeleteObject();
pDC->SelectObject(pOldBrush);
GetWindowRect(&rect);
int w=rect.Width()/2;
int h=rect.Height()/2;
CPen *pPen=new CPen;
CPen *pOldPn;
pPen->CreatePen(PS_SOLID,5,RGB(0,0,0));
pOldPn=pDC->SelectObject(pPen);
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//获取透明画刷
CBrush *pOldBrush=dc.SelectObject(pBrush);//选入设备
pDC->Ellipse(w,w,h,h);//你这里确定能画出来?我记得貌似是外接矩形的左上角和右下角的坐标
if(pOldPn)pDC->SelectObject(pOldPn);
pPen->DeleteObject();
pDC->SelectObject(pOldBrush);
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
CRgn rgn;
rgn.CreateEllipticRgn (xLeft, yTop, xRight, yBottom) ;//参数自己看着改
CBrush brush;
brush.CreateSolidBrush (RGB(0, 0, 0)) ;
pDC->FillRgn (rgn, &brush) ;
rgn.CreateEllipticRgn (xLeft, yTop, xRight, yBottom) ;//参数自己看着改
CBrush brush;
brush.CreateSolidBrush (RGB(0, 0, 0)) ;
pDC->FillRgn (rgn, &brush) ;
更多追问追答
追问
不行啊,这只是画刷而已,不能改为透明啊
追答
搞不懂你要干嘛,要填充,又要透明......到底要透明什么?要填充什么?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询