posts - 64,comments - 18,trackbacks - 0

当使用Visual Studio.NET 2003 创建单文档或多文档应用程序时,视图类中即存在OnDraw()成员函数,它是由Applizad自动创建的。每当视图窗口获得WM_PAINT消息时,这个函数就会被调用。它接受一个CDC类指针,应用这个指针可以在视图窗口中进行图形绘制。
    三种情况下,系统会向应用程序发送WM_PAINT消息:
(1)窗口改变后的刷新
(2)被覆盖区域的刷新
(3)对象穿越后的刷新(系统自动完成刷新任务,应用程序不必考虑)
    注意:(2)情况下,程序员必须有效地组织应用程序,使其能够在系统刷新实效时负起刷新的责任。当然,程序员也可以主动触发WM_PAINT消息,以使得窗口的用户区域被刷新。过程:首先要声明窗口用户区域无效(以生成一个WM_PAINT消息)可以通过调用CWnd类的成员函数来做到这一点。例如调用Invalidate()函数即可以使得CWnd的整个用户区域实效,即将整个用户区域置为CWnd的更新区域。注意它是对整个用户区域刷新。效率不高。另一个函数InvalidateRect(),它的功能与Invalidate()相似,但可以指定刷新用户区域的某个部分。事实上WM_PAINT的优先级是比较低的,这两个函数调用之后,只有应用程序的消息队列没有其他消息,系统才会向应用程序发送一个WM_PAINT消息。如果要立即刷新的话,就调用UpdateWindow()函数来实现。它直接发送一个WM_PAINT消息,不会顾虑应用程序消息对列是否为空。

posted on 2007-05-29 17:23 rebol 阅读(846) 评论(1)  编辑 收藏 引用

FeedBack:
# re: 窗口重绘
2008-10-30 11:52 | lesion
楼主这个测试过了,如果可行,谢谢共享!!!  回复  更多评论
  

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