鱼C论坛

 找回密码
 立即注册
查看: 2557|回复: 0

[学习笔记] 《Windows SDK》012-014 滚动条总结

[复制链接]
发表于 2017-7-16 22:02:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 BngThea 于 2017-7-17 09:07 编辑

今天特意将这三节的内容重新学习了一遍,对滚动条的知识进行必要的总结消化

一 前期认识
* 滚动条由Windows和程序员两者负责
Windows负责的有:
1 鼠标消息
2 scroll被点击时的反向显示
3 scroll滑动时在窗口中的显示
4 向有scroll的WndProc发送scroll相关消息
程序员负责的有:
1 初始化和更新scroll范围及位置
2 处理scroll的对应的消息

* 获得客户区尺寸
三种方式:
1 全屏时,用GetSystemMetrics()分别获得SM_CXFULLSCREEN, SM_CXFULLSCREEN即可
2 用GetClientRect()获得当前客户区的尺寸,该方式方便,但效率低下
3 利用WM_SIZE消息设置:该消息的lParam成员的高低16位分别存放客户区的高和宽,二wParam成员表征窗口的变化方式

* 利用LOWORD和HIWORD宏可以分别获取一个32位数据的低和高16位数据
该操作在处理WM_SIZE、WM_VSCROLL等消息时经常用到

二 在窗口中添加滚动条
* 在CreateWindow函数中在第三个参数中加入WS_HSCROLL或WM_VSCROLL即可添加水平或垂直滚动条

三 WM_VSCROLL 和 WM_HSCROLL 的特征
* 两者唯一的区别在于分别指向垂直和水平滚动条
* lParam参数为0表示标准滚动条,否则为scroll控件


* wParam参数的低16位表示鼠标的操作,由许多可选宏构成,大致分为三类

1 Bottom 和 Top : 表示底部和顶部
2 LineDown , LineUp, PageDown, PageUp :表示向下向上滚动一行或一页
3 ThrumbPostion 和 ThrumbTrack :表示拖动滚动条,这两种情况下wParam消息的高16位都存放滚动条位置,区别在于前者存放的是拖动后的最终位置(已松开鼠标),后者位拖动的当前位置(鼠标未松开)


四 老式处理滚动条套路
* 初始化和设置滚动条范围及位置
用Set/Get + Scorll + Range/Pos 的函数实现

* 处理流程
1 定义一个存放scroll 位置的静态变量 static int iVscrollPos
2 计算每种操作下iVscrollPos的值
3 条件判定,保证 iVscrollPos >= 0
4 设置scroll的位置
5 让客户区失效并更新窗口

五 高效处理滚动条套路
* 新函数及结构
1 用Set/Get + ScorllInfo 的函数 和一个 SCROLLINFO 结构实现
2 用ScrollWindow函数来滚动部分客户区

* 处理流程
1 在WM_SIZE消息中初始化一个SCROLLINFO结构si并对感兴趣的值进行设置
2 在处理scroll相关消息时对si中对应值进行更新
3 调用ScrollWindow函数来高效的滚动窗口





评分

参与人数 1鱼币 +4 收起 理由
小甲鱼 + 4

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 02:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表