⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap6_1.htm

📁 VC++编程实例。非常详细
💻 HTM
📖 第 1 页 / 共 5 页
字号:
      <blockquote>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">BOOL Create( DWORD dwStyle, const 
        RECT&amp; rect, CWnd* pParentWnd, UINT nID );</span></p>
      </blockquote>
    </blockquote>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">参数dwStyle指定了控件的风格.rect说明了控件的位置和尺寸.pParentWnd指向父窗口,该参数不能为NULL。nID则说明了控件的ID。如果创建成功,该函数返回TRUE,否则返回FALSE.</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">要创建一个普通的水平滚动条控件,应指定风格WS_CHILD|WS_VISIBLE|BS_HORZ.要创建一个普通的垂直滚动条控件,应指定风格WS_CHILD|WS_VISIBLE|BS_VERT.</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">主要的CScrollBar类成员函数如下所示:</span></p>
    <blockquote>
      <blockquote>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">int GetScrollPos( ) const;<br>
        该函数返回滚动框的当前位置.若操作失败则返回0.</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">int SetScrollPos( int nPos, BOOL bRedraw = 
        TRUE );<br>
        该函数将滚动框移动到指定位置.参数nPos指定了新的位置.参数bRedraw表示是否需要重绘滚动条,如果为TRUE,则重绘之.函数返回滚动框原来的位置.若操作失败则返回0.</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">void GetScrollRange( LPINT lpMinPos, LPINT 
        lpMaxPos ) const;<br>
        该函数对滚动条的滚动范围进行查询.参数lpMinPos和lpMaxPos分别指向滚动范围的最小最大值.</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">void SetScrollRange( int nMinPos, int 
        nMaxPos, BOOL bRedraw = TRUE );<br>
        该函数用于指定滚动条的滚动范围.参数nMinPos和nMaxPos分别指定了滚动范围的最小最大值.由这两者指定的滚动范围不得超过32767.当两者都为0时,滚动条将被隐藏.参数bRedraw表示是否需要重绘滚动条,如果为TRUE,则重绘之.</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">BOOL GetScrollInfo( LPSCROLLINFO 
        lpScrollInfo, UINT nMask );<br>
        该函数用来获取滚动条的各种状态,包括滚动范围、滚动框的位置和页尺寸.参数lpScrollInfo指向一个SCROLLINFO结构,该结构如下所示:<br>
        typedef struct tagSCROLLINFO { <br>
        UINT cbSize; //结构的尺寸(字节为单位)<br>
        UINT fMask; /*说明结构中的哪些参数是有效的,可以是屏蔽值的组合, 
        如SIF_POS|SIF_PAGE,若为SIF_ALL则整个结构都有效*/<br>
        int nMin; //滚动范围最大值,当fMask中包含SIF_RANGE时有效<br>
        int nMax; //滚动范围最小值,当fMask中包含SIF_RANGE时有效<br>
        UINT nPage; /*页尺寸,用来确定比例滚动框的大小,当fMask中包含 
        SIF_PAGE时有效*/<br>
        int nPos; //滚动框的位置,当fMask中包含SIF_POS有效<br>
        int nTrackPos; /*拖动时滚动框的位置,当fMask中包含 SIF_TRACKPOS时有效,该参数只能查询,不能设 
        置,最好不要用该参数来查询拖动时滚动框的位置*/<br>
        } SCROLLINFO; <br>
        typedef SCROLLINFO FAR *LPSCROLLINFO;<br>
        参数nMask的意义与SCROLLINFO结构中的fMask相同.函数在获得有效值后返回TRUE,否则返回FALSE.</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">BOOL SetScrollInfo( LPSCROLLINFO 
        lpScrollInfo, BOOL bRedraw = TRUE );<br>
        该函数用于设置滚动条的各种状态,一个重要用途是设定页尺寸从而实现比例滚动框.参数lpScrollInfo指向一个SCROLLINFO结构,参数bRedraw表示是否需要重绘滚动条,如果为TRUE,则重绘之.若操作成功,该函数返回TRUE,否则返回FALSE.</span></p>
      </blockquote>
    </blockquote>
    <p><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">CWnd类也提供了一些函数来查询和设置所属的标准滚动条.这些函数与CScrollBar类的函数同名,且功能相同,但每个函数都多了一个参数,用来选择滚动条.例如,CWnd:: 
    GetScrollPos 的声明为</span></p>
    <blockquote>
      <blockquote>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">int GetScrollPos( int nBar ) const;<br>
        参数nBar用来选择滚动条,可以为下列值:<br>
        SB_HORZ //指定水平滚动条<br>
        SB_VERT //指定垂直滚动条</span></p>
      </blockquote>
    </blockquote>
    <p><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">无论是标准滚动条,还是滚动条控件,滚动条的通知消息都是用WM_HSCROLL和WM_VSCROLL消息发送出去的.对这两个消息的确省处理函数是CWnd::OnHScroll和CWnd::OnVScroll,它们几乎什么也不做.一般需要在派生类中对这两个函数从新设计,以实现滚动功能.这两个函数的声明为</span></p>
    <blockquote>
      <blockquote>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">afx_msg void OnHScroll( UINT nSBCode, UINT 
        nPos, CScrollBar* pScrollBar );</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">afx_msg void OnVScroll( UINT nSBCode, UINT 
        nPos, CScrollBar* pScrollBar );<br>
        参数nSBCode是通知消息码,如表6.8所示.nPos是滚动框的位置,只有在nSBCode为SB_THUMBPOSITION或SB_THUMBTRACK时,该参数才有意义.如果通知消息是滚动条控件发来的,那么pScrollBar是指向该控件的指针,如果是标准滚动条发来的,则pScrollBar为NULL.</span></p>
      </blockquote>
    </blockquote>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p ALIGN="CENTER"><span style="font-size: 9pt">表6.8 滚动条的通知消息码</span></b></p>
    <table BORDER="1" CELLSPACING="1" CELLPADDING="1" WIDTH="579">
      <tr>
        <td WIDTH="40%"><b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">消息</span></b></td>
        <td WIDTH="60%"><b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">含义</span></b></td>
      </tr>
      <tr>
        <td WIDTH="40%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">SB_BOTTOM / SB_RIGHT(二者的消息码是一样的,因此可以混用,下同)</span></td>
        <td WIDTH="60%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">滚动到底端(右端).</span></td>
      </tr>
      <tr>
        <td WIDTH="40%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">SB_TOP / SB_LEFT</span></td>
        <td WIDTH="60%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">滚动到顶端(左端).</span></td>
      </tr>
      <tr>
        <td WIDTH="40%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">SB_LINEDOWN / SB_LINERIGHT</span></td>
        <td WIDTH="60%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">向下(向右)滚动一行(列).</span></td>
      </tr>
      <tr>
        <td WIDTH="40%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">SB_LINEUP / SB_LINELEFT</span></td>
        <td WIDTH="60%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">向上(向左)滚动一行(列).</span></td>
      </tr>
      <tr>
        <td WIDTH="40%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">SB_PAGEDOWN / SB_PAGERIGHT</span></td>
        <td WIDTH="60%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">向下(向右)滚动一页.</span></td>
      </tr>
      <tr>
        <td WIDTH="40%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">SB_PAGEUP / SB_PAGELEFT</span></td>
        <td WIDTH="60%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">向上(向左)滚动一页.</span></td>
      </tr>
      <tr>
        <td WIDTH="40%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">SB_THUMBPOSITION</span></td>
        <td WIDTH="60%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">滚动到指定位置.</span></td>
      </tr>
      <tr>
        <td WIDTH="40%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">SB_THUMBTRACK</span></td>
        <td WIDTH="60%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">滚动框被拖动.可利用该消息来跟踪对滚动框的拖动.</span></td>
      </tr>
      <tr>
        <td WIDTH="40%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">SB_ENDSCROLL</span></td>
        <td WIDTH="60%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">滚动结束.</span></td>
      </tr>
    </table>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">6.1.8小节的例子中,读者将学会如何使用滚动条以及如何编写自己的OnHScroll函数.</span></p>
    <b><p ALIGN="JUSTIFY"></b><span style="font-size: 9pt"><font color="#3973DE">6.1.6 
    列表框控件</font></span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">列表框主要用于输入,它允许用户从所列出的表项中进行单项或多项选择,被选择的项呈高亮度显示.列表框具有边框,并且一般带有一个垂直滚动条.列表框分单选列表框和多重选择列表框两种.单选列表框一次只能选择一个列表项,而多重选择列表框可以进行多重选择.对于列表项的选择,微软公司有如下建议:</span></p>
    <blockquote>
      <blockquote>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">单击鼠标选择一个列表项,单击一个按钮来处理选择的项.</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">双击鼠标选择一个列表项是处理选择项的快捷方法.</span></p>
      </blockquote>
    </blockquote>
    <p><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">列表框会向父窗口发送如表6.9所示的通知消息.</span></p>
    <p ALIGN="JUSTIFY"><b><span style="font-size: 9pt"> </span></p>
    <p ALIGN="CENTER"><span style="font-size: 9pt">表6.9 列表框控件的通知消息</span></b></p>
    <table BORDER="1" CELLSPACING="1" CELLPADDING="1" WIDTH="567">
      <tr>
        <td WIDTH="27%"><b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">消息</span></b></td>
        <td WIDTH="73%"><b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">含义</span></b></td>
      </tr>
      <tr>
        <td WIDTH="27%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">LBN_DBLCLK</span></td>
        <td WIDTH="73%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">用户用鼠标双击了一列表项.只有具有LBS_NOTIFY的列表框才能发送该消息.</span></td>
      </tr>
      <tr>
        <td WIDTH="27%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">LBN_ERRSPACE</span></td>
        <td WIDTH="73%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">列表框不能申请足够的动态内存来满足需要.</span></td>
      </tr>
      <tr>
        <td WIDTH="27%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">LBN_KILLFOCUS</span></td>
        <td WIDTH="73%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">列表框失去输入焦点.</span></td>
      </tr>
      <tr>
        <td WIDTH="27%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">LBN_SELCANCEL</span></td>
        <td WIDTH="73%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">当前的选择被取消.只有具有LBS_NOTIFY的列表框才能发送该消息.</span></td>
      </tr>
      <tr>
        <td WIDTH="27%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">LBN_SELCHANGE</span></td>
        <td WIDTH="73%"><p ALIGN="JUSTIFY"><span styl

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -