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

📄 chap3_6.htm

📁 着重介绍基于C++的web编程技术
💻 HTM
📖 第 1 页 / 共 3 页
字号:
      </font><font FACE="Times New Roman" SIZE="3"><p>Automations</font><font SIZE="3">:它提供了各种特性支持</font><font FACE="Times New Roman" SIZE="3">OLE2.0</font><font SIZE="3">,包括为</font><font FACE="Times New Roman" SIZE="3">OLE Automation</font><font SIZE="3">增加属性、方法以及处理事件。</p>
      </font><font FACE="Times New Roman" SIZE="3"><p>ActiveX Events</font><font SIZE="3">:为</font><font FACE="Times New Roman" SIZE="3">ActiveX</font><font SIZE="3">控件增加属性、方法以及为</font><font FACE="Times New Roman" SIZE="3">ActiveX</font><font SIZE="3">控件事件增加处理函数。</p>
      </font><font FACE="Times New Roman" SIZE="3"><p>Class Info</font><font SIZE="3">:它可以让用户创建新类,以便支持对话框和各种可视类(包括控制、窗口等)。还可以从类库文件导入类到当前工程中。</p>
      </font><font FACE="Times New Roman" SIZE="3">
    </blockquote>
    <p></font><font SIZE="3">在这一章里,我们只用到</font><font FACE="Times New Roman" SIZE="3">Message Maps</font><font SIZE="3">这一页,因此我们在这里只介绍</font><font FACE="Times New Roman" SIZE="3">Message Maps</font><font SIZE="3">的使用。</font><font FACE="Times New Roman" SIZE="3"><b></p>
    <p></b></font><font color="#3973DE" FACE="Times New Roman" SIZE="3">Message Maps</font><font color="#3973DE" 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">Message Maps</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>
    <blockquote>
      <b><p>Projects</font><font SIZE="3">组合框</b>:允许用户选择当前工作区中包含的工程。</p>
      </font><b><font FACE="Times New Roman" SIZE="3"><p>Class Name</font><font SIZE="3">组合框</b>:允许用户选择当前工程中的类。</p>
      </font><b><font FACE="Times New Roman" SIZE="3"><p>Objects IDs</font><font SIZE="3">列表框</b>:列出当前选中的类名及相关的</font><font FACE="Times New Roman" SIZE="3">ID</font><font SIZE="3">。对窗口和视来说,这些</font><font FACE="Times New Roman" SIZE="3">ID</font><font SIZE="3">为菜单标识符;对对话框来说,这些</font><font FACE="Times New Roman" SIZE="3">ID</font><font SIZE="3">为控制框的</font><font FACE="Times New Roman" SIZE="3">ID</font><font SIZE="3">。</p>
      </font><b><font FACE="Times New Roman" SIZE="3"><p>Messages</font><font SIZE="3">列表框</b>:列出当前所选类的可重载的虚方法以及可接收到的消息。</p>
      </font><b><font FACE="Times New Roman" SIZE="3"><p>Member Functions</font><font SIZE="3">列表框</b>:列出</font><font FACE="Times New Roman" SIZE="3">ClassName</font><font SIZE="3">组合框中当前所选的项中所包含的所有成员函数。用户可以增加、删除成员函数,也可以对成员函数进行编辑。</p>
      </font><b><font FACE="Times New Roman" SIZE="3"><p>Add Class...</font><font SIZE="3">按钮</b>:它允许用户往工程里添加新类。在按钮右边有一个向下的小箭头,表明按此按钮将弹出一个菜单。菜单包含两项:</font><font FACE="Times New Roman" SIZE="3">New...</font><font SIZE="3">可以新建一个类;</font><font FACE="Times New Roman" SIZE="3">From a type Lib</font><font SIZE="3">用于从一个类库中导入类。</p>
      </font><b><font FACE="Times New Roman" SIZE="3"><p>Add Function</font><font SIZE="3">按钮</b>:它允许用户往</font><font FACE="Times New Roman" SIZE="3">Member Functions</font><font SIZE="3">列表框中加进一个新的消息处理成员函数,该新增成员函数被用来响应</font><font FACE="Times New Roman" SIZE="3">Message Maps</font><font SIZE="3">列表中当前所选中的消息。</p>
      </font><b><font FACE="Times New Roman" SIZE="3"><p>Delete Function</font><font SIZE="3">按钮</b>:用于删除</font><font FACE="Times New Roman" SIZE="3">Member Functions</font><font SIZE="3">列表框中所选中的项。</p>
      </font><b><font FACE="Times New Roman" SIZE="3"><p>Edit Code</font><font SIZE="3">按钮</b>:它允许用户对</font><font FACE="Times New Roman" SIZE="3">Member Functions</font><font SIZE="3">中所选中的项进行编辑,此时</font><font FACE="Times New Roman" SIZE="3">Visual Studio </font><font SIZE="3">将关闭</font><font FACE="Times New Roman" SIZE="3">MFC ClassWizard</font><font SIZE="3">对话框,并打开相应文件,并将光标定位在函数定义的开头处。</p>
      </font><font FACE="Times New Roman" SIZE="3">
    </blockquote>
    <p align="center"></font><img src="T3_13.gif" alt="T3_13.tif (369325 bytes)" WIDTH="553" HEIGHT="362"><font FACE="Times New Roman" SIZE="3"></p>
    <p align="center"></font><font size="2">图</font><small><font FACE="Times New Roman" SIZE="3">3-13 </font></small><font size="2">用</font><small><font FACE="Times New Roman" SIZE="3">ClassWizard</font></small><font size="2">增加菜单消息成员函数映射</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">现在我们就利用</font><font FACE="Times New Roman" SIZE="3">ClassWizard</font><font SIZE="3">为</font><font FACE="Times New Roman" SIZE="3">Hello</font><font SIZE="3">程序增加菜单消息和成员函数的映射。在</font><font FACE="Times New Roman" SIZE="3">View</font><font SIZE="3">菜单下选择</font><font FACE="Times New Roman" SIZE="3">ClassWizard</font><font SIZE="3">,弹出</font><font FACE="Times New Roman" SIZE="3">MFC ClassWizard</font><font SIZE="3">对话框。选择</font><font FACE="Times New Roman" SIZE="3">Message Maps</font><font SIZE="3">页,在</font><font FACE="Times New Roman" SIZE="3">Class Name</font><font SIZE="3">下拉列表中选择</font><font FACE="Times New Roman" SIZE="3">CMainFrame</font><font SIZE="3">类。在</font><font FACE="Times New Roman" SIZE="3">Object IDs</font><font SIZE="3">中选择</font><font FACE="Times New Roman" SIZE="3">ID_SAY_HELLO</font><font SIZE="3">,在</font><font FACE="Times New Roman" SIZE="3">Messages</font><font SIZE="3">栏中双击</font><font FACE="Times New Roman" SIZE="3">COMMAND</font><font SIZE="3">,弹出</font><font FACE="Times New Roman" SIZE="3">Add Member Function</font><font SIZE="3">对话框。对话框中给出缺省的成员函数</font><font FACE="Times New Roman" SIZE="3">OnSayHello</font><font SIZE="3">,按</font><font FACE="Times New Roman" SIZE="3">OK</font><font SIZE="3">接收缺省的成员函数名。此时</font><font FACE="Times New Roman" SIZE="3">OnSayHello </font><font SIZE="3">成员函数就出现在</font><font FACE="Times New Roman" SIZE="3">Member Functions</font><font SIZE="3">列表框中,后面跟所映射的消息,如图</font><font FACE="Times New Roman" SIZE="3">3-13</font><font SIZE="3">所示。列表框中开头的字母</font><font FACE="Times New Roman" SIZE="3">W</font><font SIZE="3">表示窗口消息,</font><font FACE="Times New Roman" SIZE="3">V</font><font SIZE="3">表示可重载的虚方法</font><font FACE="Times New Roman" SIZE="3">(Virtual Method)</font><font SIZE="3">。如此,依次为</font><font FACE="Times New Roman" SIZE="3">ID_SELECT_BLUE</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">ID_SELECT_RED</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">ID_SELECT_YELLOW</font><font SIZE="3">增加消息处理成员函数</font><font FACE="Times New Roman" SIZE="3">OnSelectBlue</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">OnSelectRed</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">OnSelectYellow</font><font SIZE="3">。然后双击</font><font FACE="Times New Roman" SIZE="3">Member Functions</font><font SIZE="3">列表中的</font><font FACE="Times New Roman" SIZE="3">OnSayHello</font><font SIZE="3">,编辑</font><font FACE="Times New Roman" SIZE="3">OnSayHello</font><font SIZE="3">成员函数。</font><font FACE="Times New Roman" SIZE="3"><b></p>
    <p></b></font><font color="#3973DE" FACE="Times New Roman" SIZE="3">3.6.3 </font><font SIZE="3" color="#3973DE">手工添加代码</font><font FACE="Times New Roman" SIZE="3"></p>
    <p></font><font SIZE="3">在</font><font FACE="Times New Roman" SIZE="3">OnSayHello</font><font SIZE="3">成员函数体中加入语句。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>void CMainFrame::OnSayHello()</p>
    <p>{</p>
    <p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p>AfxMessageBox(</font><font SIZE="3">“</font><font FACE="Times New Roman" SIZE="3">Hello!</font><font SIZE="3">”</font><font FACE="Times New Roman" SIZE="3">);</b></p>
    <p>}</font><font SIZE="3"><b></p>
    <p>消息框函数</b></font><font FACE="Times New Roman" SIZE="3"></p>
    <p>AfxMessageBox</font><font SIZE="3">用来弹出一个消息框,它的函数原型有两种版本:</font><font FACE="Times New Roman" SIZE="3"></p>
    <blockquote>
      <blockquote>
        <p>int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 );</p>
      </blockquote>
    </blockquote>
    <p></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <blockquote>
      <blockquote>
        <p>int AFXAPI AfxMessageBox( UINT nIDPrompt, UINT nType = MB_OK, UINT nIDHelp = (UINT) </font><font SIZE="3">–</font><font FACE="Times New Roman" SIZE="3">1 );</p>
        </font>
      </blockquote>
    </blockquote>
    <p><font SIZE="3"> </p>
    <p>在第一种形式中,lpszText表示在消息框内部显示的文本,消息框的标题为应用程序的可执行文件名(如Hello)。在第二种形式中,nIDPrompt为要显示的文本字符串在字符串表中的ID。函数调用时会自动从字符串表中载入字符串并显示在消息框中。nType为消息框中显示的按钮风格和图标风格的组合,可以采用|(或)操作符组合各种风格。</p>
    <p>按钮风格</p>
    <blockquote>
      <blockquote>
        </font><font FACE="Arial" SIZE="2"><b><p>MB_ABORTRETRYIGNORE </b></font><font SIZE="3">消息框中显示</font><font FACE="Times New Roman" SIZE="3">Abort</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">Retry</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">Ignore</font><font SIZE="3">按钮</p>
        </font><font FACE="Arial" SIZE="2"><b><p>MB_OK </b></font><font SIZE="3">显示OK按钮</p>
        </font><font FACE="Arial" SIZE="2"><b><p>MB_OKCANCEL </b></font><font SIZE="3">显示OK、Cancel按钮</p>
        </font><font FACE="Arial" SIZE="2"><b><p>MB_RETRYCANCEL </b></font><font SIZE="3">显示Retry、Cancel按钮</p>
        </font><font FACE="Arial" SIZE="2"><b><p>MB_YESNO </b></font><font SIZE="3">显示Yes、No按钮</p>
        </font><font FACE="Arial" SIZE="2"><b><p>MB_YESNOCANCEL </b></font><font SIZE="3">显示Yes、No、Cancel按钮</p>
        <p>图标风格</p>
        <b><p>MB_ICONINFORMATION</b> 显示一个i图标,表示提示</p>
        <b><p>MB_ICONEXCLAMATION</b> 显示一个惊叹号,表示警告</p>
        <b><p>MB_ICONSTOP </b>显示手形图标,表示警告或严重错误</p>
        <b><p>MB_ICONQUESTION </b>显示问号图标,表示疑问</p>
      </blockquote>
    </blockquote>
    <p>比如,要在消息框中显示一个问号、一个“Yes”按钮、一个“No”按钮,可以以下面的方式调用AfxMessageBox。</p>
    <p>AfxMessageBox(“Are you sure?”,MB_YESNO|MB_ICONQUESTION);</p>
    <blockquote>
      <blockquote>
        <p>还有一个与AfxMessageBox类似的函数MessageBox,它是CWnd的类成员函数:</p>
        </font><font FACE="Times New Roman" SIZE="3"><p>int MessageBox( LPCTSTR lpszText,LPCTSTR 
        lpszCaption = NULL,</p>
        <p>UINT nType = MB_OK );</font></p>
      </blockquote>
    </blockquote>
    <p><font SIZE="3"><b> </p>
    <p></b>与</font><font FACE="Times New Roman" SIZE="3">AfxMessageBox</font><font SIZE="3">不同的是,它多了一个</font><font FACE="Times New Roman" SIZE="3">lpszCaption</font><font SIZE="3">参数,从名字上就可以推断出它表示消息框的标题,这样就可以设置消息框的标题,而不必采用可执行文件名作为标题了。</p>
    <p>两个函数的区别:</font><font FACE="Times New Roman" SIZE="3">AfxMessageBox</font><font SIZE="3">比</font><font FACE="Times New Roman" SIZE="3">MessageBox</font><font SIZE="3">简单一些,因为它是一个全局函数所以不需要对应的一个窗口类,但是不能控制消息框标题,常用于调试程序时的内部数据输出或警告;MessageBox比较正式,常用在要提交的应用程序版本中,可以控制标题内容而不必采用含义不明的可执行文件名为标题。</p>
    <p>现在再来编写</font><font FACE="Times New Roman" SIZE="3">OnSelectRed</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">OnSelectBlue</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">OnSelectYellow</font><font SIZE="3">三个函数。首先我们双击CMainFrame类名,在MainFrm.h中加入数据成员,如下所示:</p>
    <p></font><font FACE="Times New Roman" SIZE="3">class CMainFrame:public CFrameWnd{</p>
    <p>...</p>
    <p>// Attributes</p>
    <p>public:</p>
    <p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p>int m_nColor;</p>

⌨️ 快捷键说明

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