
求高手指点!mfc 画图中有关画刷的问题(实心矩形)
初学菜鸟啊,我在弄一个画图程序,想实现鼠标画矩形、椭圆、实心矩形、实心椭圆。如果在case3和case4都加上颜色画刷的话就重复了,还要实现透明画刷,我就完全不懂了。是不...
初学菜鸟啊,我在弄一个画图程序,想实现鼠标画矩形、椭圆、实心矩形、实心椭圆。
如果在case3和case4都加上颜色画刷的话就重复了,还要实现透明画刷,我就完全不懂了。是不是可以用 oldBrush/NewBrush什么的。不知道我表达清楚没。
画矩形和椭圆是要用透明画刷:
CBrush *pBrush=CBrush::FromHandle((HBURSH)GetStockObject(NULL_BRUSH));
dc.SelectObject(pBrush);
实心时:
CBrush brush;
brush.CreateSolidBrush(m_clr);
dc.SelectObject(&brush);
代码:
void CMy5192016View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_nOrginPoint= point;
CView::OnLButtonDown(nFlags, point);
}
void CMy5192016View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
switch(m_nDrawType){
case 1:
dc.Rectangle(CRect(m_nOrginPoint,point));
break;
case 2:
dc.Ellipse(CRect(m_nOrginPoint,point));
break;
case 3:
CBrush brush;
brush.CreateSolidBrush(m_clr);
dc.SelectObject(&brush);
dc.Ellipse(CRect(m_nOrginPoint,point));
break;
case 4:
CBrush brush;
brush.CreateSolidBrush(m_clr);
dc.SelectObject(&brush);
dc.Rectangle(CRect(m_nOrginPoint,point));
break;}
CView::OnLButtonUp(nFlags, point);
}
麻烦帮帮我~感谢啊!
我弄好一点了,不用管透明画刷了,现在的问题就是那两个实心图形 展开
如果在case3和case4都加上颜色画刷的话就重复了,还要实现透明画刷,我就完全不懂了。是不是可以用 oldBrush/NewBrush什么的。不知道我表达清楚没。
画矩形和椭圆是要用透明画刷:
CBrush *pBrush=CBrush::FromHandle((HBURSH)GetStockObject(NULL_BRUSH));
dc.SelectObject(pBrush);
实心时:
CBrush brush;
brush.CreateSolidBrush(m_clr);
dc.SelectObject(&brush);
代码:
void CMy5192016View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_nOrginPoint= point;
CView::OnLButtonDown(nFlags, point);
}
void CMy5192016View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
switch(m_nDrawType){
case 1:
dc.Rectangle(CRect(m_nOrginPoint,point));
break;
case 2:
dc.Ellipse(CRect(m_nOrginPoint,point));
break;
case 3:
CBrush brush;
brush.CreateSolidBrush(m_clr);
dc.SelectObject(&brush);
dc.Ellipse(CRect(m_nOrginPoint,point));
break;
case 4:
CBrush brush;
brush.CreateSolidBrush(m_clr);
dc.SelectObject(&brush);
dc.Rectangle(CRect(m_nOrginPoint,point));
break;}
CView::OnLButtonUp(nFlags, point);
}
麻烦帮帮我~感谢啊!
我弄好一点了,不用管透明画刷了,现在的问题就是那两个实心图形 展开
1个回答
展开全部
这还用问吗?肯定重复了啊 你case 3: case 4: 里面画图的时候传入的
CRect(m_nOrginPoint,point) 是相同的,参数是相同的,你要注意里面的值如果相同肯定重复了啊
CRect(m_nOrginPoint,point) 是相同的,参数是相同的,你要注意里面的值如果相同肯定重复了啊
追问
我不会改啊 CRect(m_nOrginPoint,point) 的参数改了的话,有色画刷的代码要放到哪里啊?
追答
我的意思是你传入的矩形坐标重复了,所以画出来的东西肯定就覆盖在一起了啊,
CRect(m_nOrginPoint,point) 你修改一下 我举个例子,你在case 3:的
dc.Rectangle( CRect(CRect(0,0,100,100)) );
case 4: 里面写成dc.Rectangle( CRect(CRect(200,200,300,300)) ); 这样就不会重复了,明白吗,坐标 不要一样!!!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询