📄 chap6_2.htm
字号:
95中,大量使用了轨道条控件,例如,在控制面板中的键盘和鼠标设置程序中就使用了轨道条控件,如图6.3所示.轨道条不仅接受鼠标输入,也可以接受象左右箭头键、PgUp和PgDown这样的键盘输入.</span></p>
<p ALIGN="center"><span style="font-size: 9pt"><img src="T6_3.gif"
alt="T6_3.tif (182219 bytes)" WIDTH="403" HEIGHT="421"></span></p>
<p ALIGN="center"><span style="font-size: 9pt">图6.3
鼠标设置程序中的轨道条控件</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">与选择按钮不同,轨道条是一种模糊型的输入控件,用户不需要进行精确的选择,只要大致调整一下大小就行了.轨道条的这种特性非常符合人的行为习惯,因而在有些情况下是很有用,例如,对于音量的调节,显然用轨道条比用旋转按钮更符合人的日常习惯.</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">轨道条的滑尺的移动具有离散性.例如,如果指定轨道条的范围是5,那么滑尺只能在包括轨道条两端在内的6个均匀的位置上移动.当然,如果范围很大,则用户就感觉不出是离散的了.</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">轨道条控件与传统的滚动条控件有很多相似之处,实际上,前者是对后者的一种改进.除了表6.22列出的通知消息外,轨道条控件是依靠WM_HSCROLL和WM_VSCROLL来发送与滑尺有关的通知消息的,并且通知消息与滚动条极为相似.通知消息包括TB_BOTTOM、TB_LINEDOWN、TB_LINEUP、TB_TOP、TB_PAGEDOWN、TB_PAGEUP、TB_ENDTRACK、TB_THUMBPOSITION、TB_THUMBTRACK.对照滚动条的通知消息,读者不难明白这些消息码的含义.其中前四个消息只有在用键盘移动滑尺时才会发出,最后两个消息只有在用鼠标拖动滑尺时才会发出.与滚动条不同的是,Windows会自动把滑尺移动到新位置上.</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">MFC的CSliderCtrl类封装了轨道条.CSliderCtrl类的Create成员函数负责控件的创建,该函数的声明为</span></p>
<blockquote>
<blockquote>
<blockquote>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">BOOL Create( DWORD dwStyle, const
RECT& rect, CWnd* pParentWnd, UINT nID );</span></p>
</blockquote>
</blockquote>
</blockquote>
<p><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">参数参数dwStyle是如表6.24所示的各种控件风格的组合.</span></p>
<p ALIGN="JUSTIFY"><b><span style="font-size: 9pt"> </span></p>
<p ALIGN="CENTER"><span style="font-size: 9pt">表6.24 轨道条控件的风格</span></b></p>
<table BORDER="1" CELLSPACING="1" CELLPADDING="1" WIDTH="577">
<tr>
<td WIDTH="32%"><b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">控件风格</span></b></td>
<td WIDTH="68%"><b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">含义</span></b></td>
</tr>
<tr>
<td WIDTH="32%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TBS_HORZ</span></td>
<td WIDTH="68%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">指定一个水平轨道条.该风格是默认的.</span></td>
</tr>
<tr>
<td WIDTH="32%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TBS_VERT</span></td>
<td WIDTH="68%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">指定一个垂直轨道条.</span></td>
</tr>
<tr>
<td WIDTH="32%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TBS_AUTOTICKS</span></td>
<td WIDTH="68%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">在范围设定后,自动为轨道条加上刻度.</span></td>
</tr>
<tr>
<td WIDTH="32%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TBS_NOTICKS</span></td>
<td WIDTH="68%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">轨道条无刻度.</span></td>
</tr>
<tr>
<td WIDTH="32%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TBS_BOTTOM</span></td>
<td WIDTH="68%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">在水平轨道条的底部显示刻度,可与TBS_TOP一起使用.</span></td>
</tr>
<tr>
<td WIDTH="32%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TBS_TOP</span></td>
<td WIDTH="68%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">在水平轨道条的顶部显示刻度,可与TBS_BOTTOM一起使用.</span></td>
</tr>
<tr>
<td WIDTH="32%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TBS_RIGHT</span></td>
<td WIDTH="68%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">在垂直轨道条的右侧显示刻度,可与TBS_LEFT一起使用.</span></td>
</tr>
<tr>
<td WIDTH="32%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TBS_LEFT</span></td>
<td WIDTH="68%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">在垂直轨道条的左侧显示刻度,可与TBS_RIGHT一起使用.</span></td>
</tr>
<tr>
<td WIDTH="32%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TBS_BOTH</span></td>
<td WIDTH="68%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">在轨道条的上下部或左右两侧都显示刻度.</span></td>
</tr>
<tr>
<td WIDTH="32%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">TBS_ENABLESELRANGE</span></td>
<td WIDTH="68%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">在轨道条中显示一个选择范围.</span></td>
</tr>
</table>
<p><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">除上表的风格外,一般还要为轨道条指定WS_CHILD和WS_VISIBLE风格.要创建一个具有刻度的水平轨道条,一般应指定风格为WS_CHILD|WS_VISIBLE|TBS_HORZ|
TBS_AUTOTICKS.对于用对话框模板创建的轨道条控件,可以在控件的属性对话框中指定上表中列出的控件风格。例如,在属性对话框中选择Autoticks,相当于指定了TBS_AUTOTICKS风格.</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">通过调用CSliderCtrl类的成员函数,可以对轨道条进行查询和设置:</span></p>
<blockquote>
<blockquote>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">用GetRange和SetRange来查询和设置轨道条的范围,缺省的范围是0-100.函数的声明为<br>
void GetRange( int& nMin, int& nMax ) const;<br>
void SetRange( int nMin, int nMax, BOOL bRedraw = FALSE );<br>
参数nMin和nMax分别是最小和最大值,参数bRedraw为TRUE时将重绘控件.</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">用GetPos和SetPos来查询和设置轨道条的当前值.函数的声明为<br>
int GetPos( ) const;<br>
void SetPos( int nPos );</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">用GetLineSize和SetLineSize来查询和设置在按一下左箭头键或右箭头键时滑尺的移动量,该移动量的缺省值是1个单位.函数的声明为<br>
int GetLineSize( ) const;<br>
int SetLineSize( int nSize );</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">用GetPageSize和SetPageSize来查询和设置滑尺的块移动量,块移动量是指当按下PgUp或PgDown键时滑尺的移动量.函数的声明为<br>
int GetPageSize( ) const;<br>
int SetPageSize( int nSize );</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">用SetTicFreq设置轨道条的刻度的频度.缺省的频度是每个单位都有一个刻度,在范围较大时,为了使刻度不至于过密,需要调用该函数设置一个合理的频度.函数的声明为<br>
void SetTicFreq( int nFreq );<br>
参数nFreq说明了两个刻度之间的间隔.</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">用函数SetTic来在指定位置设置刻度.Windows自动显示的刻度是均匀的,利用该函数可以人为设置不均匀的刻度,该函数的声明为<br>
BOOL SetTic( int nTic );</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">用函数ClearTics来清除所有的刻度.该函数的声明为<br>
void ClearTics( BOOL bRedraw = FALSE );</span></p>
</blockquote>
</blockquote>
<p><b><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"></b><span style="font-size: 9pt"><font color="#3973DE">6.2.4
进度条控件</font></span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">进度条(Progress Bar)的用途是向用户显示程序的进度.进度条是Win32控件中最简单的控件,只需少数设置即可.Windows
95中使用进度条的一个例子是磁盘扫描(ScanDisk)程序,如图6.4所示.进度条显示的数据是不精确的,它是一种模糊型的输出控件.</span></p>
<p ALIGN="center"><span style="font-size: 9pt"><img src="T6_4.gif"
alt="T6_4.tif (172432 bytes)" WIDTH="465" HEIGHT="348"></span></p>
<p ALIGN="center"><span style="font-size: 9pt">图6.4 磁盘扫描程序中的进度条</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">MFC的CProgressCtrl类封装了进度条控件.该类的Create成员函数负责创建控件,该函数的声明为</span></p>
<blockquote>
<blockquote>
<blockquote>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">BOOL Create( DWORD dwStyle, const
RECT& rect, CWnd* pParentWnd, UINT nID );</span></p>
</blockquote>
</blockquote>
</blockquote>
<p><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">进度条没有专门的风格,所以参数dwStyle只能指定普通的窗口风格,一般只需指定WS_CHILD|WS_VISIBLE就可以了.</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">CProgressCtrl类提供了少量的成员函数用来设置进度条:</span></p>
<blockquote>
<blockquote>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">void SetRange( int nLower, int nUpper );<br>
该函数用来设置进度条的范围.参数nLow和nUpper分别指定了最小和最大值,缺省时进度条的范围是0-100.</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">int SetPos( int nPos );<br>
用来设置进度条的当前进度.函数返回的是进度条的前一个进度.</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">int StepIt( );<br>
使进度增加一个步长,步长值是由SetStep函数设置的,缺省的步长值是10.函数返回进度条的前一个进度.</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">int SetStep( int nStep );<br>
用来设置步长值.函数返回原来的步长值.</span></p>
</blockquote>
</blockquote>
<p><b><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"></b><span style="font-size: 9pt"><font color="#3973DE">6.2.5
树形视图控件</font></span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">树形视图(Tree View)是一种特殊的列表,它能以树形分层结构显示数据.在Windows
95的资源管理器(Windows Explorer)的左侧窗口中就有一个用于显示目录的典型的树形视图,如图6.5所示.在树形视图中,每个表项显示一个标题(Label),有时还会显示一幅图象,图象和标题分别提供了对数据的形象和抽象描述.通过图6.5可以看出,树形视图可以很清楚的显示出数据的分支和层次关系.由此可见,树形视图非常适合显示象目录,网络结构等这样的复杂数据.传统的列表框不能分层显示数据,因此树形视图可以看作是对列表框的一种重要改进.</span></p>
<p ALIGN="center"><span style="font-size: 9pt"><img src="T6_5.gif"
alt="T6_5.tif (269628 bytes)" WIDTH="488" HEIGHT="351"></span></p>
<p ALIGN="center"><span style="font-size: 9pt">图6.5
资源管理器中的树形视图和列表视图</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt"><br>
树形视图是一种复杂的控件,它的复杂性体现在数据项之间具有分支和层次关系.例如,如果要向树形视图中加入新的项,则必需描述出该项与树形视图中已有项的相互关系,而不可能象往列表框中加入新项那样,调用一下AddString就完事了.另外,树形视图可以在每一项标题的左边显示一幅图象,这使控件显得更加形象生动,但同时也增加了控件的复杂程度.</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">在讨论如何使用树形视图控件以前,有必要先介绍一下与该控件有关的一些数据类型:</span></p>
<blockquote>
<blockquote>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">HTREEITEM型句柄.Windows用HTREEITEM型句柄来代表树形视图的一项,程序通过HTREEITEM句柄来区分和访问树形视图的各个项.</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">TV_ITEM结构.该结构用来描述一个表项,它包含了表项的各种属性,其定义如下</span></p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -