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

📄 chap4_2.htm

📁 VC++编程实例。非常详细
💻 HTM
📖 第 1 页 / 共 2 页
字号:
    <p><b><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">pCmdUI-&gt;Enable(!m_bWorking); </span></b></p>
    <p><span style="font-size: 9pt">}</span></p>
    <p><span style="font-size: 9pt">void CMainFrame::OnUpdateRecordStop(CCmdUI* pCmdUI) </span></p>
    <p><span style="font-size: 9pt">{</span></p>
    <p><span style="font-size: 9pt">// TODO: Add your command update UI handler code here</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">pCmdUI-&gt;Enable(m_bWorking) ;</span></b></p>
    <p><span style="font-size: 9pt">}</span></p>
    <p><span style="font-size: 9pt">  m_bWorking的初值应是FALSE,对它的初始化工作在CMainFrame的构造函数中完成。m_bWorking的值在处理Start和Stop命令时会被更新以反映当前的状态。两个命令更新处理函数都调用了CCmdUI::Enable,该函数根据m_bWorking的值来更新命令接口对象。</span></p>
    <p><span style="font-size: 9pt">  编译并运行Record,现在Start和Stop命令的逻辑功能已经实现了。</span><b></p>
    <p><span style="font-size: 9pt">4.2.3按钮风格</span></b></p>
    <p><span style="font-size: 9pt">  在Record程序中,用户可以选择两种采样频率来录音。用户接口对象应该能反映出当前的采样频率。普通的工具条按钮在按下后会立刻弹起来,我们希望Record程序的频率选择按钮具有单选按钮的风格,即当用户选择了一个采样频率时,该采样频率对应的按钮一直处于按下的状态,而另一个频率选择按钮应处于弹起状态。</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">  我们可以利用CCmdUI::SetCheck函数来实现这一功能,在命令更新函数中调用CCmdUI::SetCheck(TRUE)或CCmdUI::SetCheck(FALSE)可将用户接口对象设定为选中或不选中状态,当一个用户接口对象被选中时,相应的工具按钮会处于按下的状态,并且相应的菜单项的前面会加上一个选中标记。这里需要给CMainFrame类加一个布尔型成员变量以表明当前的采样频率。请读者在CMainFrame类内加入下面一行代码:</span><b></p>
    <p><span style="font-size: 9pt">BOOL m_bHighQuality;</span></b></p>
    <p><span style="font-size: 9pt">接下来请读者按清单4.4进行修改。</span><b></p>
    <p><span style="font-size: 9pt">清单4.4 </span></b></p>
    <p><span style="font-size: 9pt">CMainFrame::CMainFrame()</span></p>
    <p><span style="font-size: 9pt">{</span></p>
    <p><span style="font-size: 9pt">// TODO: add member initialization code here</span></p>
    <p><span style="font-size: 9pt">m_bWorking=FALSE; </span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">m_bHighQuality=TRUE;</span></b></p>
    <p><span style="font-size: 9pt">}</span></p>
    <p><span style="font-size: 9pt">void CMainFrame::OnHighQuality() </span></p>
    <p><span style="font-size: 9pt">{</span></p>
    <p><span style="font-size: 9pt">// TODO: Add your command handler code here</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">m_bHighQuality=TRUE; </span></b></p>
    <p><span style="font-size: 9pt">}</span></p>
    <p><span style="font-size: 9pt">void CMainFrame::OnLowQuality() </span></p>
    <p><span style="font-size: 9pt">{</span></p>
    <p><span style="font-size: 9pt">// TODO: Add your command handler code here</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">m_bHighQuality=FALSE; </span></b></p>
    <p><span style="font-size: 9pt">}</span></p>
    <p><span style="font-size: 9pt">void CMainFrame::OnUpdateHighQuality(CCmdUI* pCmdUI) </span></p>
    <p><span style="font-size: 9pt">{</span></p>
    <p><span style="font-size: 9pt">// TODO: Add your command update UI handler code here</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">pCmdUI-&gt;SetCheck(m_bHighQuality); </span></b></p>
    <p><span style="font-size: 9pt">}</span></p>
    <p><span style="font-size: 9pt">void CMainFrame::OnUpdateLowQuality(CCmdUI* pCmdUI) </span></p>
    <p><span style="font-size: 9pt">{</span></p>
    <p><span style="font-size: 9pt">// TODO: Add your command update UI handler code here</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">pCmdUI-&gt;SetCheck(!m_bHighQuality); </span></b></p>
    <p><span style="font-size: 9pt">}</span></p>
    <p><span style="font-size: 9pt">  m_bHighQuality的初值是TRUE,即缺省时是高频采样,对它的初始化工作在CMainFrame的构造函数中完成。m_bHighQuality的值在处理High 
    quality和Low quality命令时会被更新以反映当前的状态。两个命令更新处理函数都调用了CCmdUI::SetCheck,该函数根据m_bHighQuality的值来更新命令接口对象,从而使工具条按钮具有了单选按钮的风格。</span></p>
    <p><span style="font-size: 9pt">  编译并运行Record,读者可以看到具有新风格的工具条按钮。当选择采样频率时,相应的菜单项前会出现一个选中标记,相应的工具条按钮会被按下。</span><b></p>
    <p><span style="font-size: 9pt">4.2.4工具条的隐藏/显示</span></b></p>
    <p><span style="font-size: 9pt">  读者可能已经试过了Record程序的View菜单的功能。通过该菜单用户可以隐藏/显示工具条和状态栏,这个功能是由AppWizard自动实现的。由于第二个工具条是手工建立的,因此它不会自动具备<b>隐藏/显示功能。</b>但我们可以通过编程来实现第二个工具条的隐藏/显示:</span></p>
    <blockquote>
      <blockquote>
        <p><span style="font-size: 9pt">打开IDR_MAINFRAME菜单资源</span></p>
        <p><span style="font-size: 9pt">在View菜单中加入一个名为Toolbar1的菜单项,指定其ID为ID_VIEW_TOOLBAR1,并在Prompt栏中输入Show 
        or hide the toolbar1\nToggle ToolBar1。</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">按Ctrl+W键进入ClassWizard。在Class 
        name栏中选择CMainFrame,在Object IDs栏中选择ID_VIEW_TOOLBAR1,并为该命令ID定义命令处理函数OnViewToolbar1和命令更新处理函数OnUpdateViewToolbar1。</span></p>
        <p><span style="font-size: 9pt">按清单4.5修改程序。</span></p>
      </blockquote>
    </blockquote>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">清单4.5 显示/隐藏工具条</span></b></p>
    <p><span style="font-size: 9pt">void CMainFrame::OnViewToolbar1() </span></p>
    <p><span style="font-size: 9pt">{</span></p>
    <p><span style="font-size: 9pt">// TODO: Add your command handler code here</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">m_wndToolBar1.ShowWindow(m_wndToolBar1.IsWindowVisible()?</span></p>
    <p><span style="font-size: 9pt">SW_HIDE:SW_SHOW); </span></p>
    <p><span style="font-size: 9pt">RecalcLayout();</span></b></p>
    <p><span style="font-size: 9pt">}</span></p>
    <p><span style="font-size: 9pt">void CMainFrame::OnUpdateViewToolbar1(CCmdUI* pCmdUI) </span></p>
    <p><span style="font-size: 9pt">{</span></p>
    <p><span style="font-size: 9pt">// TODO: Add your command update UI handler code here</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">pCmdUI-&gt;SetCheck(m_wndToolBar1.IsWindowVisible()); </span></b></p>
    <p><span style="font-size: 9pt">}</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">  调用CWnd::ShowWindow(SW_SHOW)或CWnd::ShowWindow(SW_HIDE)可以显示或隐藏窗口。由于工具条也是窗口,CToolBar是CWnd类的继承类,故该函数也是CToolBar的成员。在命令处理函数OnViewToolbar1中,我们调用CToolBar::ShowWindow来显示/隐藏工具条,在调用时会利用CWnd::IsWindowVisible函数作出判断,如果工具条是可见的,就传给ShowWindow函数SW_HIDE参数以隐藏工具条,否则,就传SW_SHOW参数显示工具条。接着要调用CMainFrame::RecalcLayout以重新调整主框架窗口的布局。</span></p>
    <p><span style="font-size: 9pt">  命令更新处理函数OnUpdateViewToolbar1会根据工具条是否可见使View-&gt;Toolbar1菜单项选中或不选中。</span></p>
    <p><span style="font-size: 9pt">  编译并运行Record,现在Record程序已变得很有趣了。至此,读者已经掌握了工具条的一些实用编程技术。</span><b></p>
    </b><div align="center"><center><table border="0" cellpadding="0" cellspacing="0"
    width="615">
      <tr>
        <td><span style="font-size: 9pt"><a href="chap4_1.htm">上一页</a></span></td>
        <td><p align="right"><span style="font-size: 9pt"><a href="chap4_3.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 + -