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

📄 chap3_6.htm

📁 VC++教程电子图书
💻 HTM
📖 第 1 页 / 共 2 页
字号:
    <p></b><span style="font-size: 9pt"><font color="#3973DE">3.6.3 手工添加代码</font></span></p>
    <p><span style="font-size: 9pt">在OnSayHello成员函数体中加入语句。</span></p>
    <p><span style="font-size: 9pt">void CMainFrame::OnSayHello()</span></p>
    <p><span style="font-size: 9pt">{</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">AfxMessageBox(“Hello!”);</span></b></p>
    <p><span style="font-size: 9pt">}</span><b></p>
    <p><span style="font-size: 9pt">消息框函数</span></b></p>
    <p><span style="font-size: 9pt">AfxMessageBox用来弹出一个消息框,它的函数原型有两种版本:</span></p>
    <blockquote>
      <blockquote>
        <p><span style="font-size: 9pt">int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, 
        UINT nIDHelp = 0 );</span></p>
      </blockquote>
    </blockquote>
    <p><span style="font-size: 9pt"> </span></p>
    <blockquote>
      <blockquote>
        <p><span style="font-size: 9pt">int AFXAPI AfxMessageBox( UINT nIDPrompt, UINT nType = 
        MB_OK, UINT nIDHelp = (UINT) –1 );</span></p>
      </blockquote>
    </blockquote>
    <p><span style="font-size: 9pt">  在第一种形式中,lpszText表示在消息框内部显示的文本,消息框的标题为应用程序的可执行文件名(如Hello)。在第二种形式中,nIDPrompt为要显示的文本字符串在字符串表中的ID。函数调用时会自动从字符串表中载入字符串并显示在消息框中。nType为消息框中显示的按钮风格和图标风格的组合,可以采用|(或)操作符组合各种风格。</span></p>
    <p><span style="font-size: 9pt">按钮风格</span></p>
    <blockquote>
      <blockquote>
        <b><p><span style="font-size: 9pt">MB_ABORTRETRYIGNORE </b>消息框中显示Abort、Retry、Ignore按钮</span></p>
        <b><p><span style="font-size: 9pt">MB_OK </b>显示OK按钮</span></p>
        <b><p><span style="font-size: 9pt">MB_OKCANCEL </b>显示OK、Cancel按钮</span></p>
        <b><p><span style="font-size: 9pt">MB_RETRYCANCEL </b>显示Retry、Cancel按钮</span></p>
        <b><p><span style="font-size: 9pt">MB_YESNO </b>显示Yes、No按钮</span></p>
        <b><p><span style="font-size: 9pt">MB_YESNOCANCEL </b>显示Yes、No、Cancel按钮</span></p>
        <p><span style="font-size: 9pt">图标风格</span></p>
        <b><p><span style="font-size: 9pt">MB_ICONINFORMATION</b> 显示一个i图标,表示提示</span></p>
        <b><p><span style="font-size: 9pt">MB_ICONEXCLAMATION</b> 
        显示一个惊叹号,表示警告</span></p>
        <b><p><span style="font-size: 9pt">MB_ICONSTOP </b>显示手形图标,表示警告或严重错误</span></p>
        <b><p><span style="font-size: 9pt">MB_ICONQUESTION </b>显示问号图标,表示疑问</span></p>
      </blockquote>
    </blockquote>
    <p><span style="font-size: 9pt">  比如,要在消息框中显示一个问号、一个“Yes”按钮、一个“No”按钮,可以以下面的方式调用AfxMessageBox。</span></p>
    <p><span style="font-size: 9pt">AfxMessageBox(“Are you sure?”,MB_YESNO|MB_ICONQUESTION);</span></p>
    <blockquote>
      <blockquote>
        <p><span style="font-size: 9pt">还有一个与AfxMessageBox类似的函数MessageBox,它是CWnd的类成员函数:</span></p>
        <p><span style="font-size: 9pt">int MessageBox( LPCTSTR lpszText,LPCTSTR lpszCaption = 
        NULL,</span></p>
        <p><span style="font-size: 9pt">UINT nType = MB_OK );</span></p>
      </blockquote>
    </blockquote>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p></b><span style="font-size: 9pt">  与AfxMessageBox不同的是,它多了一个lpszCaption参数,从名字上就可以推断出它表示消息框的标题,这样就可以设置消息框的标题,而不必采用可执行文件名作为标题了。<br>
      两个函数的区别:AfxMessageBox比MessageBox简单一些,因为它是一个全局函数所以不需要对应的一个窗口类,但是不能控制消息框标题,常用于调试程序时的内部数据输出或警告;MessageBox比较正式,常用在要提交的应用程序版本中,可以控制标题内容而不必采用含义不明的可执行文件名为标题。<br>
      现在再来编写OnSelectRed、OnSelectBlue、OnSelectYellow三个函数。首先我们双击CMainFrame类名,在MainFrm.h中加入数据成员,如下所示:</span></p>
    <p><span style="font-size: 9pt">class CMainFrame:public CFrameWnd{</span></p>
    <p><span style="font-size: 9pt">...</span></p>
    <p><span style="font-size: 9pt">// Attributes</span></p>
    <p><span style="font-size: 9pt">public:</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">int m_nColor;</span></p>
    <p><span style="font-size: 9pt">enum{RED=0,BLUE=1,YELLOW=2};</span></b></p>
    <p><span style="font-size: 9pt">...</span></p>
    <b><p></b><span style="font-size: 9pt">}</span></p>
    <p><span style="font-size: 9pt">  注意我们这里使用了匈牙利命名法,建议读者也采用这种命名方法,以便提高程序可读性。加入数据成员后,还要对它进行初始化,初始化工作在CMainFrame()构造函数中完成。</span></p>
    <p><span style="font-size: 9pt">CMainFrame::CMainFrame()</span></p>
    <p><span style="font-size: 9pt">{</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">m_nColor=RED;</span></b></p>
    <p><span style="font-size: 9pt">}</span></p>
    <p><span style="font-size: 9pt">OnSelectRed、OnSelectBlue、OnSelectYellow三个函数修改后如清单3.4:</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">清单3.4</span></b></p>
    <p><span style="font-size: 9pt">void CMainFrame()::OnSelectRed()</span></p>
    <p><span style="font-size: 9pt">{</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">m_nColor=RED;</span></p>
    <p><span style="font-size: 9pt">SayColor();</span></b></p>
    <p><span style="font-size: 9pt">}</span></p>
    <p><span style="font-size: 9pt">void CMainFrame()::OnSelectBlue()</span></p>
    <p><span style="font-size: 9pt">{</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">m_nColor=BLUE;</span></p>
    <p><span style="font-size: 9pt">SayColor();</span></b></p>
    <p><span style="font-size: 9pt">}</span></p>
    <p><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">void CMainFrame()::OnSelectYellow()</span></p>
    <p><span style="font-size: 9pt">{</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">m_nColor=YELLOW;</span></p>
    <p><span style="font-size: 9pt">SayColor();</span></b></p>
    <p><span style="font-size: 9pt">}</span></p>
    <p><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">然后在MainFrm.h中加入SayColor()函数的声明:</span></p>
    <p><span style="font-size: 9pt">//Operations</span></p>
    <p><span style="font-size: 9pt">public:</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt">void SayColor();</span></b></p>
    <p><span style="font-size: 9pt">在MainFrm.cpp中,在OnSelectYellow()成员函数后面,手工加入SayColor()函数的定义。</span></p>
    <b><p><span style="font-size: 9pt">void CMainFrame::SayColor()</span></p>
    <p><span style="font-size: 9pt">{</span></p>
    <p><span style="font-size: 9pt">switch(m_nColor)</span></p>
    <p><span style="font-size: 9pt">{</span></p>
    <p><span style="font-size: 9pt">case RED:</span></p>
    <p><span style="font-size: 9pt">AfxMessageBox(“Color is red!”);</span></p>
    <p><span style="font-size: 9pt">break;</span></p>
    <p><span style="font-size: 9pt">case BLUE:</span></p>
    <p><span style="font-size: 9pt">AfxMessageBox(“Color is blue!”);</span></p>
    <p><span style="font-size: 9pt">break;</span></p>
    <p><span style="font-size: 9pt">case YELLOW:</span></p>
    <p><span style="font-size: 9pt">AfxMessageBox(“Color is yellow!”);</span></p>
    <p><span style="font-size: 9pt">break;</span></p>
    <p><span style="font-size: 9pt">}</span></p>
    <p><span style="font-size: 9pt">}</span></b></p>
    <p><span style="font-size: 9pt">  这样,当我们选择颜色时,就会显示不同的消息框显示当前选择的颜色。但是用消息框显示当前选中的颜色似乎太繁琐了一些。我们在使用WORD编写文档时,注意到在选择不同的视图时,在视图菜单名前显示一个点,表明这是当前选择的视图。我们是否也可以这么做?回答是肯定的。要实现这一功能,就要使用MFC框架的更新命令用户接口消息机制。</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="chap3_5.htm">上一页</a></span></td>
        <td><p align="right"><span style="font-size: 9pt"><a href="chap3_7.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 + -