标题:mfc窗口重绘
取消只看楼主
xuyao18
Rank: 2
等 级:论坛游民
帖 子:50
专家分:30
注 册:2009-4-27
结帖率:22.22%
已结贴  问题点数:20 回复次数:2 
mfc窗口重绘
void CGradeView::OnScreenClean()
{
    // TODO: Add your command handler code here
    Invalidate(FALSE);     //使用户区无效,
    UpdateWindow();        // 使无效用户区重绘
}
这是我写的一个窗口重绘的函数。但是结果是不能使得窗口重绘,请各位解释一下invalidate 和updatewindow用法之间的区别。
对于这个函数的话我是作业想的,先调用invalidate(false)来设定用户界区的无效,再用updatewindow来让无效的用户区进行重绘。


下面这个是OnPaint函数
void CGradeView::OnPaint()
{
    CPaintDC dc(this); // device context for painting
   
    TEXTMETRIC tm;    //定义文本信息结构体
    dc.GetTextMetrics(&tm);   //获得设备描述表中的文本信息
    CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);  //创建大小合适的插入符
   
    ShowCaret ();//  
    // TODO: Add your message handler code here
   
    // Do not call CView::OnPaint() for painting messages
}

搜索更多相关主题的帖子: mfc 窗口 
2010-05-06 17:04
xuyao18
Rank: 2
等 级:论坛游民
帖 子:50
专家分:30
注 册:2009-4-27
得分:0 
但是如果我把程序改成下面这样,重绘还是不会完成
如果直接调用OnDraw 那么它的参数又要怎么写?
void CGradeView::OnScreenClean()
{
    // TODO: Add your command handler code here
    //Invalidate(FALSE);     //使用户区无效,
    UpdateWindow();        // 使无效用户区重绘
}
  

还有 就是为什么只有Invalidate(TRUE)的时候  程序也能进行重绘呢?

[ 本帖最后由 xuyao18 于 2010-5-6 17:22 编辑 ]
2010-05-06 17:13
xuyao18
Rank: 2
等 级:论坛游民
帖 子:50
专家分:30
注 册:2009-4-27
得分:0 
回复 4楼 lijm1989
哦 差不多明白了。就是说updatewindow是和invalidate一起用的,而后者只有自己的时候也能够正常的使窗口重绘?



那么如果说我不用这两个函数,直接调用我直接的View类中的Ondraw进行重绘可以么?
2010-05-06 23:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-305616-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.093062 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved