Ai

随笔 - 4, 文章 - 0, 评论 - 0, 引用 - 0
数据加载中……

MFC绘图问题

学习MFC绘图的时候,发现一个问题,看别人的代码画线很流畅,怎么自己写出来感觉有点延迟,感觉卡卡的,后来发现了问题的原因所在。
之前代码是这样的:
void CTest1View::OnLButtonDown(UINT nFlags, CPoint point)
{
    
// TODO: 在此添加消息处理程序代码和/或调用默认值
    m_ptOrgin = point;
    CView::OnLButtonDown(nFlags, point);
}



void CTest1View::OnLButtonUp(UINT nFlags, CPoint point)
{
    
// TODO: 在此添加消息处理程序代码和/或调用默认值
    CClientDC dc(this);
    dc.MoveTo(m_ptOrgin);
    dc.LineTo(point);

    CView::OnLButtonUp(nFlags, point);
}
这样只所以卡,是因为MFC内部把WM_PAINT消息是一个低优先级消息,系统会让比他优先级高的提前处理,这样当系统处理其他消息的时候,总是会延后处理WM_PAINT消息。所以,要让系统提前处理它,可以这么做:
void CTest1View::OnLButtonDown(UINT nFlags, CPoint point)
{
    
// TODO: 在此添加消息处理程序代码和/或调用默认值
    m_ptOrgin = point;
    CView::OnLButtonDown(nFlags, point);
}



void CTest1View::OnLButtonUp(UINT nFlags, CPoint point)
{
    
// TODO: 在此添加消息处理程序代码和/或调用默认值
    CClientDC dc(this);
    
    Invalidate(
0);
    UpdateWindow();
    dc.MoveTo(m_ptOrgin);
    dc.LineTo(point);
    CView::OnLButtonUp(nFlags, point);
}
这样先让窗口无效,再绘图,就能满足要求。

虽然这样能解决这个问题,但我还是不能理解为什么别人的工程按照第一个方法写的依然可以正常运行,而每次我自己写的却有这个问题。

posted on 2010-12-13 23:54 王凯 阅读(416) 评论(0)  编辑 收藏 引用 所属分类: MFC


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理