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

📄 chap12_4.htm

📁 很不错的一本关于VC的书
💻 HTM
📖 第 1 页 / 共 4 页
字号:
          </table>          <p> </p>          <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, 

⌨️ 快捷键说明

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