QQ登录

只需一步,快速开始

搜索
鱼C论坛笔记大赛成绩公示
查看: 136|回复: 0

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

[复制链接]
累计签到:96 天
连续签到:3 天
最佳答案
4 
发表于 2017-7-16 22:02:30 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

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

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

查看全部评分

本帖被以下淘专辑推荐:

1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋手机版Archiver( 粤公网安备 44051102000370号 | 粤ICP备11014136号

© 2010-2017 FishC.com GMT+8, 2017-9-19 23:15 Powered by Discuz! X2.5 Theme by dreambred

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