mfc 绘图问题~急

我想通过DrawPoly函数画一个矩形,并用OnLButtonDown和OnMouseMove来画直线进行裁剪,可运行结果总是不能实时的显示画线的过程,而再一次画线的时候... 我想通过DrawPoly函数画一个矩形,并用OnLButtonDown和OnMouseMove来画直线进行裁剪,可运行结果总是不能实时的显示画线的过程,而再一次画线的时候才会显示上次的裁剪结果,求教高手该如何修改??
void CComputerGraphicsView::DrawPoly()
{
CRect Rect;
GetClientRect(&Rect);//获得客户区的大小
CBitmap Bitmap,*pBitmap;
Bitmap.LoadBitmap(IDB_BITMAP);
CDC MemDC;
MemDC.CreateCompatibleDC(GetDC());
pBitmap=MemDC.SelectObject(&Bitmap);
MemDC.BitBlt(0,0,Rect.Width(),Rect.Height(),&Picture,0,0,SRCCOPY);
MemDC.TextOut((wxl+wxr)/2,wyb-20,"窗口");//窗口标题
//绘制窗口和直线
CPen Pen3,*pOldPen3;//定义3个像素宽度的画笔
Pen3.CreatePen(PS_SOLID,3,RGB(0,0,0));
pOldPen3=MemDC.SelectObject(&Pen3);
MemDC.MoveTo(wxl,wyt);MemDC.LineTo(wxr,wyt);
MemDC.LineTo(wxr,wyb);MemDC.LineTo(wxl,wyb);
MemDC.LineTo(wxl,wyt);MemDC.SelectObject(pOldPen3);
Pen3.DeleteObject();
CPen Pen1,*pOldPen1;//定义1个像素宽度的画笔
Pen1.CreatePen(PS_SOLID,1,RGB(0,0,255));
pOldPen1=MemDC.SelectObject(&Pen1);
if(m_i>=1)
{
MemDC.MoveTo(ROUND(Pointx[0]),ROUND(Pointy[0]));
MemDC.LineTo(ROUND(Pointx[1]),ROUND(Pointy[1]));
}
MemDC.SelectObject(pOldPen1);
Pen1.DeleteObject();
CDC *dc=GetDC();
dc->BitBlt(0,0,Rect.Width(),Rect.Height(),&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pBitmap);
}
void CComputerGraphicsView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(flag==0)
{
Seed=point;//选择种子位置
PolygonFill2();//进行填充

}
if(flag==1)
{
if(TRUE==m_Draw)
{
if(m_i<2)
{
Pointx[m_i]=point.x;Pointy[m_i]=point.y;
m_i++;
}
}
}
CView::OnLButtonDown(nFlags, point);
}
void CComputerGraphicsView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(flag==1)
{
if(TRUE==m_Draw)
{
if(m_i<2)
{
Pointx[m_i]=point.x;Pointy[m_i]=point.y;
Invalidate(FALSE);
}
}
}
CView::OnMouseMove(nFlags, point);
}
展开
 我来答
qiufeng1100
2011-05-07 · TA获得超过422个赞
知道小有建树答主
回答量:332
采纳率:20%
帮助的人:138万
展开全部
1、在你画好图形后发送一个WM_PAINT消息给窗口。
2、你可以在你画好图形之后执行一下UpdateData();或UpdateWindow();

就可以啦!
还有,在你创建了对象或其他时最好还是让人家有始有终。也就是释放对象等的操作……
更多追问追答
追问
好像都不行呢。我程序用了所谓的双缓冲,这个有没有关系?
追答
那你调调OnLButtonDown(UINT nFlags, CPoint point) 函数里面的执行顺序好好研究一下。

这个没有关系的 。

对了,你没有OnLButtonUp(UINT nFlags, CPoint point)消息函数,然后那个flag是鼠标按下的次数是吧!当然也就要当再次按下时才执行的。
lapian73
2011-05-07 · TA获得超过224个赞
知道答主
回答量:498
采纳率:0%
帮助的人:363万
展开全部
填充上颜色就行了,不过CDC *pDC = this-
追问
能说的具体些么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式