1. 对话框种类分类:
    滚动条有水平和垂直两种,默认的 SCROLLBAR 定义的是 水平滚动条,它的默认风格是 SBS_HORZ win32 5.4 对话框 使用滚动条
    要定义垂直滚动条,后面则要加上 SBS_VERT 风格
    win32 5.4 对话框 使用滚动条
  2. 滚动条的消息发送:
    1. 和其他子窗口控件发送 WM_COMMAND 消息不同,水平滚动条向对话框发送 WM_HSCROLL消息,而垂直滚动条则发送WM_VSCROLL消息,所以应该分别进行处理。
    2. 消息格式:
      win32 5.4 对话框 使用滚动条
      1. 其中, nScrollCode 代表了滚动条当前动作,定义值及其含义如下:
        win32 5.4 对话框 使用滚动条

      2. nPos的值只有当前动作码是 SB_THUMBPOSITION(滚动条被拖动到某处) 或 SB_THUMBTRACK(滚动条在拖动中) 时才有效,其他的时候为0.

      3. 注意事项:

        1. 其无论什么滚动条都统一发送 WM_HSCROLL(水平) 和 WM_VSCROLL(垂直)。
        2. 所以,若存在多个水平滚动条,先统一用 WM_HSCROLL 接收,然后再取出 lParam,通用 控件ID 来判断这个是哪个水平滚动条,然后再进行相应的处理判断。
        3. 滚动条各个控件产生的 nScrollCode 码如下:
          win32 5.4 对话框 使用滚动条
        4. 滚动条的位置计算判断:
          1. 用户在拉动滚动条后,滚动条不会自己移动位置,它只是将用户的动作以 WM_xSCROLL消息的形式反馈给程序,真正要移动它还是要靠程序来设置。
          2. 所以,代码中必须要根据不同的动作首先计算出新的位置,并判断程序是否越界,下列是判断程序越界的代码,最后一步使用 SBM_SETRANGE 这个消息表示 设置好滚动条的新位置,来展示给用户:(注意,在MASM语句中提到过, .if dwPos > 0 只能是比较无符号数,所以这里使用 cmp 来构建分支。)
            win32 5.4 对话框 使用滚动条
          3. 初始化时使用 SBM_SETRANGE 来设计 滚动条 范围:win32 5.4 对话框 使用滚动条

相关文章: