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

📄 chap12_4.htm

📁 vc教程,真正的程序员用Visual C++。如果你想当程序员
💻 HTM
📖 第 1 页 / 共 4 页
字号:
          <p align="JUSTIFY"> </p>
          <blockquote> 
            <blockquote> 
              <p align="JUSTIFY">打开ClassWizard,为IDD_COMSETTINGS模板创建一个名为CSetupDlg的对话框类。为该类加入OnInitDialog成员函数,并按表12.7加入数据成员。</p>
            </blockquote>
          </blockquote>
          <p><b> </b></p>
          <b> 
          <p align="CENTER">表12.7 CSetupDlg类的数据成员</p>
          </b> 
          <table border="1" cellspacing="1" cellpadding="1" width="579">
            <tr> 
              <td width="33%"><b>
                <p align="JUSTIFY">控件ID
                </b></td>
              <td width="33%"><b>
                <p align="JUSTIFY">变量名
                </b></td>
              <td width="33%"><b>
                <p align="JUSTIFY">数据类型
                </b></td>
            </tr>
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">IDC_BAND
              </td>
              <td width="33%">
                <p align="JUSTIFY">m_sBaud
              </td>
              <td width="33%">
                <p align="JUSTIFY">CString
              </td>
            </tr>
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">IDC_DATABITS
              </td>
              <td width="33%">
                <p align="JUSTIFY">m_sDataBits
              </td>
              <td width="33%">
                <p align="JUSTIFY">CString
              </td>
            </tr>
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">IDC_ECHO
              </td>
              <td width="33%">
                <p align="JUSTIFY">m_bEcho
              </td>
              <td width="33%">
                <p align="JUSTIFY">BOOL
              </td>
            </tr>
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">IDC_FLOWCTRL
              </td>
              <td width="33%">
                <p align="JUSTIFY">m_nFlowCtrl
              </td>
              <td width="33%">
                <p align="JUSTIFY">int
              </td>
            </tr>
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">IDC_NEWLINE
              </td>
              <td width="33%">
                <p align="JUSTIFY">m_bNewLine
              </td>
              <td width="33%">
                <p align="JUSTIFY">BOOL
              </td>
            </tr>
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">IDC_PARITY
              </td>
              <td width="33%">
                <p align="JUSTIFY">m_nParity
              </td>
              <td width="33%">
                <p align="JUSTIFY">int
              </td>
            </tr>
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">IDC_PORT
              </td>
              <td width="33%">
                <p align="JUSTIFY">m_sPort
              </td>
              <td width="33%">
                <p align="JUSTIFY">CString
              </td>
            </tr>
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">IDC_STOPBITS
              </td>
              <td width="33%">
                <p align="JUSTIFY">m_nStopBits
              </td>
              <td width="33%">
                <p align="JUSTIFY">int
              </td>
            </tr>
          </table>
          <p> </p>
          <p align="JUSTIFY"> </p>
          <blockquote> 
            <blockquote> 
              <p align="JUSTIFY">按清单12.6、12.7和12.8修改程序。清单12.6列出了CTerminalDoc类的部分代码,清单12.7是CTerminalView的部分代码,清单12.8是CSetupDlg类的部分代码。在本例中使用了WM_COMMNOTIFY消息。虽然在Win32中,WM_COMMNOTIFY消息已经取消,系统自己不会产生该消息,但Visual 
                C++对该消息的定义依然保留。考虑到使用习惯,Terminal程序辅助线程通过发送该消息来通知视图有通信事件发生。</p>
            </blockquote>
          </blockquote>
          <p><b> </b></p>
          <b> 
          <p align="JUSTIFY">清单12.6 CTerminalDoc类的部分代码</p>
          </b> 
          <p align="JUSTIFY">// TerminalDoc.h : interface of the CTerminalDoc 
            class</p>
          <p align="JUSTIFY">//</p>
          <p align="JUSTIFY">/////////////////////////////////////////////////////////////////////////////</p>
          <p><b> </b></p>
          <b> 
          <p align="JUSTIFY"> </p>
          <p align="JUSTIFY">#define MAXBLOCK 2048</p>
          <p align="JUSTIFY">#define XON 0x11</p>
          <p align="JUSTIFY">#define XOFF 0x13</p>
          <p align="JUSTIFY"> </p>
          <p align="JUSTIFY">UINT CommProc(LPVOID pParam);</p>
          </b> 
          <p align="JUSTIFY"> </p>
          <p align="JUSTIFY">class CTerminalDoc : public CDocument</p>
          <p align="JUSTIFY">{</p>
          <p align="JUSTIFY">protected: // create from serialization only</p>
          <p align="JUSTIFY">CTerminalDoc();</p>
          <p align="JUSTIFY">DECLARE_DYNCREATE(CTerminalDoc)</p>
          <p align="JUSTIFY"> </p>
          <p align="JUSTIFY">// Attributes</p>
          <p align="JUSTIFY">public:</p>
          <p><b> </b></p>
          <b> 
          <p align="JUSTIFY">CWinThread* m_pThread; // 代表辅助线程</p>
          <p align="JUSTIFY">volatile BOOL m_bConnected;</p>
          <p align="JUSTIFY">volatile HWND m_hTermWnd;</p>
          <p align="JUSTIFY">volatile HANDLE m_hPostMsgEvent; // 用于WM_COMMNOTIFY消息的事件对象</p>
          <p align="JUSTIFY">OVERLAPPED m_osRead, m_osWrite; // 用于重叠读/写</p>
          <p align="JUSTIFY"> </p>
          <p align="JUSTIFY">volatile HANDLE m_hCom; // 串行口句柄</p>
          <p align="JUSTIFY">int m_nBaud;</p>
          <p align="JUSTIFY">int m_nDataBits;</p>
          <p align="JUSTIFY">BOOL m_bEcho;</p>
          <p align="JUSTIFY">int m_nFlowCtrl;</p>
          <p align="JUSTIFY">BOOL m_bNewLine;</p>
          <p align="JUSTIFY">int m_nParity;</p>
          <p align="JUSTIFY">CString m_sPort;</p>
          <p align="JUSTIFY">int m_nStopBits;</p>
          </b>
          <p align="JUSTIFY"><b></b> </p>
          <p align="JUSTIFY"> </p>
          <p align="JUSTIFY">// Operations</p>
          <p align="JUSTIFY">public:</p>
          <p><b> </b></p>
          <b> 
          <p align="JUSTIFY">BOOL ConfigConnection();</p>
          <p align="JUSTIFY">BOOL OpenConnection();</p>
          <p align="JUSTIFY">void CloseConnection();</p>
          <p align="JUSTIFY">DWORD ReadComm(char *buf,DWORD dwLength);</p>
          <p align="JUSTIFY">DWORD WriteComm(char *buf,DWORD dwLength);</p>
          </b> 
          <p align="JUSTIFY">// Overrides</p>
          <p align="JUSTIFY"><b>. . .</b></p>
          <p align="JUSTIFY">};</p>
          <p align="JUSTIFY"> </p>
          <p align="JUSTIFY">/////////////////////////////////////////////////////////////////////////////</p>
          <p align="JUSTIFY">// TerminalDoc.cpp : implementation of the CTerminalDoc 
            class</p>
          <p align="JUSTIFY">//</p>
          <p><b> </b></p>
          <b> 
          <p align="JUSTIFY">#include &quot;SetupDlg.h&quot;</p>
          </b> 
          <p align="JUSTIFY"> </p>
          <p align="JUSTIFY">CTerminalDoc::CTerminalDoc()</p>
          <p align="JUSTIFY">{</p>
          <p align="JUSTIFY">// TODO: add one-time construction code here</p>
          <p><b> </b></p>
          <b> 
          <p align="JUSTIFY">m_bConnected=FALSE;</p>
          <p align="JUSTIFY">m_pThread=NULL;</p>
          <p align="JUSTIFY"> </p>
          <p align="JUSTIFY">m_nBaud = 9600;</p>
          <p align="JUSTIFY">m_nDataBits = 8;</p>
          <p align="JUSTIFY">m_bEcho = FALSE;</p>
          <p align="JUSTIFY">m_nFlowCtrl = 0;</p>
          <p align="JUSTIFY">m_bNewLine = FALSE;</p>
          <p align="JUSTIFY">m_nParity = 0;</p>
          <p align="JUSTIFY">m_sPort = &quot;COM2&quot;;</p>
          <p align="JUSTIFY">m_nStopBits = 0;</p>
          </b> 
          <p align="JUSTIFY">}</p>
          <p align="JUSTIFY"> </p>
          <p align="JUSTIFY">CTerminalDoc::~CTerminalDoc()</p>
          <p align="JUSTIFY">{</p>
          <p><b> </b></p>
          <b> 
          <p align="JUSTIFY">if(m_bConnected)</p>
          <p align="JUSTIFY">CloseConnection();</p>
          <p align="JUSTIFY">// 删除事件句柄</p>
          <p align="JUSTIFY">if(m_hPostMsgEvent)</p>
          <p align="JUSTIFY">CloseHandle(m_hPostMsgEvent);</p>
          <p align="JUSTIFY">if(m_osRead.hEvent)</p>
          <p align="JUSTIFY">CloseHandle(m_osRead.hEvent);</p>
          <p align="JUSTIFY">if(m_osWrite.hEvent)</p>
          <p align="JUSTIFY">CloseHandle(m_osWrite.hEvent);</p>
          </b> 
          <p align="JUSTIFY">}</p>
          <p align="JUSTIFY"> </p>
          <p align="JUSTIFY">BOOL CTerminalDoc::OnNewDocument()</p>
          <p align="JUSTIFY">{</p>
          <p align="JUSTIFY">if (!CDocument::OnNewDocument())</p>
          <p align="JUSTIFY">return FALSE;</p>
          <p align="JUSTIFY">((CEditView*)m_viewList.GetHead())-&gt;SetWindowText(NULL);</p>
          <p align="JUSTIFY"> </p>
          <p align="JUSTIFY">// TODO: add reinitialization code here</p>
          <p align="JUSTIFY">// (SDI documents will reuse this document)</p>
          <p align="JUSTIFY"> </p>
          <p><b> </b></p>
          <b> 
          <p align="JUSTIFY">// 为WM_COMMNOTIFY消息创建事件对象,手工重置,初始化为有信号的</p>
          <p align="JUSTIFY">if((m_hPostMsgEvent=CreateEvent(NULL, TRUE, TRUE, 
            NULL))==NULL)</p>
          <p align="JUSTIFY">return FALSE;</p>
          <p align="JUSTIFY">memset(&amp;m_osRead, 0, sizeof(OVERLAPPED));</p>
          <p align="JUSTIFY">memset(&amp;m_osWrite, 0, sizeof(OVERLAPPED));</p>
          <p align="JUSTIFY">// 为重叠读创建事件对象,手工重置,初始化为无信号的</p>
          <p align="JUSTIFY">if((m_osRead.hEvent=CreateEvent(NULL, TRUE, FALSE, 
            NULL))==NULL)</p>
          <p align="JUSTIFY">return FALSE;</p>
          <p align="JUSTIFY">// 为重叠写创建事件对象,手工重置,初始化为无信号的</p>
          <p align="JUSTIFY">if((m_osWrite.hEvent=CreateEvent(NULL, TRUE, FALSE, 

⌨️ 快捷键说明

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