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

📄 chap4_3.htm

📁 着重介绍基于C++的web编程技术
💻 HTM
📖 第 1 页 / 共 2 页
字号:
          </blockquote>
        </blockquote>
      </blockquote>
    </blockquote>
    <p>CFrameWnd::OnTimer(nIDEvent);</p>
    <p>}</p>
    <p>void CMainFrame::OnClose() </p>
    <p>{</p>
    <p>// TODO: Add your message handler code here and/or call default</p>
    <p> <b></p>
    <p>KillTimer(1);</b></p>
    <p>CFrameWnd::OnClose();</p>
    <p>}</p>
    <p></font><font SIZE="3">在</font><font FACE="Times New Roman" SIZE="3">CMainFrame::OnCreate</font><font SIZE="3">函数内调用了</font><font FACE="Times New Roman" SIZE="3">CWnd::SetTimer</font><font SIZE="3">以安装一个计时器,</font><font FACE="Times New Roman" SIZE="3">SetTimer</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">1</font><font SIZE="3">,第二个参数则规定了计时器的时间间隔为</font><font FACE="Times New Roman" SIZE="3">1000</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">OnTimer</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">OnTimer</font><font SIZE="3">函数中,首先构建了一个</font><font FACE="Times New Roman" SIZE="3">CTime</font><font SIZE="3">对象,接着调用</font><font FACE="Times New Roman" SIZE="3">CTime</font><font SIZE="3">的静态成员函数</font><font FACE="Times New Roman" SIZE="3">GetCurrentTime</font><font SIZE="3">以获得当前的系统时间,然后利用</font><font FACE="Times New Roman" SIZE="3">CTime::Format</font><font SIZE="3">函数返回一个按时</font><font FACE="Times New Roman" SIZE="3">:</font><font SIZE="3">分</font><font FACE="Times New Roman" SIZE="3">:</font><font SIZE="3">秒的格式表示的字符串,最后调用</font><font FACE="Times New Roman" SIZE="3">CStatusBar::SetPaneText</font><font SIZE="3">来更新时间窗格显示的正文。</font><font FACE="Times New Roman" SIZE="3">SetPaneText</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">CStatusBar::CommandToIndex</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">CMainFrame::OnClose</font><font SIZE="3">函数内调用了</font><font FACE="Times New Roman" SIZE="3">KillTimer</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">CMainFrame</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">CPP</font><font SIZE="3">文件的开始部分可以找到该类的消息映射,如清单</font><font FACE="Times New Roman" SIZE="3">4.9</font><font SIZE="3">所示。<b></p>
    <p>清单</font><font FACE="Times New Roman" SIZE="3">4.9</b></p>
    <p>BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)</p>
    <p>//{{AFX_MSG_MAP(CMainFrame)</p>
    <p>ON_WM_CREATE()</p>
    <p>ON_COMMAND(ID_RECORD_STOP, OnRecordStop)</p>
    <p>ON_COMMAND(ID_RECORD_START, OnRecordStart)</p>
    <p>ON_UPDATE_COMMAND_UI(ID_RECORD_START, OnUpdateRecordStart)</p>
    <p>ON_UPDATE_COMMAND_UI(ID_RECORD_STOP, OnUpdateRecordStop)</p>
    <p>ON_COMMAND(ID_HIGH_QUALITY, OnHighQuality)</p>
    <p>ON_COMMAND(ID_LOW_QUALITY, OnLowQuality)</p>
    <p>ON_UPDATE_COMMAND_UI(ID_HIGH_QUALITY, OnUpdateHighQuality)</p>
    <p>ON_UPDATE_COMMAND_UI(ID_LOW_QUALITY, OnUpdateLowQuality)</p>
    <p>ON_COMMAND(ID_VIEW_TOOLBAR1, OnViewToolbar1)</p>
    <p>ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBAR1, OnUpdateViewToolbar1)</p>
    <p>ON_WM_TIMER()</p>
    <p>ON_WM_CLOSE()</p>
    <p>//}}AFX_MSG_MAP</p>
    <p>END_MESSAGE_MAP()</p>
    <p> </p>
    <p></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">ClassWizard</font><font SIZE="3">为消息处理函数和命令处理函数自动加入了消息映射。自动加入的部分呈灰色显示,位于注释行</font><font FACE="Times New Roman" SIZE="3">//{{AFX_MSG_MAP</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">//}}AFX_MSG_MAP </font><font SIZE="3">之间。命令处理函数由</font><font FACE="Times New Roman" SIZE="3">ON_COMMAND</font><font SIZE="3">宏来映射,命令更新处理函数由</font><font FACE="Times New Roman" SIZE="3">ON_UPDATE_COMMAND_UI</font><font SIZE="3">,而</font><font FACE="Times New Roman" SIZE="3">WM_</font><font SIZE="3">消息的处理函数由</font><font FACE="Times New Roman" SIZE="3">ON_WM_</font><font SIZE="3">消息宏来映射。<b></p>
    <div align="center"><center><table border="2" cellpadding="2" cellspacing="0" width="90%" bgcolor="#85A9EB">
      <tr>
        <td width="100%"></b>提示</font><font FACE="Times New Roman" SIZE="3">:</font><font SIZE="3">今后只要看到</font><font FACE="Times New Roman" SIZE="3">//{{AFX_...</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">//{{AFX_...</font><font SIZE="3">注释对内,否则有可能导致</font><font FACE="Times New Roman" SIZE="3">ClassWizard</font><font SIZE="3">出错。<b></td>
      </tr>
    </table>
    </center></div><p ALIGN="JUSTIFY"></b></font> <font FACE="Times New Roman" SIZE="3"></p>
    <p></font><font SIZE="3">编译并运行</font><font FACE="Times New Roman" SIZE="3">Record 
    </font><font SIZE="3">,可以看到状态栏的新变化,最终的界面如图</font><font FACE="Times New Roman" SIZE="3">4.8</font><font SIZE="3">所示。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p align="center"></font><img src="T4_8.gif" alt="T4_8.tif (116548 bytes)" WIDTH="398" HEIGHT="268"><font SIZE="3"><b></p>
    <p align="center"></b>图<font FACE="Times New Roman" SIZE="3">4.8 </font>最终的<font FACE="Times New Roman" SIZE="3">Record</font>程序</p>
    <p ALIGN="CENTER"><b>小 结</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="CENTER"></font></b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <blockquote>
      <p></font><font SIZE="3"><font SIZE="3">本章主要向读者介绍了工具条和状态栏的一些实用技术。要点如下:</font></font><font FACE="Times New Roman" SIZE="3"></p>
    </blockquote>
    <blockquote>
      <blockquote>
        </font><font SIZE="3"><p ALIGN="JUSTIFY">在</font><font FACE="Times New Roman" SIZE="3">MFC</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">new</font><font SIZE="3">操作符动态创建之。</font><font FACE="Times New Roman" SIZE="3">2.</font><font SIZE="3">调用窗口类的</font><font FACE="Times New Roman" SIZE="3">Create</font><font SIZE="3">成员函数。该函数把实际的窗口作出来,并将其</font><font FACE="Times New Roman" SIZE="3">HWND</font><font SIZE="3">保存在窗口的公共数据成员</font><font FACE="Times New Roman" SIZE="3">m_hWnd</font><font SIZE="3">中。</p>
        <p ALIGN="JUSTIFY">创建工具条和状态栏的工作是在</font><font FACE="Times New Roman" SIZE="3">CMainFrame::OnCreate</font><font SIZE="3">函数中完成的,</font><font FACE="Times New Roman" SIZE="3">OnCreate</font><font SIZE="3">函数是在创建窗口时被调用的,这时窗口的创建已部分完成,窗口对象的</font><font FACE="Times New Roman" SIZE="3">HWND</font><font SIZE="3">句柄也已有效,但窗口还是不可见的。因此一般在</font><font FACE="Times New Roman" SIZE="3">OnCreate</font><font SIZE="3">函数中作一些诸如创建子窗口的初始化工作。</p>
        </font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">afx_msg</font><font SIZE="3">前缀保证了正确版本的消息处理函数被调用。</p>
        <p ALIGN="JUSTIFY">工具条有两个要素:工具条资源和工具条类</font><font FACE="Times New Roman" SIZE="3">CToolBar</font><font SIZE="3">。若用户只需要一个工具条,可利用</font><font FACE="Times New Roman" SIZE="3">AppWizard</font><font SIZE="3">自动生成,然后再修改之。若需要多个工具条,则必须手工创建。</p>
        <p ALIGN="JUSTIFY">如果不为命令定义命令处理函数或命令更新处理函数,则框架将自动使该命令对应的用户接口对象(主要指菜单项和按钮)禁止。利用</font><font FACE="Times New Roman" SIZE="3">ClassWizard</font><font SIZE="3">可以十分方便的加入命令处理函数和命令更新处理函数。</p>
        <p ALIGN="JUSTIFY">在菜单下拉之前,或在工具条按钮处在空闲循环期间,</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">会发一个更新命令,这将导致命令更新处理函数的调用。命令更新处理函数利用</font><font FACE="Times New Roman" SIZE="3">CCmdUI</font><font SIZE="3">类来更新用户接口对象。调用</font><font FACE="Times New Roman" SIZE="3">CCmdUI::Enable</font><font SIZE="3">可使用户接口对象允许或禁止,调用</font><font FACE="Times New Roman" SIZE="3">CCmdUI::SetCheck</font><font SIZE="3">可使用户接口对象选中或不选中。</p>
        <p ALIGN="JUSTIFY">调用</font><font FACE="Times New Roman" SIZE="3">CWnd::ShowWindow</font><font SIZE="3">可以隐藏</font><font FACE="Times New Roman" SIZE="3">/</font><font SIZE="3">显示一个窗口。</p>
        <p ALIGN="JUSTIFY">要在状态栏中插入新的窗格,需要在</font><font FACE="Times New Roman" SIZE="3">indicator</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">CStatusBar:: 
        SetPaneText</font><font SIZE="3">可更新状态栏窗格显示的正文。</p>
        </font>
      </blockquote>
    </blockquote>
    <div align="center"><center><table border="0" cellpadding="0" cellspacing="0" width="615">
      <tr>
        <td><a href="chap4_2.htm">上一页</a></td>
        <td><p align="right"></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 + -