
用VC++6.0写的绘画程序,画出椭圆为什么会这样子,求帮助!!!
(UINTvoidCYang_JieView::OnMouseMnFlags,CPointpoint){//TODO:Addyourmessagehandlercodeh...
(UINT void CYang_JieView::OnMouseMnFlags, CPoint point){ // TODO: Add your message handler code here and/or call default if(m_dragging)
{
CClientDC dc(this);dc.SetROP2(R2_NOT);
CBrush brush;brush.CreateSolidBrush(m_color);CBrush* pOldBrush = dc.SelectObject(&brush);dc.SelectObject(pOldBrush);
switch(m_shape) { case 3: //dc.SelectObject(brush); CRgn rgn; rgn.CreateEllipticRgn(m_pointorg.x,m_pointorg.y,point.x,point.y); dc.Ellipse(m_pointorg.x,m_pointorg.y,m_pointold.x,m_pointold.y); dc.Ellipse(m_pointorg.x,m_pointorg.y,point.x,point.y); dc.FillRgn(&rgn,&brush); } m_pointold=point; //dc.SelectObject(oldPen); dc.SelectObject(pOldBrush); } CView::OnMouseMove(nFlags, point);} 展开
{
CClientDC dc(this);dc.SetROP2(R2_NOT);
CBrush brush;brush.CreateSolidBrush(m_color);CBrush* pOldBrush = dc.SelectObject(&brush);dc.SelectObject(pOldBrush);
switch(m_shape) { case 3: //dc.SelectObject(brush); CRgn rgn; rgn.CreateEllipticRgn(m_pointorg.x,m_pointorg.y,point.x,point.y); dc.Ellipse(m_pointorg.x,m_pointorg.y,m_pointold.x,m_pointold.y); dc.Ellipse(m_pointorg.x,m_pointorg.y,point.x,point.y); dc.FillRgn(&rgn,&brush); } m_pointold=point; //dc.SelectObject(oldPen); dc.SelectObject(pOldBrush); } CView::OnMouseMove(nFlags, point);} 展开
2个回答
展开全部
这个代码的实际效果,应该是因为你虽然用了R2_NOT模式,但FillRgn使用了Solid刷子(这个不确定R2_NOT模式是否有效)。
建议你可以尝试,在OnmouseMove中,只画线不填充FillRgn看看效果是否理想(在鼠标键抬起up消息中fill)
另外,你的CreateEllipticRgn等于只fill了一次,没有更新old的区域,逻辑上不合理,显示就应该这个效果,呵呵。。可以先试试这样:
switch(m_shape)
{ case 3:
//dc.SelectObject(brush);
CRgn rgnold;
rgnold.CreateEllipticRgn(m_pointorg.x,m_pointorg.y,pointold.x,pointold.y);
dc.Ellipse(m_pointorg.x,m_pointorg.y,m_pointold.x,m_pointold.y);
dc.FillRgn(&rgnold,&brush);
dc.Ellipse(m_pointorg.x,m_pointorg.y,point.x,point.y);
CRgn rgn;
rgn.CreateEllipticRgn(m_pointorg.x,m_pointorg.y,point.x,point.y);
dc.FillRgn(&rgn,&brush);
}
建议你可以尝试,在OnmouseMove中,只画线不填充FillRgn看看效果是否理想(在鼠标键抬起up消息中fill)
另外,你的CreateEllipticRgn等于只fill了一次,没有更新old的区域,逻辑上不合理,显示就应该这个效果,呵呵。。可以先试试这样:
switch(m_shape)
{ case 3:
//dc.SelectObject(brush);
CRgn rgnold;
rgnold.CreateEllipticRgn(m_pointorg.x,m_pointorg.y,pointold.x,pointold.y);
dc.Ellipse(m_pointorg.x,m_pointorg.y,m_pointold.x,m_pointold.y);
dc.FillRgn(&rgnold,&brush);
dc.Ellipse(m_pointorg.x,m_pointorg.y,point.x,point.y);
CRgn rgn;
rgn.CreateEllipticRgn(m_pointorg.x,m_pointorg.y,point.x,point.y);
dc.FillRgn(&rgn,&brush);
}
2013-05-25
展开全部
说说再你想画成什么样子,才能知道怎么改
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询