int Data_Length;  Data_Length = Data.GetLength();  if (Data_Length == 0) return \ char *pchar = new char[Data_Length];  //用了new分配内存空间,要记得释放  strncpy(pchar,Data,Data_Length);  for(int i=0; i //===============函数结束=============================     comm.h编写如下: #ifndef comm_H  #define comm_H    #define WM_FOUNDCOMM WM_USER + 1  //自定义消息WM_FOUNDCOMM,收到该消息表示串口已经找到  #define WM_READCOMM WM_USER + 2   //自定义消息WM_READCOMM,收到该消息缓冲区有数据,可以读取 extern void FindComm();     //申明为外部函数 extern void OpenComm(int nBaud, int nData, int nStop, int nCal); extern void CloseComm();  extern UINT ThreadFunc(LPVOID pParam); //申明全局线程处理函数 extern CString DisplayCString2Hex(CString Data, bool Blank_allow); extern CString DisplayHex2CString(CString Data);  extern int ConvertHexC2String(CString str, CByteArray &senddata); extern bool ComIsOK;     //申明为外部变量 extern HANDLE hCom;  extern CString strcomname;    #endif   在commassistDlg.h中包含MyButton.h文件 在#endif // _MSC_VER > 1000后加入 #include \ 在// Construction后加入变量及函数  第 21 页 共 37 页   CWinThread* pReceiveThread;  void ShowStatus();  int m_intTxCnt;  int m_intRxCnt;  BOOL m_bAutoSend;  DWORD ReadComm();    在commassistDlg.cpp中 加入头文件comm.h #include \加入全局变量 CString strIn; CString strOut; CString m_strFile;    变量初始化如  ///////////////////////////////////////////////////////////////////////////// // CCommassistDlg dialog   CCommassistDlg::CCommassistDlg(CWnd* pParent /*=NULL*/)  : CDialog(CCommassistDlg::IDD, pParent) {  //{{AFX_DATA_INIT(CCommassistDlg)  m_strTimer = _T(\ m_strFilePath = _T(\ m_strOut = _T(\ m_strStatus = _T(\ m_check_hexrx = FALSE;  m_check_hextx = FALSE;  //}}AFX_DATA_INIT  // Note that LoadIcon does not require a subsequent DestroyIcon in Win32  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);  //下面就是自己添加的变量初始化  m_strTimer = \ m_strFilePath = \请选择要发送的文件\ m_intTxCnt = 0;  m_intRxCnt = 0;  m_bAutoSend = 0;  strIn = \ strOut = \}   第 22 页 共 37 页  在OnInitDialog函数中添加代码如下 // TODO: Add extra initialization here  m_comcontrol.SetForeColor(RGB(255,0,0));  FindComm();     //调用自动找串口函数  m_comlist.SetCurSel(0);  //设置串口号下拉框默认值为第一个  m_baud.SetCurSel(6);  //设置波特率下拉框默认值为9600  m_bdata.SetCurSel(3);  //设置数据位下拉框默认值为8位  m_bstop.SetCurSel(0);  //设置停止位下拉框默认值为1  m_cal.SetCurSel(0);   //设置校验位下拉框默认值为None无  GetDlgItem(IDC_BTN_HANDSEND)->EnableWindow(false); //设置手动发送按钮不可用  GetDlgItem(IDC_BTN_AUTOSEND)->EnableWindow(false); //设置自动发送按钮不可用  GetDlgItem(IDC_EDIT_TIMER)->EnableWindow(false); //设置发送间隔按钮不可用  GetDlgItem(IDC_BTN_SELCTFILE)->EnableWindow(false);  //设置选择文件按钮不可用  GetDlgItem(IDC_BTN_SENDFILE)->EnableWindow(false);  //设置发送文件按钮不可用  ShowStatus();  //下面语句用于解决程序运行后初始化EDIT框内容被默认自动选中状态  //返回值需更改为FALSE  GetFocus();  //获取焦点  SetFocus();  //设置焦点  m_CEditStatus.SetSel(-1,-1,FALSE); //设置 // PostMessage(EM_SETSEL,-1,0);   return FALSE;  // return TRUE  unless you set the focus to a control    用ClassWizard添加WindowProc函数来处理自定义消息    第 23 页 共 37 页  函数内容如下:  //=====================消息处理函数=========================== //功能:处理自定义消息=========================================  LRESULT CCommassistDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)  {  // TODO: Add your specialized code here and/or call the base class  switch(message)  {  case WM_FOUNDCOMM : //已找到串口,串口号以字符串形式由wParam传递   m_comlist.AddString((LPCTSTR)wParam); //用AddString添加一个字符串即COM号到m_comlist列表框中   break;  case WM_READCOMM : //读串口消息   ReadComm();     break;  }  return CDialog::WindowProc(message, wParam, lParam); }  //=====================消息处理函数结束===================== 双击“打开串口”按钮编辑代码如下: void CCommassistDlg::OnComcontrol()  {  // TODO: Add your control notification handler code here  int nBaud,nData,nStop,nCal,nTemp;  CString sTemp,siTemp;  //波特率下拉框设置=================  nTemp=m_baud.GetCurSel();  switch(nTemp)  {  case 0:   nBaud = CBR_110;  break;  case 1:   nBaud = CBR_300;  break;  case 2:   nBaud = CBR_600;  break;  case 3:   nBaud = CBR_1200;  break;  case 4:   nBaud = CBR_2400;  break;  case 5:   nBaud = CBR_4800;  break;  case 6:   nBaud = CBR_9600;  break;  第 24 页 共 37 页