设为首页 加入收藏

TOP

输出文字(三十四)
2010-12-30 21:10:02 来源: 作者: 【 】 浏览:24204
Tags:输出 文字
行。当然,Windows不会显示这些行,因此萤幕显得乾净和漂亮。

前面说过,我们一开始不想弄得太复杂,这样的程式码很浪费,效率很低。下面我们对此加以修改,但是先要考虑在WM_VSCROLL讯息之後更新显示区域的方法。

绘图程式的组织
 

在处理完卷动列讯息後,SYSMETS2不更新显示区域,相反,它呼叫InvalidateRect使显示区域失效。这导致Windows将一个WM_PAINT讯息放入讯息伫列中。

最好能使Windows程式在回应WM_PAINT讯息时完成所有的显示区域绘制功能。因为程式必须在一接收到WM_PAINT讯息时就更新整个显示区域,如果在程式的其他部分也绘制的话,将很可能使程式码重复。

首先,您可能对这种拐弯抹角的方式感到厌烦。在Windows的早期,因为这种方式与文字模式的程式设计差别太大,程式写作者感到这种概念很难理解。并且,程式要不断地通过马上绘制画面来回应键盘和滑鼠。这样做既方便又有效,但是在很多情况下,这完全不必要。当您掌握了在回应WM_PAINT讯息时积累绘制显示区域所需要的全部资讯的原则之後,会对这种结果感到满意的。

如同SYSMETS2示范的,程式仍然需要在处理非WM_PAINT讯息时更新特定的显示区域,使用InvalidateRect就很方便,您可以用它使显示区域内的特定矩形或者整个显示区域失效。

只将视窗显示区域标记为无效以产生WM_PAINT讯息,对於某些应用程式来说也许不是完全令人满意的选择。在呼叫InvalidateRect之後,Windows将WM_PAINT讯息放入讯息伫列中,最後由视窗讯息处理程式处理它。然而,Windows将WM_PAINT讯息当成低优先顺序讯息,如果系统有许多其他的动作正在发生,那么也许会让您等待一会儿工夫。这时,当对话方块消失时,将会出现一些空白的「洞」,程式仍然等待更新它的视窗。

如果您希望立即更新无效区域,可以在呼叫InvalidateRect之後呼叫UpdateWindow:

如果显示区域的任一部分无效,则UpdateWindow将导致Windows用WM_PAINT讯息呼叫视窗讯息处理程式(如果整个显示区域有效,则不呼叫视窗讯息处理程式)。这一WM_PAINT讯息不进入讯息伫列,直接由Windows呼叫视窗讯息处理程式。视窗讯息处

首页 上一页 31 32 33 34 35 36 37 下一页 尾页 34/44/44
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇图形基础 下一篇视窗和讯息

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: