输出文本

在字符模式环境中,程序可以在显示器任意部分输出。输出的内容会留在原处,不会神秘消失。而Windows原则上只能在窗口客户区绘制文本和图形,并且不能客户区写入的内容一直存在。比方说当客户区被另一个客户区覆盖,当另一个客户区移开时。Windows不会帮你保存刚才被覆盖的区域。这时Windows发送WM_PAINT消息通知窗口过程,窗口的部分客户区需要绘制。

这样的方式看起来很复杂,其实这也是WM_PAINT消息要求程序员改变思维方式,从自己向显示器输出,改为当Windows需要时,程序向显示器输出。这样做显然还要保存绘制客户区的所有信息,似乎这种方法很不合理,它使得程序的复杂性增大,但是这样程序结构会更加合理。

有效矩形和无效矩形

有可能你的客户区只有一块地方需要重画,Windows称这个区域称为“无效区域”或“更新区域”。Windows为每个窗口保存一个“绘图信息结构”,处理WM_PAINT前如果又有其他的无效区域出现,Windows会算出一个包含两个无效区域的新区域并更新WM_PAINTWindows是不会将多个WM_PAINT消息放在消息队列中。(另WM_PAINT是一个低优先级的消息,只要消息队列中有其他的消息Windows就不会将它送给程序。这就是为什么如果程序在处理繁重任务时,窗口什么也不显示。)

每一个WM_PAINT都调用BeginPaintEndPaint。当调用BeginPaint后,整个客户区变为有效。

句柄

当在两个模块之间实现数据操作时,我们一般使用指针,但是Windows不可以简单的将它传给我们的程序,指针的操作太危险,客户程序可以任意的改变内存中的数据,所以Windows使用句柄。句柄只是一个数值,Windows通过它来引用对象。

设备描述表

设备描述表是一个数据结构,这个结构记录了与特定显示设备(显示器,打印机等)相关的数据。也就是说,如果要在Windows中显示,必须使用设备描述表。

获得设备描述表的方法

方法一:BeginPaintEndPaint。必须成对的使用他们,他们一般在WM_PAINT中使用。因为他们不但可以的到设备描述表句柄,还可以使整个客户区有效。

方法二:通过GetDCReleaseDC实现,它们也必须成对的使用,和BeginPaintEndPaint不同的是,他们不会使无效矩形区域变为有效。不过ValidateRect也同时具有是屏幕有效的功能。

GetDC相似的函数GetWindowDCGetDC返回用于写入窗口客户区的设备描述句柄,而GetWindowDC返回写入整个窗口的设备描述句柄。

滚动条

滚动条是用户界面最好的功能之一,它容易使用,而且提供了很多视觉反馈。滚动条被延伸到很多的控件上.

滚动条的范围和位置通过:SetScrollRangeSetScrollPos来设置。

用户操作滚动条时会产生一系列的消息,通过处理相应的消息就能为程序实现滚动条功能。

目前Win32API增加了一些新函数来实现更好的滚动条。它可以动态的改变滚动框的大小。并可以支持65536以上的范围。这些函数是:

SetScrollInfoGetScrollInfo。这两个函数定义了一个包含滚动条信息的结构体。当Set时将结构体内的数据设置后赋给Windows,而Get时,Windows将填充结构体。Windows中有很多的地方是通过这种方式来传送数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值