c++ - CScrollBar 拇指跟踪不起作用

标签 c++ mfc scrollbar

我正在尝试使用 CScrollBar 来导航对话框中的项目列表。我在对话框中捕捉到 OnVScroll 消息,并且滚动条正确响应单击栏顶部和底部的箭头,以及单击栏的范围以整页前进。问题是,当您尝试拖动拇指时,它根本不会响应,直到您释放鼠标按钮,此时拇指移动到正确的位置。

我使用 spy++ 查找 WM_VSCROLL 消息,看起来它们只在您单击和释放拇指时以 SB_THUMBTRACK 模式发送,而不是在拖动时发送。然而,CScrollBar 上的 msdn 页面表示,在拖动拇指时应连续发送这些消息。由于我没有收到这些消息,所以我不知道拇指在哪里,也无法设置当前位置。

我不认为消息在其他任何地方被拦截,首先是因为即使我将它设置为记录所有消息,spy++ 也没有看到它们,其次是因为该栏在单击和释放时确实收到了两条缩略图消息。

无论是为对话框提供 WS_VSCROLL 样式还是创建 CScrollBar 并将其放置在对话框中,我都会遇到这个问题。

有什么我想念的吗?

最佳答案

确保您没有混淆 SB_THUMBTRACK 和 SB_THUMBPOSITION。前者是您想要实时滚动的内容,而后者仅在用户释放 slider 时才发送。

您还可以检查性能设置(控制面板 -> 查看高级系统设置 -> 高级选项卡 -> 性能 -> 设置... -> 视觉效果。可能会禁用某些实时效果(例如平滑滚动列表框,或其他取决于您使用的 Windows 版本)。

关于c++ - CScrollBar 拇指跟踪不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10193077/

相关文章:

c++ - 如何创建 4096 对齐表[x][4096]

c++ - 计算数组中的反转次数

c++ - 如何将 MFC 对话框映射到不同的帮助 ID?

python - 使用滚动条时, Canvas 内的 tkinter 框架不会扩展

javascript - 如何获得 scrollLeft 的最大值?

c++ - SFINAE 检查表达式是否编译并返回 std::true_type

c++ - 使用 TCL 编写嵌入式 SQLite 脚本

c++ - MFC VC++ 自定义复选框图像

c++ - 转义 MFC 字符串的 URL

css - 右滚动条出现,需要将其删除