用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);}
展开
 我来答
bhtzu
2013-05-24 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4523万
展开全部
这个代码的实际效果,应该是因为你虽然用了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);
}
匿名用户
2013-05-25
展开全部
说说再你想画成什么样子,才能知道怎么改
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式