⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 untitled-44.txt

📁 mfc 教程
💻 TXT
字号:
    74    MFC Windows程序设计(第 2版)
  —  —
SB—PAGEUP和SB—PAGEDOWN消息的响应是向上或向下滚动一“页”或稍小于一“页”的距
离(通常该距离定义为窗口客户区高度或比窗口客户区高度稍小一点的高度),并调用
Setscrolllnfo设定滚动条的新位置。任何事件中,更新滚动条位置都是编程者的责任。滚动
条不会自己做这件事。
    另一种不太常用的处理UP和DOWN通知的方法是通过调用SetscrollPos或SetscMllnfo
不断移动滚动条滑块,但直到SB.ENDSCROLL通知传来延迟滚动窗口。我曾在一个多媒体
应用程序中用过这个方法。程序对位置变化反应很慢,以致于给CD-ROM驱动器传送命令
的延迟时间都不会阻碍滚动条滑块的平滑移动。
    SB—THUMBTRACK和SB—THUMBPOSlll0N通知的处理方法稍有不同。因为在滚动条
滑块被拖动时,SB.THUMBTRACK通知通常来得很快、很多,所以一些Windows应用程序忽
略SB-THUMBTRACK通知而只对SB.THUMBPOSITION通知作出响应。在这种情况下,窗口
在滚动条滑块被释放之前不会发生滚动。如果滚动窗口内容的速度能跟上SB_THUMB.
TRACK通知,那么程序对滚动条滑块被拖动、窗口内容随之滚动的用户输人的响应性就更
好了。但滚动窗口并同时相应地更新滚动条位置依旧是编程者的责任。滚动条滑块在被向
上或向下拖动时,Windows将滚动条的移动以动画显示,但是如果不能调用SetscrollP0s或
Setscrolllnfo响应 SB.THUMBTRACK或 SB.THUMBPOSITION通知,则滚动条滑块在被释放时
将快速回到初始位置。
2.3.5滚动窗口
    现在既然您已了解了滚动条是如何工作的,那么就该考虑如何响应滚动条消息滚动窗
口内容了。
    最简单的方法是在每个滚动条消息传来时改变滚动条的位置,并调用  CWnd:: Invalidate
实现重画滚动条。窗口的onPaint处理程序会向滚动条查询它的当前位置,并根据该信息调
整它的输出。不幸的是:用这种方法滚动窗口的速度很慢。用户单击向上箭头,窗口内容
向上滚动一行,尽管大部分内容的显示位置不对,但都已在窗口内,重画整个窗口实际上是
浪费时间。用来处理SB.LINEUP消息的更有效的办法是用数据块快速拷贝法将当前显示
在窗口中的所有内容复制到第二行以后的位置,然后画出新的第一行。这就是  CWnd::
Scrollwindow的作用。
    Scrollwi。dow向上或向下、向左或向右滚动窗口客户区的整体或局部内容,并使用像素
块快速传输方法实现一个或多个像素距离的滚动。而且它禁止滚动没有被滚动操作“覆盖”
的窗口内容,这样下一个WM—PAINT消息就不会重画整个窗口。如果调用Sc。llwindow将
窗口向下滚动10个像素,则用数据块拷贝实现滚动,然后使窗口中的前10行无效。此时
onPaint被激活,只有前10行被重画。即使onPant要重画整个用户区的内容,由于大部分
输出被剪贴过去,所以滚动性能还是提高了。有一个巧妙的OnPaint处理程序能进一步加快
任务的执行,它将GDI调用限制在那些对窗口中无效矩形里的像素有影响的函数。第IO和
第13章将给出运用这种技巧优化滚动性能的示例程序。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -