win32 5.4 对话框 使用滚动条

本文介绍了如何在Win32对话框中添加和使用滚动条,包括水平和垂直滚动条的风格设置,以及它们各自发送的WM_HSCROLL和WM_VSCROLL消息。在处理这些消息时,需要注意消息中的nScrollCode和nPos参数,以及如何通过控件ID判断滚动条。同时,文章强调了滚动条位置更新的逻辑,包括计算新位置、防止越界和使用SBM_SETRANGE设置滚动条范围的操作。
  1. 对话框种类分类:
    滚动条有水平和垂直两种,默认的 SCROLLBAR 定义的是 水平滚动条,它的默认风格是 SBS_HORZ 在这里插入图片描述
    要定义垂直滚动条,后面则要加上 SBS_VERT 风格
    在这里插入图片描述
  2. 滚动条的消息发送:
    1. 和其他子窗口控件发送 WM_COMMAND 消息不同,水平滚动条向对话框发送 WM_HSCROLL消息,而垂直滚动条则发送WM_VSCROLL消息,所以应该分别进行处理。
    2. 消息格式:
      在这里插入图片描述
      1. 其中, nScrollCode 代表了滚动条当前动作,定义值及其含义如下:
        在这里插入图片描述

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

      3. 注意事项:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值