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

📄 chap6_4.htm

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

⌨️ 快捷键说明

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