- 对话框种类分类:
滚动条有水平和垂直两种,默认的 SCROLLBAR 定义的是 水平滚动条,它的默认风格是 SBS_HORZ
要定义垂直滚动条,后面则要加上 SBS_VERT 风格 - 滚动条的消息发送:
- 和其他子窗口控件发送 WM_COMMAND 消息不同,水平滚动条向对话框发送 WM_HSCROLL消息,而垂直滚动条则发送WM_VSCROLL消息,所以应该分别进行处理。
- 消息格式:
-
其中, nScrollCode 代表了滚动条当前动作,定义值及其含义如下:
-
nPos的值只有当前动作码是 SB_THUMBPOSITION(滚动条被拖动到某处) 或 SB_THUMBTRACK(滚动条在拖动中) 时才有效,其他的时候为0.
-
注意事项:
- 其无论什么滚动条都统一发送 WM_HSCROLL(水平) 和 WM_VSCROLL(垂直)。
- 所以,若存在多个水平滚动条,先统一用 WM_HSCROLL 接收,然后再取出 lParam,通用 控件ID 来判断这个是哪个水平滚动条,然后再进行相应的处理判断。
- 滚动条各个控件产生的 nScrollCode 码如下:
- 滚动条的位置计算判断:
- 用户在拉动滚动条后,滚动条不会自己移动位置,它只是将用户的动作以 WM_xSCROLL消息的形式反馈给程序,真正要移动它还是要靠程序来设置。
- 所以,代码中必须要根据不同的动作首先计算出新的位置,并判断程序是否越界,下列是判断程序越界的代码,最后一步使用 SBM_SETRANGE 这个消息表示 设置好滚动条的新位置,来展示给用户:(注意,在MASM语句中提到过, .if dwPos > 0 只能是比较无符号数,所以这里使用 cmp 来构建分支。)
- 初始化时使用 SBM_SETRANGE 来设计 滚动条 范围:
-
相关文章: