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

📄 chap12_4.htm

📁 vc教程,真正的程序员用Visual C++。如果你想当程序员
💻 HTM
📖 第 1 页 / 共 4 页
字号:
<html>

<head>
<title>12.4 一个通信演示程序</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<link rel="stylesheet" href="../../../cpcw.css"></head>

<body link="#3973DE" alink="#3973DE" background="../../bg.gif">
<div align="center"><center>
    <table width="85%" border="0">
      <tr bgcolor="#FFFFFF"> 
        <td> 
          <div align="center">
            <center>
            </center>
          </div>
          <p align="CENTER"><b><font color="red"><font face="Times New Roman">12. 
            4 </font>一个通信演示程序</font></b></p>
          <p align="JUSTIFY">  为了使读者更好地掌握本章的概念,这里举一个具体实例来说明问题。如图12.1所示,例子程序名为Terminal,是一个简单的TTY终端仿真程序。读者可以用该程序打开一个串行口,该程序会把用户的键盘输入发送给串行口,并把从串口接收到的字符显示在视图中。用户通过选择File-&gt;Connect命令来打开串行口,选择File-&gt;Disconnect命令则关闭串行口。</p>
          <p align="center"><img src="T12_1.gif" alt="T12_1.tif (174388 bytes)" width="452" height="322"></p>
          <p align="center">图12.1 Terminal终端仿真程序</p>
          <p align="JUSTIFY">  当用户选择File-&gt;Settings...命令时,会弹出一个Communication 
            settings对话框,如图12.2所示。该对话框主要用来设置串行口,包括端口、波特率、每字节位数、校验、停止位数和流控制。</p>
          <p align="center"><img src="T12_2.gif" alt="T12_2.tif (92960 bytes)" width="339" height="244"></p>
          <p align="center">图12.2 Communication settings对话框</p>
          <p align="JUSTIFY"> </p>
          <p align="JUSTIFY">  通过该对话框也可以设置TTY终端仿真的属性,如果选择New Line(自动换行),那么每当从串口读到回车符(‘\r’)时,视图中的正文就会换行,否则,只有在读到换行符(‘\n’)时才会换行。如果选择Local 
            echo(本地回显),那么发送的字符会在视图中显示出来。</p>
          <p align="JUSTIFY">  终端仿真程序的特点是数据的传输没有规律。因为键盘输入速度有限,所以发送的数据量较小,但接收的数据源是不确定的,所以有可能会有大量数据高速涌入的情况发生。根据Terminal的这些特性,我们在程序中创建了一个辅助工作者线程专门来监视串行口的输入。由于写入串行口的数据量不大,不会太费时,所以在主线程中完成写端口的任务是可以的,不必另外创建线程。</p>
          <p align="JUSTIFY">  现在就让我们开始工作。请读者按下面几步进行:</p>
          <blockquote> 
            <blockquote> 
              <p align="JUSTIFY">用AppWizard建立一个名为Terminal的MFC应用程序。在MFC AppWizard对话框的第1步选择Single 
                document,在第4步去掉Docking toolbar的选择,在第6步把CTerminalView的基类改为CEditView。</p>
              <p align="JUSTIFY">在Terminal工程的资源视图中打开IDR_MAINFRAME菜单资源。去掉Edit菜单和View菜单,并去掉File菜单中除Exit以外的所有菜单项。然后在File菜单中加入三个菜单项,如表12.5所示。</p>
            </blockquote>
          </blockquote>
          <p><b> </b></p>
          <b> 
          <p align="CENTER">表12.5 新菜单项</p>
          </b> 
          <table border="1" cellspacing="1" cellpadding="1" width="579">
            <tr> 
              <td width="50%"><b>
                <p align="JUSTIFY">标题
                </b></td>
              <td width="50%"><b>
                <p align="JUSTIFY">ID
                </b></td>
            </tr>
            <tr> 
              <td width="50%">
                <p align="JUSTIFY">Settings...
              </td>
              <td width="50%">
                <p align="JUSTIFY">ID_FILE_SETTINGS
              </td>
            </tr>
            <tr> 
              <td width="50%">
                <p align="JUSTIFY">Connect
              </td>
              <td width="50%">
                <p align="JUSTIFY">ID_FILE_CONNECT
              </td>
            </tr>
            <tr> 
              <td width="50%">
                <p align="JUSTIFY">Disconnect
              </td>
              <td width="50%">
                <p align="JUSTIFY">ID_FILE_DISCONNECT
              </td>
            </tr>
          </table>
          <p> </p>
          <p align="JUSTIFY"> </p>
          <blockquote> 
            <blockquote> 
              <p align="JUSTIFY">用ClassWizard为CTerminalDoc类创建三个与上表菜单消息对应的命令处理函数,使用缺省的函数名。为ID_FILE_CONNECT和ID_FILE_DISCONNECT命令创建命令更新处理函数。另外,用ClassWizard为该类加入CanCloseFrame成员函数。</p>
              <p align="JUSTIFY">用ClassWizard为CTerminalView类创建OnChar函数,该函数用来把用户键入的字符向串行口输出。</p>
              <p align="JUSTIFY">新建一个对话框模板资源,令其ID为IDD_COMSETTINGS。请按图12.2和表12.6设计对话框模板。</p>
            </blockquote>
          </blockquote>
          <p><b> </b></p>
          <b> 
          <p align="CENTER">表12.6 通信设置对话框中的主要控件</p>
          </b> 
          <table border="1" cellspacing="1" cellpadding="1" width="526">
            <tr> 
              <td width="29%"><b>
                <p align="JUSTIFY">控件
                </b></td>
              <td width="26%"><b>
                <p align="JUSTIFY">ID
                </b></td>
              <td width="44%"><b>
                <p align="JUSTIFY">属性设置
                </b></td>
            </tr>
            <tr> 
              <td width="29%">
                <p align="JUSTIFY">Base options组框
              </td>
              <td width="26%">
                <p align="JUSTIFY">缺省
              </td>
              <td width="44%">
                <p align="JUSTIFY">标题为Base options
              </td>
            </tr>
            <tr> 
              <td width="29%">
                <p align="JUSTIFY">Port组合框
              </td>
              <td width="26%">
                <p align="JUSTIFY">IDC_PORT
              </td>
              <td width="44%">
                <p align="JUSTIFY">Drop List,不选Sort,初始列表为COM1、COM2、COM3、COM4
              </td>
            </tr>
            <tr> 
              <td width="29%">
                <p align="JUSTIFY">Baud rate组合框
              </td>
              <td width="26%">
                <p align="JUSTIFY">IDC_BAUD
              </td>
              <td width="44%">
                <p align="JUSTIFY">Drop List,不选Sort,初始列表为300、600、1200、2400、9600、14400、19200、38400、57600
              </td>
            </tr>
            <tr> 
              <td width="29%">
                <p align="JUSTIFY">Data bits组合框
              </td>
              <td width="26%">
                <p align="JUSTIFY">IDC_DATABITS
              </td>
              <td width="44%">
                <p align="JUSTIFY">Drop List,不选Sort,初列表为5、6、7、8
              </td>
            </tr>
            <tr> 
              <td width="29%">
                <p align="JUSTIFY">Parity组合框
              </td>
              <td width="26%">
                <p align="JUSTIFY">IDC_PARITY
              </td>
              <td width="44%">
                <p align="JUSTIFY">Drop List,不选Sort,初列表为None、Even、Odd
              </td>
            </tr>
            <tr> 
              <td width="29%">
                <p align="JUSTIFY">Stop bits组合框
              </td>
              <td width="26%">
                <p align="JUSTIFY">IDC_STOPBITS
              </td>
              <td width="44%">
                <p align="JUSTIFY">Drop List,不选Sort,初列表为1、1.5、2
              </td>
            </tr>
            <tr> 
              <td width="29%">
                <p align="JUSTIFY">Flow control组框
              </td>
              <td width="26%">
                <p align="JUSTIFY">缺省
              </td>
              <td width="44%">
                <p align="JUSTIFY">标题为Flow control
              </td>
            </tr>
            <tr> 
              <td width="29%">
                <p align="JUSTIFY">None单选按钮
              </td>
              <td width="26%">
                <p align="JUSTIFY">IDC_FLOWCTRL
              </td>
              <td width="44%">
                <p align="JUSTIFY">标题为None,选择Group属性
              </td>
            </tr>
            <tr> 
              <td width="29%">
                <p align="JUSTIFY">RTS/CTS单选按钮
              </td>
              <td width="26%">
                <p align="JUSTIFY">缺省
              </td>
              <td width="44%">
                <p align="JUSTIFY">标题为RTS/CTS
              </td>
            </tr>
            <tr> 
              <td width="29%">
                <p align="JUSTIFY">XON/XOFF单选按钮
              </td>
              <td width="26%">
                <p align="JUSTIFY">缺省
              </td>
              <td width="44%">
                <p align="JUSTIFY">标题为XON/XOFF
              </td>
            </tr>
            <tr> 
              <td width="29%">
                <p align="JUSTIFY">TTY options组框
              </td>
              <td width="26%">
                <p align="JUSTIFY">缺省
              </td>
              <td width="44%">
                <p align="JUSTIFY">标题为TTY options
              </td>
            </tr>
            <tr> 
              <td width="29%">
                <p align="JUSTIFY">New line检查框
              </td>
              <td width="26%">
                <p align="JUSTIFY">IDC_NEWLINE
              </td>
              <td width="44%">
                <p align="JUSTIFY">标题为New line
              </td>
            </tr>
            <tr> 
              <td width="29%">
                <p align="JUSTIFY">Local echo检查框
              </td>
              <td width="26%">
                <p align="JUSTIFY">IDC_ECHO
              </td>
              <td width="44%">
                <p align="JUSTIFY">标题为Local echo
              </td>
            </tr>
          </table>
          <p> </p>

⌨️ 快捷键说明

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