极语言官方网站

滑块条——使用简介

跟踪条是一个窗口,其中包含一个滑块 (有时称为通道中的拇指) 和可选的刻度线。

当用户使用鼠标或方向键移动滑块时,跟踪条会发送通知消息以指示更改。

当希望用户选择一个离散无符号整数值或一个范围内的一组连续无符号整数值时,跟踪栏非常有用。

例如,可以使用跟踪条来允许用户通过将滑块移动到给定刻度线来设置键盘的重复速率。 下图显示了一个典型的跟踪条。


跟踪栏中的滑块以创建时指定的增量移动。 此范围内的值称为逻辑单元。

例如,如果指定跟踪条的逻辑单元范围为 0 到 5,

则滑块只能占据六个位置:跟踪条左侧的一个位置,以及范围中每个增量的一个位置。

通常,每个位置都由刻度线标识;但是,刻度线的数量是任意的,并且可能小于逻辑位置的数量。

使用 创建窗口 函数创建跟踪条,指定 "msctls_trackbar32" 窗口类。

创建跟踪栏后,可以使用跟踪条消息来设置和检索其许多属性。

可进行的更改包括设置滑块的最小和最大位置、绘制刻度线、设置选择范围以及重新定位滑块。


选择范围

如果创建具有 TBS_ENABLESELRANGE样式的 跟踪条,则可以指定选择范围。

跟踪条突出显示选择范围,并在开始和结束位置显示三角形刻度线,如下图所示。


跟踪条的选择范围不会以任何方式影响其功能。 由应用程序来实现范围。

可以通过以下方法之一执行此操作:

使用选择范围使用户能够设置某些参数的最大值和最小值。

例如,用户可以将滑块移动到某个位置,然后单击标有“Max”的按钮。

然后,应用程序设置选择范围以显示用户选择的值。

通过处理 水平滚动 或 垂直滚动 通知并禁止任何超出选择范围的任何移动,将滑块的移动限制为控件内预先确定的子范围。

例如,如果用户可用的值范围可能因用户所做的其他选择或根据可用资源而更改,则可以执行此操作。


跟踪栏通知消息

跟踪栏通过向父级发送 水平滚动 或 垂直滚动 消息来通知其父窗口的用户操作。

具有 水平方向 样式的 跟踪条发送 水平滚动 消息。

具有 垂直方向 样式的跟踪条发送 垂直滚动 消息。

水平滚动 或垂直滚动的 ③参数 参数的低序字包含通知代码。

对于松开滑块和拖动滑块通知代码, ③参数 参数的高序字指定滑块的位置。

对于所有其他通知代码,高序字为零;发送 滑块获取位置 消息以确定滑块位置。 ④数据 参数是跟踪条的句柄。

仅当用户使用键盘与跟踪条交互时,系统才会发送按左上键、按右下键、按首页键和按结尾键通知代码。

仅当用户使用鼠标时,才会发送松开滑块和拖动滑块通知代码。

在这两种情况下,都会发送 结束滑键、按上页键 和 按下页键 通知代码。

下表列出了跟踪栏通知代码,以及导致发送虚拟密钥代码通知 (虚拟 密钥代码或鼠标事件) 的事件。


滑块条——移动类型:

中文名字英文名称数值释义
按左上键TB_LINEUP0用户按下了向左键 (VK_LEFT) 或向上键 (VK_UP) 键。
按右下键TB_LINEDOWN1用户按下了向右键 (VK_RIGHT) 或向下键 (VK_DOWN) 键。
按上页键TB_PAGEUP2用户单击了滑块上方或左侧的通道 (VK_PRIOR)。
按下页键TB_PAGEDOWN3用户单击了滑块下方或右侧的通道 (VK_NEXT)。
松开滑块TB_THUMBPOSITION4跟踪条在收到 TB_THUMBTRACK 通知代码后收到 WM_LBUTTONUP。
拖动滑块TB_THUMBTRACK5用户拖动了滑块。
按结尾键TB_BOTTOM7用户按下了 END 键 (VK_END)。
搂首页键TB_TOP6用户按下了 Home 键 (VK_HOME)。
结束滑键TB_ENDTRACK8跟踪条收到 WM_KEYUP,这表示用户释放了发送相关虚拟键代码的键。

默认跟踪条消息处理


本部分介绍由跟踪条执行的窗口消息处理。
中文名字英文名称数值释义
失去鼠标WM_CAPTURECHANGED0x215如果在 WM_LBUTTONDOWN 处理期间设置了计时器,则终止计时器,并在必要时发送TB_THUMBPOSITION通知代码。 它始终发送TB_ENDTRACK通知代码。
窗口创建WM_CREATE0x1执行其他初始化,例如将行大小、页面大小和刻度线频率设置为默认值。
程序关闭WM_DESTROY0x2释放资源。
可用状态WM_ENABLE0xA重新绘制跟踪条窗口。
擦除背景WM_ERASEBKGND0x14使用跟踪条的当前背景色擦除窗口背景。
切换控件WM_GETDLGCODE0x87返回DLGC_WANTARROWS值。
键盘按下WM_KEYDOWN0x100处理方向键,并根据需要发送TB_TOP、TB_BOTTOM、TB_PAGEUP、TB_PAGEDOWN、TB_LINEUP和TB_LINEDOWN通知代码。
键盘松开WM_KEYUP0x101如果键是方向键之一,则发送TB_ENDTRACK通知代码。
失去焦点WM_KILLFOCUS0x8重新绘制跟踪条窗口。
按下左键WM_LBUTTONDOWN0x201将焦点和鼠标捕获设置为跟踪条。 如有必要,它会设置一个计时器,用于确定当用户在窗口中按住鼠标按钮时滑块向鼠标光标移动的速度。
释放左键WM_LBUTTONUP0x202释放鼠标捕获并在 WM_LBUTTONDOWN 处理期间设置计时器并终止计时器。 如有必要,它会发送TB_THUMBPOSITION通知代码。 它始终发送TB_ENDTRACK通知代码。
鼠标移动WM_MOUSEMOVE0x200移动滑块并在跟踪鼠标时发送TB_THUMBTRACK通知代码, (看到 WM_TIMER) 。
窗口重绘WM_PAINT0xF绘制跟踪条。 如果 wParam 参数为非 NULL,则控件假定该值是 HDC 并使用该设备上下文进行绘制。
获得焦点WM_SETFOCUS0x7重新绘制跟踪条窗口。
窗口缩放WM_SIZE0x5设置跟踪条的尺寸,如果没有足够的空间显示滑块,则删除滑块。
定时事件WM_TIMER0x113检索鼠标位置并更新滑块的位置。 (仅在用户拖动 slider 时收到它。)
配置更新WM_WININICHANGE0x1A初始化滑块维度。

跟踪条工具提示

使用 支持提示 样式创建的跟踪条具有默认的工具提示控件。

当用户使用鼠标拖动滑块时,工具提示将保持可见并显示当前值。

可以通过发送 滑块设置提示 消息将新的工具提示控件分配给跟踪条。

若要检索已分配的工具提示控件的句柄,请使用 滑块获取提示 消息。


滑块条——通知消息:

中文名字常量数值英文名称释义
控件自行绘制-12NM_CUSTOMDRAW通知控件的父窗口有关自定义绘制操作的信息。④数据:NMCUSTOMDRAW 结构的 dwItemSpec 成员:1边缘显示刻度,2拇指标记,3拇指沿轨道滑动
控件释放鼠标-16NM_RELEASEDCAPTURE通知控件的父窗口控件要释放鼠标捕捉
滑块位置更改-1502TRBN_THUMBPOSCHANGING通知跟踪条上的拇指位置正在更改。④数据:跟踪通知类 结构
水平滚动$0114WM_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_GETPOS0x400检索跟踪栏中滑块的当前逻辑位置。 逻辑位置是跟踪条最小到最大滑块位置范围内的整数值。③参数:0;④数据:0
滑块取最小位TBM_GETRANGEMIN0x401检索跟踪栏中滑块的最小位置。③参数:0;④数据:0
滑块取最大位TBM_GETRANGEMAX0x402检索跟踪栏中滑块的最大位置。③参数:0;④数据:0
滑块取刻度线TBM_GETTIC0x403检索跟踪栏中刻度线的逻辑位置。 逻辑位置可以是跟踪条的最小到最大滑块位置范围内的任意整数值。③参数:索引0到2;④数据:0
滑块改刻度线TBM_SETTIC0x404在指定逻辑位置的跟踪栏中设置刻度线。③参数:0;④数据:位置
滑块修改位置TBM_SETPOS0x405设置跟踪栏中滑块的当前逻辑位置。③参数:是否重绘;④数据:新位置
滑块位置范围TBM_SETRANGE0x406设置跟踪栏中滑块的最小和最大逻辑位置范围。③参数:是否重绘;④数据:最小/最大位置
滑块改最小位TBM_SETRANGEMIN0x407设置跟踪栏中滑块的最小逻辑位置。③参数:是否重绘;④数据:最小位置
滑块改最大位TBM_SETRANGEMAX0x408设置跟踪栏中滑块的最大逻辑位置。③参数:是否重绘;④数据:最大位置
滑块删刻度线TBM_CLEARTICS0x409从跟踪条中删除当前刻度线。此消息不会删除由跟踪条自动创建的第一个和最后一个刻度线。③参数:是否重绘;④数据:0
滑块选择范围TBM_SETSEL0x40A设置跟踪栏中可用选择范围的起始和结束位置。③参数:是否重绘;④数据:起始/结束位置
滑块取起始位TBM_SETSELSTART0x40B设置跟踪栏中当前选择范围的起始逻辑位置。 如果跟踪条没有 范围显示 样式,则忽略此消息。③参数:是否重绘;④数据:起始位置
滑块取结束位TBM_SETSELEND0x40C设置跟踪栏中当前选择范围的结束逻辑位置。 如果跟踪条没有 范围显示 样式,则忽略此消息。③参数:是否重绘;④数据:结束位置
滑块刻度数组TBM_GETPTICS0x40E检索包含跟踪条刻度线位置的数组的地址。③参数:0;④数据:0
滑块刻度位置TBM_GETTICPOS0x40F检索跟踪栏中刻度线的当前物理位置。③参数:索引(不包括第一和最后);④数据:0
滑块刻度线数TBM_GETNUMTICS0x410检索跟踪栏中的刻度线数。③参数:0;④数据:0
滑块改起始位TBM_GETSELSTART0x411检索跟踪栏中当前选择范围的起始位置。③参数:0;④数据:0
滑块改结束位TBM_GETSELEND0x412检索跟踪栏中当前选择范围的结束位置。③参数:0;④数据:0
滑块清除选择TBM_CLEARSEL0x413清除跟踪栏中的当前选择范围。③参数:是否重绘;④数据:0
滑块间隔频率TBM_SETTICFREQ0x414设置跟踪栏中刻度线的间隔频率。例如频率设置为2,则跟踪条范围中每隔一个增量显示一个刻度线。默认为1。③参数:频率;④数据:0
滑块取翻页量TBM_GETPAGESIZE0x415检索跟踪条的滑块在响应键盘或鼠标输入时移动的逻辑位置数。③参数:0;④数据:0
滑块改翻页量TBM_SETPAGESIZE0x416设置跟踪条的滑块在响应键盘或鼠标输入时移动的逻辑位置数。③参数:0;④数据:增量
滑块取移动量TBM_GETLINESIZE0x417检索跟踪条滑块在响应键盘或鼠标输入时移动的逻辑位置数。③参数:0;④数据:0
滑块改移动量TBM_SETLINESIZE0x418设置跟踪条滑块在响应键盘或鼠标输入时移动的逻辑位置数。③参数:0;④数据:增量
滑块边框矩形TBM_GETTHUMBRECT0x419检索跟踪栏中滑块的边框的大小和位置。③参数:0;④数据:矩形类
滑块通道矩形TBM_GETCHANNELRECT0x41A检索跟踪条通道的边框的大小和位置。通道是滑块移动的区域。③参数:0;④数据:矩形类
滑块修改长度TBM_SETTHUMBLENGTH0x41B设置跟踪栏中滑块的长度。如果跟踪条没有 滑块调整 样式,则忽略此消息。③参数:长度;④数据:0
滑块获取长度TBM_GETTHUMBLENGTH0x41C检索跟踪栏中滑块的长度(以像素为单位)。③参数:0;④数据:0
滑块设置提示TBM_SETTOOLTIPS0x41D将工具提示控件分配给跟踪条控件。③参数:提示控件;④数据:0
滑块获取提示TBM_GETTOOLTIPS0x41E检索分配给跟踪栏的工具提示控件的句柄(如果有)。③参数:0;④数据:0
滑块提示方位TBM_SETTIPSIDE0x41F放置使用支持提示样式跟踪条控件使用的工具提示控件。③参数:0上方,1左边,2下边,3右边;④数据:0
滑块修改伴窗TBM_SETBUDDY0x420将窗口分配为跟踪条控件的伙伴窗口。伙伴窗口将自动显示在相对于控件方向的位置。③参数:真=伙伴在左/上,假=伙伴在右/下;④数据:窗口
滑块获取伴窗TBM_GETBUDDY0x421检索给定位置的跟踪条控件伙伴窗口的句柄。指定位置相对于控件的方向 (水平或垂直) 。③参数:真=取左/上伙伴,假=取右/下伙伴;④数据:0
滑块改变位置TBM_SETPOSNOTIFY0x422设置跟踪栏中滑块的当前逻辑位置。③参数:0;④数据:新位置
控件设置宽字TBM_SETUNICODEFORMAT0x2005设置控件的 Unicode 字符格式标志。③参数:是否宽字;④数据:0;
控件获取宽字TBM_GETUNICODEFORMAT0x2006获取控件的 Unicode 字符格式标志。③参数:0;④数据:0;

滑块条——自定义绘制:


本部分列出了用于标识滑块条控件部分的值。
中文英文名称数值释义
通道TBCD_CHANNEL0x3标识跟踪条控件的拇指标记滑行的通道。
滑块TBCD_THUMB0x2标识跟踪条控件的拇指标记。 这是用户移动的控件的一部分。
刻度TBCD_TICS0x1标识沿跟踪条控件边缘显示的刻度线。

滑块条——控件样式:

中文名字英文名称数值释义
显刻度线TBS_AUTOTICKS0x1跟踪条控件在其值范围中的每个增量中都有一个刻度线。
垂直方向TBS_VERT0x2跟踪条控件垂直方向。
水平方向TBS_HORZ0跟踪条控件是水平方向的。这是默认方向。
左上刻度TBS_TOP0x4跟踪条控件在控件上方显示刻度线。 此样式仅对 水平方向 有效。
下方刻度TBS_BOTTOM0跟踪条控件在控件下方显示刻度线。 此样式仅对 水平方向 有效。
左边刻度TBS_LEFT0x4跟踪条控件在控件左侧显示刻度线。 此样式仅对 垂直方向 有效。
右边刻度TBS_RIGHT0跟踪条控件在控件右侧显示刻度线。 此样式仅对 垂直方向 有效。
两边刻度TBS_BOTH0x8跟踪条控件在控件的两侧显示刻度线。 与 水平方向 一起使用时,这既是顶部,也是底部,如果与 垂直方向 一起使用,则为左和右。
不显刻度TBS_NOTICKS0x10跟踪条控件不显示任何刻度线。
范围显示TBS_ENABLESELRANGE0x20跟踪条控件仅显示选择范围。 选择范围起始和结束位置处的刻度线显示为三角形 (而不是) 垂直虚线,并突出显示选择范围。
滑块调整TBS_FIXEDLENGTH0x40跟踪条控件允许随 滑块修改长度 消息更改滑块的大小。
不显滑块TBS_NOTHUMB0x8跟踪条控件不显示滑块。
支持提示TBS_TOOLTIPS0x100版本 4.70。 跟踪条控件支持工具提示。 使用此样式创建跟踪条控件时,它会自动创建显示滑块当前位置的默认工具提示控件。 可以使用 滑块提示方位 消息更改工具提示的显示位置。
反向跟踪TBS_REVERSED0x200版本 5.80。此样式位用于“反向”跟踪条,其中较小的数字表示“较高”,较大的数字表示“较低”。它对控件没有影响;它只是一个标签,可以检查以确定跟踪条是正常还是反向。
反转方向TBS_DOWNISLEFT0x400默认情况下,跟踪条控件使用向下等于右,向上等于左。 使用此样式来反转默认值,使向下等于左,向上等于右。
贴靠通知TBS_NOTIFYBEFOREMOVE0x800版本 6.00 和 Windows Vista。 由于用户操作,跟踪条在重新定位滑块之前应通知父级, (启用贴靠) 。
自绘背景TBS_TRANSPARENTBKGND0x1000版本 6.00 和 Windows Vista。 背景由父级通过 绘客户区 消息绘制。

跟踪通知类——结构定义:
中文名字英文名称长度作用解释
跟踪通知类NMTRBTHUMBPOSCHANGING8包含有关跟踪条更改通知的信息。 此消息随 滑块位置更改 通知一起发送。
跟踪通知类——成员表
中文英文类型作用解释
通知hdr通知类描述通知的 通知类
定位dwPos整数定位在跟踪条上。
原因nReason整数作为以下值之一的移动类型