📄 chap6_2.htm
字号:
<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> <p ALIGN="JUSTIFY"><span style="font-size: 9pt">typedef struct _TV_ITEM </span></p> <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{ tvi </span></p> <blockquote> <p ALIGN="left"><span style="font-size: 9pt">UINT mask; /*包含一些屏蔽位(下面的括号中列出)的组合,用来表明结构的哪些成员是有效的*/</span></p> </blockquote> <blockquote> <p ALIGN="JUSTIFY"><span style="font-size: 9pt">HTREEITEM hItem; //表项的句柄(TVIF_HANDLE)</span></p> <p ALIGN="JUSTIFY"><span style="font-size: 9pt">UINT state; //表项的状态(TVIF_STATE)</span></p> <p ALIGN="JUSTIFY"><span style="font-size: 9pt">UINT stateMask; //状态的屏蔽组合(TVIF_STATE)</span></p> <p ALIGN="JUSTIFY"><span style="font-size: 9pt">LPSTR pszText; //表项的标题正文(TVIF_TEXT)</span></p> <p ALIGN="JUSTIFY"><span style="font-size: 9pt">int cchTextMax; //正文缓冲区的大小(TVIF_TEXT)</span></p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -