| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5835 人关注过本帖
标题:mfc窗口重绘
只看楼主 加入收藏
xuyao18
Rank: 2
等 级:论坛游民
帖 子:50
专家分:30
注 册:2009-4-27
结帖率:22.22%
收藏
已结贴  问题点数:20 回复次数:5 
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
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
UpdateWindow( )的作用是使窗口立即重绘。调用Invalidate等函数后窗口不会立即重绘,这是由于WM_PAINT消息的优先级很低,它需要等消息队列中的其它消息发送完后才能被处理。调用UpdateWindow函数可使WM_PAINT被直接发送到目标窗口,从而导致窗口立即重绘。
2010-05-06 17:09
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
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:20 
UpdateWindow();会检查无效区,如果空的话,不发送WM_PAINT消息。
很经常是一起用,像你上面用的一样。
    Invalidate();  //无效区
    UpdateWindow();  //使窗口立即重绘。
不太明白你的说重绘不会完成什么意思,Invalidate(TRUE)能而Invalidate(FALSE)不能?参数为TRUE的话就多了WM_ERASEBKGND消息而已。即背景重绘。
2010-05-06 20:47
xuyao18
Rank: 2
等 级:论坛游民
帖 子:50
专家分:30
注 册:2009-4-27
收藏
得分:0 
回复 4楼 lijm1989
哦 差不多明白了。就是说updatewindow是和invalidate一起用的,而后者只有自己的时候也能够正常的使窗口重绘?



那么如果说我不用这两个函数,直接调用我直接的View类中的Ondraw进行重绘可以么?
2010-05-06 23:18
ziguang505
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-4-8
收藏
得分:0 
回复 5楼 xuyao18
不能
2010-05-18 15:17
快速回复:mfc窗口重绘
数据加载中...
 
   



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

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