c语言windows程序设计-在windows中使用printf,《windows程序设计(c语言版)》第4章~输出文字.pdf...

输出文字 涛儿软件工作室 整理编

在前一章,您看到了一个简单的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 消息:

 在使用者移动窗口或显示窗口时,窗口中先前被隐藏的区域重新

可见。

 使用者改变窗口的大小(如果窗口类别样式有着CS_HREDRAW 和

CS_VREDRAW 位旗标的设定)。

 程序使用ScrollWindow 或ScrollDC 函数滚动显示区域的一部

分。

 程序使用InvalidateRect 或InvalidateRgn 函数刻意产生

WM_PAINT 消息。

在某些情况下,显示区域的一部分被临

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值