滑块条——使用简介
跟踪条是一个窗口,其中包含一个滑块 (有时称为通道中的拇指) 和可选的刻度线。
当用户使用鼠标或方向键移动滑块时,跟踪条会发送通知消息以指示更改。 当希望用户选择一个离散无符号整数值或一个范围内的一组连续无符号整数值时,跟踪栏非常有用。 例如,可以使用跟踪条来允许用户通过将滑块移动到给定刻度线来设置键盘的重复速率。 下图显示了一个典型的跟踪条。
跟踪栏中的滑块以创建时指定的增量移动。 此范围内的值称为逻辑单元。 例如,如果指定跟踪条的逻辑单元范围为 0 到 5, 则滑块只能占据六个位置:跟踪条左侧的一个位置,以及范围中每个增量的一个位置。 通常,每个位置都由刻度线标识;但是,刻度线的数量是任意的,并且可能小于逻辑位置的数量。 使用 创建窗口 函数创建跟踪条,指定 "msctls_trackbar32" 窗口类。 创建跟踪栏后,可以使用跟踪条消息来设置和检索其许多属性。 可进行的更改包括设置滑块的最小和最大位置、绘制刻度线、设置选择范围以及重新定位滑块。
选择范围
如果创建具有 TBS_ENABLESELRANGE样式的 跟踪条,则可以指定选择范围。 跟踪条突出显示选择范围,并在开始和结束位置显示三角形刻度线,如下图所示。
跟踪条的选择范围不会以任何方式影响其功能。 由应用程序来实现范围。 可以通过以下方法之一执行此操作: 使用选择范围使用户能够设置某些参数的最大值和最小值。 例如,用户可以将滑块移动到某个位置,然后单击标有“Max”的按钮。 然后,应用程序设置选择范围以显示用户选择的值。 通过处理 水平滚动 或 垂直滚动 通知并禁止任何超出选择范围的任何移动,将滑块的移动限制为控件内预先确定的子范围。 例如,如果用户可用的值范围可能因用户所做的其他选择或根据可用资源而更改,则可以执行此操作。
跟踪栏通知消息
跟踪栏通过向父级发送 水平滚动 或 垂直滚动 消息来通知其父窗口的用户操作。 具有 水平方向 样式的 跟踪条发送 水平滚动 消息。 具有 垂直方向 样式的跟踪条发送 垂直滚动 消息。 水平滚动 或垂直滚动的 ③参数 参数的低序字包含通知代码。 对于松开滑块和拖动滑块通知代码, ③参数 参数的高序字指定滑块的位置。 对于所有其他通知代码,高序字为零;发送 滑块获取位置 消息以确定滑块位置。 ④数据 参数是跟踪条的句柄。 仅当用户使用键盘与跟踪条交互时,系统才会发送按左上键、按右下键、按首页键和按结尾键通知代码。 仅当用户使用鼠标时,才会发送松开滑块和拖动滑块通知代码。 在这两种情况下,都会发送 结束滑键、按上页键 和 按下页键 通知代码。 下表列出了跟踪栏通知代码,以及导致发送虚拟密钥代码通知 (虚拟 密钥代码或鼠标事件) 的事件。中文名字 | 英文名称 | 数值 | 释义 |
按左上键 | TB_LINEUP | 0 | 用户按下了向左键 (VK_LEFT) 或向上键 (VK_UP) 键。 |
按右下键 | TB_LINEDOWN | 1 | 用户按下了向右键 (VK_RIGHT) 或向下键 (VK_DOWN) 键。 |
按上页键 | TB_PAGEUP | 2 | 用户单击了滑块上方或左侧的通道 (VK_PRIOR)。 |
按下页键 | TB_PAGEDOWN | 3 | 用户单击了滑块下方或右侧的通道 (VK_NEXT)。 |
松开滑块 | TB_THUMBPOSITION | 4 | 跟踪条在收到 TB_THUMBTRACK 通知代码后收到 WM_LBUTTONUP。 |
拖动滑块 | TB_THUMBTRACK | 5 | 用户拖动了滑块。 |
按结尾键 | TB_BOTTOM | 7 | 用户按下了 END 键 (VK_END)。 |
搂首页键 | TB_TOP | 6 | 用户按下了 Home 键 (VK_HOME)。 |
结束滑键 | TB_ENDTRACK | 8 | 跟踪条收到 WM_KEYUP,这表示用户释放了发送相关虚拟键代码的键。 |
默认跟踪条消息处理
本部分介绍由跟踪条执行的窗口消息处理。
中文名字 | 英文名称 | 数值 | 释义 |
失去鼠标 | WM_CAPTURECHANGED | 0x215 | 如果在 WM_LBUTTONDOWN 处理期间设置了计时器,则终止计时器,并在必要时发送TB_THUMBPOSITION通知代码。 它始终发送TB_ENDTRACK通知代码。 |
窗口创建 | WM_CREATE | 0x1 | 执行其他初始化,例如将行大小、页面大小和刻度线频率设置为默认值。 |
程序关闭 | WM_DESTROY | 0x2 | 释放资源。 |
可用状态 | WM_ENABLE | 0xA | 重新绘制跟踪条窗口。 |
擦除背景 | WM_ERASEBKGND | 0x14 | 使用跟踪条的当前背景色擦除窗口背景。 |
切换控件 | WM_GETDLGCODE | 0x87 | 返回DLGC_WANTARROWS值。 |
键盘按下 | WM_KEYDOWN | 0x100 | 处理方向键,并根据需要发送TB_TOP、TB_BOTTOM、TB_PAGEUP、TB_PAGEDOWN、TB_LINEUP和TB_LINEDOWN通知代码。 |
键盘松开 | WM_KEYUP | 0x101 | 如果键是方向键之一,则发送TB_ENDTRACK通知代码。 |
失去焦点 | WM_KILLFOCUS | 0x8 | 重新绘制跟踪条窗口。 |
按下左键 | WM_LBUTTONDOWN | 0x201 | 将焦点和鼠标捕获设置为跟踪条。 如有必要,它会设置一个计时器,用于确定当用户在窗口中按住鼠标按钮时滑块向鼠标光标移动的速度。 |
释放左键 | WM_LBUTTONUP | 0x202 | 释放鼠标捕获并在 WM_LBUTTONDOWN 处理期间设置计时器并终止计时器。 如有必要,它会发送TB_THUMBPOSITION通知代码。 它始终发送TB_ENDTRACK通知代码。 |
鼠标移动 | WM_MOUSEMOVE | 0x200 | 移动滑块并在跟踪鼠标时发送TB_THUMBTRACK通知代码, (看到 WM_TIMER) 。 |
窗口重绘 | WM_PAINT | 0xF | 绘制跟踪条。 如果 wParam 参数为非 NULL,则控件假定该值是 HDC 并使用该设备上下文进行绘制。 |
获得焦点 | WM_SETFOCUS | 0x7 | 重新绘制跟踪条窗口。 |
窗口缩放 | WM_SIZE | 0x5 | 设置跟踪条的尺寸,如果没有足够的空间显示滑块,则删除滑块。 |
定时事件 | WM_TIMER | 0x113 | 检索鼠标位置并更新滑块的位置。 (仅在用户拖动 slider 时收到它。) |
配置更新 | WM_WININICHANGE | 0x1A | 初始化滑块维度。 |
跟踪条工具提示
使用 支持提示 样式创建的跟踪条具有默认的工具提示控件。 当用户使用鼠标拖动滑块时,工具提示将保持可见并显示当前值。 可以通过发送 滑块设置提示 消息将新的工具提示控件分配给跟踪条。 若要检索已分配的工具提示控件的句柄,请使用 滑块获取提示 消息。滑块条——通知消息:
中文名字 | 常量数值 | 英文名称 | 释义 |
控件自行绘制 | -12 | NM_CUSTOMDRAW | 通知控件的父窗口有关自定义绘制操作的信息。④数据:NMCUSTOMDRAW 结构的 dwItemSpec 成员:1边缘显示刻度,2拇指标记,3拇指沿轨道滑动 |
控件释放鼠标 | -16 | NM_RELEASEDCAPTURE | 通知控件的父窗口控件要释放鼠标捕捉 |
滑块位置更改 | -1502 | TRBN_THUMBPOSCHANGING | 通知跟踪条上的拇指位置正在更改。④数据:跟踪通知类 结构 |
水平滚动 | $0114 | WM_HSCROLL | 当窗口的标准水平滚动条产生一个滚动事件时,发送本消息给该窗口。③参数:低位=0点左键,1点右/下键,2点滑块左,3点滑块右,4松开滑块, 5拖动滑块,6按home,7按END,8释放按键;高位=滑块当前位置;④数据:控件 |
垂直滚动 | $0115 | WM_VSCROLL | 当窗口的标准垂直滚动条产生一个滚动事件时,发送本消息给该窗口。③参数:低位=0点上键,1点下键,2点滑块上方,3点滑块下方,4松开滑块, 5拖动滑块,6按home,7按END,8释放按键;高位=滑块当前位置;④数据:控件 |
滑块条——发送消息:
中文 | 英文名称 | 数值 | 释义 |
滑块获取位置 | TBM_GETPOS | 0x400 | 检索跟踪栏中滑块的当前逻辑位置。 逻辑位置是跟踪条最小到最大滑块位置范围内的整数值。③参数:0;④数据:0 |
滑块取最小位 | TBM_GETRANGEMIN | 0x401 | 检索跟踪栏中滑块的最小位置。③参数:0;④数据:0 |
滑块取最大位 | TBM_GETRANGEMAX | 0x402 | 检索跟踪栏中滑块的最大位置。③参数:0;④数据:0 |
滑块取刻度线 | TBM_GETTIC | 0x403 | 检索跟踪栏中刻度线的逻辑位置。 逻辑位置可以是跟踪条的最小到最大滑块位置范围内的任意整数值。③参数:索引0到2;④数据:0 |
滑块改刻度线 | TBM_SETTIC | 0x404 | 在指定逻辑位置的跟踪栏中设置刻度线。③参数:0;④数据:位置 |
滑块修改位置 | TBM_SETPOS | 0x405 | 设置跟踪栏中滑块的当前逻辑位置。③参数:是否重绘;④数据:新位置 |
滑块位置范围 | TBM_SETRANGE | 0x406 | 设置跟踪栏中滑块的最小和最大逻辑位置范围。③参数:是否重绘;④数据:最小/最大位置 |
滑块改最小位 | TBM_SETRANGEMIN | 0x407 | 设置跟踪栏中滑块的最小逻辑位置。③参数:是否重绘;④数据:最小位置 |
滑块改最大位 | TBM_SETRANGEMAX | 0x408 | 设置跟踪栏中滑块的最大逻辑位置。③参数:是否重绘;④数据:最大位置 |
滑块删刻度线 | TBM_CLEARTICS | 0x409 | 从跟踪条中删除当前刻度线。此消息不会删除由跟踪条自动创建的第一个和最后一个刻度线。③参数:是否重绘;④数据:0 |
滑块选择范围 | TBM_SETSEL | 0x40A | 设置跟踪栏中可用选择范围的起始和结束位置。③参数:是否重绘;④数据:起始/结束位置 |
滑块取起始位 | TBM_SETSELSTART | 0x40B | 设置跟踪栏中当前选择范围的起始逻辑位置。 如果跟踪条没有 范围显示 样式,则忽略此消息。③参数:是否重绘;④数据:起始位置 |
滑块取结束位 | TBM_SETSELEND | 0x40C | 设置跟踪栏中当前选择范围的结束逻辑位置。 如果跟踪条没有 范围显示 样式,则忽略此消息。③参数:是否重绘;④数据:结束位置 |
滑块刻度数组 | TBM_GETPTICS | 0x40E | 检索包含跟踪条刻度线位置的数组的地址。③参数:0;④数据:0 |
滑块刻度位置 | TBM_GETTICPOS | 0x40F | 检索跟踪栏中刻度线的当前物理位置。③参数:索引(不包括第一和最后);④数据:0 |
滑块刻度线数 | TBM_GETNUMTICS | 0x410 | 检索跟踪栏中的刻度线数。③参数:0;④数据:0 |
滑块改起始位 | TBM_GETSELSTART | 0x411 | 检索跟踪栏中当前选择范围的起始位置。③参数:0;④数据:0 |
滑块改结束位 | TBM_GETSELEND | 0x412 | 检索跟踪栏中当前选择范围的结束位置。③参数:0;④数据:0 |
滑块清除选择 | TBM_CLEARSEL | 0x413 | 清除跟踪栏中的当前选择范围。③参数:是否重绘;④数据:0 |
滑块间隔频率 | TBM_SETTICFREQ | 0x414 | 设置跟踪栏中刻度线的间隔频率。例如频率设置为2,则跟踪条范围中每隔一个增量显示一个刻度线。默认为1。③参数:频率;④数据:0 |
滑块取翻页量 | TBM_GETPAGESIZE | 0x415 | 检索跟踪条的滑块在响应键盘或鼠标输入时移动的逻辑位置数。③参数:0;④数据:0 |
滑块改翻页量 | TBM_SETPAGESIZE | 0x416 | 设置跟踪条的滑块在响应键盘或鼠标输入时移动的逻辑位置数。③参数:0;④数据:增量 |
滑块取移动量 | TBM_GETLINESIZE | 0x417 | 检索跟踪条滑块在响应键盘或鼠标输入时移动的逻辑位置数。③参数:0;④数据:0 |
滑块改移动量 | TBM_SETLINESIZE | 0x418 | 设置跟踪条滑块在响应键盘或鼠标输入时移动的逻辑位置数。③参数:0;④数据:增量 |
滑块边框矩形 | TBM_GETTHUMBRECT | 0x419 | 检索跟踪栏中滑块的边框的大小和位置。③参数:0;④数据:矩形类 |
滑块通道矩形 | TBM_GETCHANNELRECT | 0x41A | 检索跟踪条通道的边框的大小和位置。通道是滑块移动的区域。③参数:0;④数据:矩形类 |
滑块修改长度 | TBM_SETTHUMBLENGTH | 0x41B | 设置跟踪栏中滑块的长度。如果跟踪条没有 滑块调整 样式,则忽略此消息。③参数:长度;④数据:0 |
滑块获取长度 | TBM_GETTHUMBLENGTH | 0x41C | 检索跟踪栏中滑块的长度(以像素为单位)。③参数:0;④数据:0 |
滑块设置提示 | TBM_SETTOOLTIPS | 0x41D | 将工具提示控件分配给跟踪条控件。③参数:提示控件;④数据:0 |
滑块获取提示 | TBM_GETTOOLTIPS | 0x41E | 检索分配给跟踪栏的工具提示控件的句柄(如果有)。③参数:0;④数据:0 |
滑块提示方位 | TBM_SETTIPSIDE | 0x41F | 放置使用支持提示样式跟踪条控件使用的工具提示控件。③参数:0上方,1左边,2下边,3右边;④数据:0 |
滑块修改伴窗 | TBM_SETBUDDY | 0x420 | 将窗口分配为跟踪条控件的伙伴窗口。伙伴窗口将自动显示在相对于控件方向的位置。③参数:真=伙伴在左/上,假=伙伴在右/下;④数据:窗口 |
滑块获取伴窗 | TBM_GETBUDDY | 0x421 | 检索给定位置的跟踪条控件伙伴窗口的句柄。指定位置相对于控件的方向 (水平或垂直) 。③参数:真=取左/上伙伴,假=取右/下伙伴;④数据:0 |
滑块改变位置 | TBM_SETPOSNOTIFY | 0x422 | 设置跟踪栏中滑块的当前逻辑位置。③参数:0;④数据:新位置 |
控件设置宽字 | TBM_SETUNICODEFORMAT | 0x2005 | 设置控件的 Unicode 字符格式标志。③参数:是否宽字;④数据:0; |
控件获取宽字 | TBM_GETUNICODEFORMAT | 0x2006 | 获取控件的 Unicode 字符格式标志。③参数:0;④数据:0; |
滑块条——自定义绘制:
本部分列出了用于标识滑块条控件部分的值。
中文 | 英文名称 | 数值 | 释义 |
通道 | TBCD_CHANNEL | 0x3 | 标识跟踪条控件的拇指标记滑行的通道。 |
滑块 | TBCD_THUMB | 0x2 | 标识跟踪条控件的拇指标记。 这是用户移动的控件的一部分。 |
刻度 | TBCD_TICS | 0x1 | 标识沿跟踪条控件边缘显示的刻度线。 |
滑块条——控件样式:
中文名字 | 英文名称 | 数值 | 释义 |
显刻度线 | TBS_AUTOTICKS | 0x1 | 跟踪条控件在其值范围中的每个增量中都有一个刻度线。 |
垂直方向 | TBS_VERT | 0x2 | 跟踪条控件垂直方向。 |
水平方向 | TBS_HORZ | 0 | 跟踪条控件是水平方向的。这是默认方向。 |
左上刻度 | TBS_TOP | 0x4 | 跟踪条控件在控件上方显示刻度线。 此样式仅对 水平方向 有效。 |
下方刻度 | TBS_BOTTOM | 0 | 跟踪条控件在控件下方显示刻度线。 此样式仅对 水平方向 有效。 |
左边刻度 | TBS_LEFT | 0x4 | 跟踪条控件在控件左侧显示刻度线。 此样式仅对 垂直方向 有效。 |
右边刻度 | TBS_RIGHT | 0 | 跟踪条控件在控件右侧显示刻度线。 此样式仅对 垂直方向 有效。 |
两边刻度 | TBS_BOTH | 0x8 | 跟踪条控件在控件的两侧显示刻度线。 与 水平方向 一起使用时,这既是顶部,也是底部,如果与 垂直方向 一起使用,则为左和右。 |
不显刻度 | TBS_NOTICKS | 0x10 | 跟踪条控件不显示任何刻度线。 |
范围显示 | TBS_ENABLESELRANGE | 0x20 | 跟踪条控件仅显示选择范围。 选择范围起始和结束位置处的刻度线显示为三角形 (而不是) 垂直虚线,并突出显示选择范围。 |
滑块调整 | TBS_FIXEDLENGTH | 0x40 | 跟踪条控件允许随 滑块修改长度 消息更改滑块的大小。 |
不显滑块 | TBS_NOTHUMB | 0x8 | 跟踪条控件不显示滑块。 |
支持提示 | TBS_TOOLTIPS | 0x100 | 版本 4.70。 跟踪条控件支持工具提示。 使用此样式创建跟踪条控件时,它会自动创建显示滑块当前位置的默认工具提示控件。 可以使用 滑块提示方位 消息更改工具提示的显示位置。 |
反向跟踪 | TBS_REVERSED | 0x200 | 版本 5.80。此样式位用于“反向”跟踪条,其中较小的数字表示“较高”,较大的数字表示“较低”。它对控件没有影响;它只是一个标签,可以检查以确定跟踪条是正常还是反向。 |
反转方向 | TBS_DOWNISLEFT | 0x400 | 默认情况下,跟踪条控件使用向下等于右,向上等于左。 使用此样式来反转默认值,使向下等于左,向上等于右。 |
贴靠通知 | TBS_NOTIFYBEFOREMOVE | 0x800 | 版本 6.00 和 Windows Vista。 由于用户操作,跟踪条在重新定位滑块之前应通知父级, (启用贴靠) 。 |
自绘背景 | TBS_TRANSPARENTBKGND | 0x1000 | 版本 6.00 和 Windows Vista。 背景由父级通过 绘客户区 消息绘制。 |
跟踪通知类——结构定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
跟踪通知类 | NMTRBTHUMBPOSCHANGING | 8 | 包含有关跟踪条更改通知的信息。 此消息随 滑块位置更改 通知一起发送。 |
跟踪通知类——成员表 | |||
---|---|---|---|
中文 | 英文 | 类型 | 作用解释 |
通知 | hdr | 通知类 | 描述通知的 通知类。 |
定位 | dwPos | 整数 | 定位在跟踪条上。 |
原因 | nReason | 整数 | 作为以下值之一的移动类型 |