读书人

Windows程式开发设计指南-输出文字

发布时间: 2012-09-14 23:00:49 作者: rapoo

Windows程式开发设计指南--输出文字

4. 输出文字

在前一章,您看到了一个简单的Windows 98程式,它在视窗中央,或者更准确地说,在显示区域中央显示一行文字。正如我们学到的,显示区域是整个应用程式视窗中未被标题列、视窗边框,以及可选的功能表列、工具列、状态列和卷动列占据的部分。简而言之,显示区域是视窗中可以由程式任意书写和传递视觉资讯的部分。

对於程式的显示区域,您几乎可以为所欲为,只不过您不能假定视窗大小是某一特定尺寸,或者在程式执行时其大小会保持不变。如果您不熟悉图形视窗环境的程式设计,这些限制可能会使您感到惊讶:不能再假设萤幕上的一行文字一定有80个字元了。您的程式必须与其他Windows程式共用视讯显示器。Windows使用者控制程式视窗在萤幕上显示的方式。尽管可以建立固定大小的视窗(这对於计算器之类的应用是合理的),但在大多数情况下,使用者应该能够改变应用程式视窗的大小。您的程式必须能够接受指定给它的大小,并且合理地利用这一空间。

这有两种可能的情况。一种可能是,程式只有仅能显示「hello」的显示区域;还有另一种可能,即程式在一个大萤幕、高解析度的系统上执行,其显示区域大得足以显示两整页文字。灵活地处理这两种极端是Windows程式设计的要点之一。

这一章,我们将讲述程式在显示区域显示资讯的方式,但比上一章说明的显示方式更加复杂。当程式在显示区域显示文字或图形时,它经常要「绘制」它的显示区域。本章著重讲述绘制的方法。

尽管Windows为显示图形提供了强大的图形装置介面(GDI)函式,但在这一章中,我只介绍简单文字行的显示。我也将忽略Windows能够使用的不同字体外形及字体大小,仅使用Windows的内定系统字体。这看起来似乎是一种限制,其实不然,本章涉及和解决的问题适用於所有Windows程式设计。在混合显示文字和图形时,Windows内定字体的字元大小通常决定了图形的尺寸。

本章表面上是讨论绘图的方法,实际上是讨论与装置无关的程式设计基础。Windows程式只能对显示区域大小甚至字元的大小做很少的假定,相反地,必须使用Windows提供的功能来取得关於程式执行环境的资讯。

绘制和更新
 

在文字模式环境下,程式可以在显示器的任意部分输出,程式输出到萤幕上的内容会停留在原处,不会神秘地消失。因此,程式可以丢掉重新生成萤幕显示时所需的资讯。

在Windows中,只能在视窗的显示区域绘制文字和图形,而且不能确保在显示区域内显示的内容会一直保留到程式下一次有意地改写它时还保留在那里。例如,使用者可能会在萤幕上移动另一个程式的视窗,这样就可能覆盖您的应用程式视窗的一部分。Windows不会保存您的视窗中被其他程式覆盖的区域,当程式移开後,Windows会要求您的程式更新显示区域的这个部分。

Windows是一个讯息驱动系统。它通过把讯息投入应用程式讯息伫列中或者把讯息发送给合适的视窗讯息处理程式,将发生的各种事件通知给应用程式。Windows通过发送WM_PAINT讯息通知视窗讯息处理程式,视窗的部分显示区域需要绘制。

WM_PAINT讯息
 

大多数Windows程式在WinMain中进入讯息回圈之前的初始化期间都要呼叫函式UpdateWindow。Windows利用这个机会给视窗讯息处理程式发送第一个WM_PAINT讯息。这个讯息通知视窗讯息处理程式:必须绘制显示区域。此後,视窗讯息处理程式应在任何时刻都准备好处理其他WM_PAINT讯息,必要的话,甚至重新绘制视窗的整个显示区域。在发生下面几种事件之一时,视窗讯息处理程式会接收到一个WM_PAINT讯息:

读书人网 >windows

热点推荐