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

📄 chap6_4.htm

📁 着重介绍基于C++的web编程技术
💻 HTM
📖 第 1 页 / 共 2 页
字号:
    <p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">. . . . . .</b></p>
    <p ALIGN="JUSTIFY">}</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">/////////////////////////////////////////////////////////////////////////////</p>
    <p ALIGN="JUSTIFY">//CMyToolBar</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">//</font><font SIZE="3">参数</font><font FACE="Times New Roman" SIZE="3">nIndex</font><font SIZE="3">是按钮的索引,函数将在该按钮的左侧创建组合框</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">BOOL CMyToolBar::CreateComboBox(int nIndex)</p>
    <p ALIGN="JUSTIFY">{</p>
    <p ALIGN="JUSTIFY">if(m_ComboBox.GetSafeHwnd()) //</font><font SIZE="3">防止重复创建</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">return FALSE;</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">CToolBarCtrl &amp;ToolBarCtrl=GetToolBarCtrl();</p>
    <p ALIGN="JUSTIFY">TBBUTTON button;</p>
    <p ALIGN="JUSTIFY">CRect rect;</p>
    <p ALIGN="JUSTIFY">button.fsStyle=TBSTYLE_SEP;</p>
    <p ALIGN="JUSTIFY">ToolBarCtrl.InsertButton(nIndex,&amp;button); //</font><font SIZE="3">插入空位</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">ToolBarCtrl.InsertButton(nIndex,&amp;button);</p>
    <p ALIGN="JUSTIFY">ToolBarCtrl.InsertButton(nIndex,&amp;button);</p>
    <p ALIGN="JUSTIFY">//</font><font SIZE="3">设置空位的宽度(处于中间的空位用来容纳组合框)</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">SetButtonInfo(nIndex+1,IDC_MYCOMBO,TBBS_SEPARATOR,100);</p>
    <p ALIGN="JUSTIFY">SetButtonInfo(nIndex, ID_SEPARATOR, TBBS_SEPARATOR, 12);</p>
    <p ALIGN="JUSTIFY">SetButtonInfo(nIndex+2, ID_SEPARATOR, TBBS_SEPARATOR, 12);</p>
    <p ALIGN="JUSTIFY">GetItemRect(nIndex+1, &amp;rect); //</font><font SIZE="3">获取中间空位的坐标</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">rect.top = 3;</p>
    <p ALIGN="JUSTIFY">rect.bottom = rect.top + 100;</p>
    <p ALIGN="JUSTIFY">if (!m_ComboBox.Create(CBS_DROPDOWNLIST|WS_VISIBLE|WS_TABSTOP,</p>
    <p ALIGN="JUSTIFY">rect, this, IDC_MYCOMBO))</p>
    <p ALIGN="JUSTIFY">return FALSE;</p>
    <p ALIGN="JUSTIFY">m_ComboBox.SetItemHeight(-1,15); //</font><font SIZE="3">设置编辑框组件的高度</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">return TRUE;</p>
    <p ALIGN="JUSTIFY">}</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">/////////////////////////////////////////////////////////////////////////////</p>
    <p ALIGN="JUSTIFY">//CMyStatusBar</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">BEGIN_MESSAGE_MAP(CMyStatusBar, CStatusBar)</p>
    <p ALIGN="JUSTIFY">ON_WM_SIZE()</p>
    <p ALIGN="JUSTIFY">END_MESSAGE_MAP()</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">//</font><font SIZE="3">参数</font><font FACE="Times New Roman" SIZE="3">nPane</font><font SIZE="3">是窗格的索引,函数将在该窗格内创建进度条控件</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">BOOL CMyStatusBar::CreateProgressCtrl(int nPane)</p>
    <p ALIGN="JUSTIFY">{</p>
    <p ALIGN="JUSTIFY">if(m_Progress.GetSafeHwnd()) //</font><font SIZE="3">防止重复创建</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">return FALSE;</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">//</font><font SIZE="3">设置该窗格的宽度为</font><font FACE="Times New Roman" SIZE="3">200</p>
    <p ALIGN="JUSTIFY">SetPaneInfo(nPane,GetItemID(nPane),SBPS_NORMAL,200);</p>
    <p ALIGN="JUSTIFY">CRect rect(0,0,1,1);</p>
    <p ALIGN="JUSTIFY">if(!m_Progress.Create(WS_CHILD|WS_VISIBLE,rect,this,</p>
    <p ALIGN="JUSTIFY">ID_INDICATOR_PROGRESS))</p>
    <p ALIGN="JUSTIFY">return FALSE;</p>
    <p ALIGN="JUSTIFY">m_nProgressPane=nPane;</p>
    <p ALIGN="JUSTIFY">return TRUE;</p>
    <p ALIGN="JUSTIFY">}</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">void CMyStatusBar::OnSize(UINT nType, int cx, int cy) </p>
    <p ALIGN="JUSTIFY">{</p>
    <p ALIGN="JUSTIFY">CStatusBar::OnSize(nType, cx, cy);</p>
    <p ALIGN="JUSTIFY">if(m_Progress.GetSafeHwnd()==NULL) return;</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">CRect rect;</p>
    <p ALIGN="JUSTIFY">GetItemRect(m_nProgressPane,&amp;rect);</p>
    <p ALIGN="JUSTIFY">m_Progress.MoveWindow(rect); //</font><font SIZE="3">调整控件的位置和尺寸</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">}</b></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">CMyToolBar</font><font SIZE="3">类可以在工具条中指定按钮的左边放置一个下拉列表式组合框,并在组合框的两端留出空位.该类的</font><font FACE="Times New Roman" SIZE="3">CreateComboBox</font><font SIZE="3">成员负责创建组合框,参数</font><font FACE="Times New Roman" SIZE="3">nIndex</font><font SIZE="3">是工具条按钮的索引,需注意的是工具条的一个空位也要占有一个索引.在</font><font FACE="Times New Roman" SIZE="3">CreateComboBox</font><font SIZE="3">中,主要调用了下列函数:</p>
    <blockquote>
      <blockquote>
        <p ALIGN="JUSTIFY">调用</font><font FACE="Times New Roman" SIZE="3">CToolBar::GetToolBarCtrl</font><font SIZE="3">返回一个</font><font FACE="Times New Roman" SIZE="3">CToolBarCtrl</font><font SIZE="3">对象.从</font><font FACE="Times New Roman" SIZE="3">4.0</font><font SIZE="3">版开始,</font><font FACE="Times New Roman" SIZE="3">CToolBar</font><font SIZE="3">类是在新控件类</font><font FACE="Times New Roman" SIZE="3">CToolBarCtrl</font><font SIZE="3">类的基础上实现的,后者具有更强大的功能.例如</font><font FACE="Times New Roman" SIZE="3">CToolBarCtrl</font><font SIZE="3">提供了</font><font FACE="Times New Roman" SIZE="3">CToolBar</font><font SIZE="3">没有的</font><font FACE="Times New Roman" SIZE="3">InsertButton</font><font SIZE="3">成员函数.</p>
        <p ALIGN="JUSTIFY">调用</font><font FACE="Times New Roman" SIZE="3">CToolBarCtrl::InsertButton</font><font SIZE="3">在</font><font FACE="Times New Roman" SIZE="3">nIndex</font><font SIZE="3">索引处插入三个空位.</p>
        <p ALIGN="JUSTIFY">调用</font><font FACE="Times New Roman" SIZE="3">CToolBar::SetButtonInfo</font><font SIZE="3">设置空位的宽度,其中中间的空位有</font><font FACE="Times New Roman" SIZE="3">100</font><font SIZE="3">像素宽,用来容纳组合框.</p>
        <p ALIGN="JUSTIFY">调用</font><font FACE="Times New Roman" SIZE="3">CToolBar::GetItemRect</font><font SIZE="3">获得中间空位的坐标.</p>
        <p ALIGN="JUSTIFY">调用</font><font FACE="Times New Roman" SIZE="3">CComboBox::Create</font><font SIZE="3">函数创建组合框.注意</font><font FACE="Times New Roman" SIZE="3">rect</font><font SIZE="3">对象说明的是包括列表框在内的组合框的尺寸.</p>
        <p ALIGN="JUSTIFY">调用</font><font FACE="Times New Roman" SIZE="3">CComboBox::SetItemHeight</font><font SIZE="3">设置编辑框组件的高度.</font></p>
      </blockquote>
    </blockquote>
    <p><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">CMyStatusBar</font><font SIZE="3">类可以在指定的状态栏窗格中放置一个进度条.该类的</font><font FACE="Times New Roman" SIZE="3">CreateProgressCtrl</font><font SIZE="3">成员负责创建进度条,参数</font><font FACE="Times New Roman" SIZE="3">nPane</font><font SIZE="3">是窗格的索引.在该函数中主要调用了下列函数:</p>
    <blockquote>
      <blockquote>
        <p ALIGN="JUSTIFY">调用</font><font FACE="Times New Roman" SIZE="3">CStatusBar::SetPaneInfo</font><font SIZE="3">设置窗格的宽度为</font><font FACE="Times New Roman" SIZE="3">200</font><font SIZE="3">.在调用该函数时,先调用</font><font FACE="Times New Roman" SIZE="3">CStatusBar::GetItemID</font><font SIZE="3">返回窗格的</font><font FACE="Times New Roman" SIZE="3">ID</font><font SIZE="3">.</p>
        <p ALIGN="JUSTIFY">调用</font><font FACE="Times New Roman" SIZE="3">CProgressCtrl::Create</font><font SIZE="3">创建控件.</font></p>
      </blockquote>
    </blockquote>
    <p><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">读者可能会奇怪,</font><font FACE="Times New Roman" SIZE="3">CProgressCtrl::Create</font><font SIZE="3">创建的控件只有</font><font FACE="Times New Roman" SIZE="3">1</font><font SIZE="3">×</font><font FACE="Times New Roman" SIZE="3">1</font><font SIZE="3">大小.这是由于在调用该函数创建控件时,状态栏的大小往往并未确定.这时如果调用</font><font FACE="Times New Roman" SIZE="3">CStatusBar::GetItemRect</font><font SIZE="3">,只能得到</font><font FACE="Times New Roman" SIZE="3">0</font><font SIZE="3">坐标,而不能得到正确的窗格坐标,所以程序只好先创建一个</font><font FACE="Times New Roman" SIZE="3">1</font><font SIZE="3">×</font><font FACE="Times New Roman" SIZE="3">1</font><font SIZE="3">的控件.</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">工具条中按钮和控件的尺寸及其相对于工具条的位置不会随外界因素发生变化,而状态栏则不同,当用户改变了框架窗口的宽度时,状态栏的宽度也会随之改变,并且它会重新调整各窗格的大小和位置,此时如果不及时调整进度条的坐标,那么进度条与所在窗格之间将发生错位.调整进度条的大小和位置的工作由</font><font FACE="Times New Roman" SIZE="3">CMyStatusBar::OnSize</font><font SIZE="3">函数完成.当窗口的尺寸发生改变后,窗口会收到</font><font FACE="Times New Roman" SIZE="3">WM_SIZE</font><font SIZE="3">消息,</font><font FACE="Times New Roman" SIZE="3">OnSize</font><font SIZE="3">是</font><font FACE="Times New Roman" SIZE="3">WM_SIZE</font><font SIZE="3">消息的处理函数.在</font><font FACE="Times New Roman" SIZE="3">CMyStatusBar::OnSize</font><font SIZE="3">函数中,先调用</font><font FACE="Times New Roman" SIZE="3">CStatusBar::GetItemRect</font><font SIZE="3">获得进度条所在窗格的坐标,然后调用</font><font FACE="Times New Roman" SIZE="3">CWnd::MoveWindow</font><font SIZE="3">来调整进度条控件的坐标.</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">在窗口形成时,也会收到</font><font FACE="Times New Roman" SIZE="3">WM_SIZE</font><font SIZE="3">消息,这时</font><font FACE="Times New Roman" SIZE="3">OnSize</font><font SIZE="3">函数可以及时调整进度条的大小和位置.</font><font FACE="Times New Roman" SIZE="3"></p>
    </font><div align="center"><center><table border="0" cellpadding="0" cellspacing="0" width="615">
      <tr>
        <td><a href="chap6_3.htm">上一页</a></td>
        <td><p align="right"><a href="chap6_5.htm">下一页</a></td>
      </tr>
    </table>
    </center></div><font SIZE="5"><hr noshade color="#3973DE" size="1">
    <p align="center"></font><font size="2" color="#000000">本教程由<a href="http://vcdynasty.yeah.net">Visual C++王朝(Where programmers come together)</a>协助制作<br>
    未经许可,请勿以任何形式复制</font></td>
    <b>
  </tr>
</table>
</center></div>

<p ALIGN="CENTER"></b><font SIZE="5"> </font><font FACE="Times New Roman" SIZE="5"></p>
</font><font FACE="Times New Roman" SIZE="3">

<p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
</font></b>

<p><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>

<p></font> </p>
</body>
</html>

⌨️ 快捷键说明

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