SettingCmmDlg.cpp
上传用户:asikq0571
上传日期:2014-07-12
资源大小:528k
文件大小:5k
源码类别:

Internet/IE编程

开发平台:

Visual C++

  1. // SettingCmmDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "Peugeot.h"
  5. #include "SettingCmmDlg.h"
  6. #include "MainFrm.h"
  7. #include "PeugeotDoc.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CSettingCmmDlg dialog
  15. CSettingCmmDlg::CSettingCmmDlg(CWnd* pParent /*=NULL*/)
  16. : CDialog(CSettingCmmDlg::IDD, pParent)
  17. {
  18. //{{AFX_DATA_INIT(CSettingCmmDlg)
  19. m_CmmType = 0;
  20. m_BaudRate = 5;
  21. m_StopBits = 0;
  22. m_ByteSize = 4;
  23. m_Parity = 2;
  24. m_sPortName = _T("");
  25. m_TCPIPPrtType = -1;
  26. m_RemoteIPPort = 0;
  27. m_LocalIPPort = 0;
  28. //}}AFX_DATA_INIT
  29.     m_sRemoteIPAddr = _T("");
  30.     m_sLocalIPAddr  = _T("");
  31. }
  32. void CSettingCmmDlg::DoDataExchange(CDataExchange* pDX)
  33. {
  34. CDialog::DoDataExchange(pDX);
  35. //{{AFX_DATA_MAP(CSettingCmmDlg)
  36. DDX_Control(pDX, IDC_LOCAL_IPADDR, m_LocalIPAddr);
  37. DDX_Control(pDX, IDC_REMOTE_IPADDR, m_RemoteIPAddr);
  38. DDX_Control(pDX, IDC_PortName, m_cPortName);
  39. DDX_Radio(pDX, IDC_CMMTYPE, m_CmmType);
  40. DDX_Radio(pDX, IDC_BAUDRATE, m_BaudRate);
  41. DDX_Radio(pDX, IDC_STOPBITS, m_StopBits);
  42. DDX_Radio(pDX, IDC_BYTESIZE, m_ByteSize);
  43. DDX_Radio(pDX, IDC_PARITY, m_Parity);
  44. DDX_CBString(pDX, IDC_PortName, m_sPortName);
  45. DDX_Radio(pDX, IDC_TCP_IP_TYPE, m_TCPIPPrtType);
  46. DDX_Text(pDX, IDC_REMOTE_IPPORT, m_RemoteIPPort);
  47. DDV_MinMaxUInt(pDX, m_RemoteIPPort, 1, 9999);
  48. DDX_Text(pDX, IDC_LOCAL_IPPORT, m_LocalIPPort);
  49. DDV_MinMaxUInt(pDX, m_LocalIPPort, 1, 9999);
  50. //}}AFX_DATA_MAP
  51. }
  52. BEGIN_MESSAGE_MAP(CSettingCmmDlg, CDialog)
  53. //{{AFX_MSG_MAP(CSettingCmmDlg)
  54. //}}AFX_MSG_MAP
  55. END_MESSAGE_MAP()
  56. /////////////////////////////////////////////////////////////////////////////
  57. // CSettingCmmDlg message handlers
  58. BOOL CSettingCmmDlg::OnInitDialog() 
  59. {
  60. CMainFrame* pMainFrame;
  61.     pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd; //框架窗口指针
  62. CPeugeotDoc* pDoc;
  63. pDoc = (CPeugeotDoc*) pMainFrame->GetActiveDocument(); //文档指针
  64. m_CmmType  = pDoc->m_CmmPortType;
  65.     
  66.    //读取COMM对象当前参数(波特率、校验方式、数字位、停止位)
  67.     m_StopBits = pDoc->m_ComObj.m_nStopBits;
  68. m_ByteSize = pDoc->m_ComObj.m_nDataBits-4;   //because dbc.bytesize (4~8)
  69. m_Parity   = pDoc->m_ComObj.m_nParity;
  70.     switch ( pDoc->m_ComObj.m_nBaudRate ) {
  71. case 300:
  72.      m_BaudRate = 0;
  73.      break;
  74.     case 600:
  75.      m_BaudRate = 1;
  76.      break;
  77. case 1200:
  78.      m_BaudRate = 2;
  79.      break;
  80.     case 2400:
  81.      m_BaudRate = 3;
  82.      break;
  83. case 4800:
  84.      m_BaudRate = 4;
  85.      break;
  86.     case 9600:
  87.      m_BaudRate = 5;
  88.      break;
  89. case 14400:
  90.      m_BaudRate = 6;
  91.      break;
  92.     case 19200:
  93.      m_BaudRate = 7;
  94.      break;
  95. case 38400:
  96.      m_BaudRate = 8;
  97.      break;
  98.     case 56000:
  99.      m_BaudRate = 9;
  100.      break;
  101. case 57600:
  102.      m_BaudRate = 10;
  103.      break;
  104.     case 115200:
  105.      m_BaudRate = 11;
  106.      break;
  107. default:
  108.  m_BaudRate = 5;
  109.  break;
  110. }
  111. //网络口参数
  112.     m_TCPIPPrtType = pDoc->m_NetParam.TCPPrtType;
  113.     m_RemoteIPPort = pDoc->m_NetParam.RemoteIPPort;
  114.     m_LocalIPPort  = pDoc->m_NetParam.LocalIPPort;
  115. CDialog::OnInitDialog();
  116.     m_RemoteIPAddr.SetWindowText(pDoc->m_NetParam.RemoteIPAddr);
  117. m_LocalIPAddr.SetWindowText(pDoc->m_NetParam.LocalIPAddr);
  118. int i;
  119. CString s1 = pDoc->m_ComObj.m_szPortName;
  120.     CString s2 = "";
  121. for (i=1; i<12; i++)
  122. {
  123. s2.Format("COM%d",i);
  124. if (CheckComm(s2) || s2 == s1)
  125. m_cPortName.AddString(s2);
  126. }
  127.     m_cPortName.SelectString(-1,s1);    //设置当前串口
  128. return TRUE;
  129. /*
  130. for (i=1;i<12;i++)
  131. {
  132.      pDoc->m_ComObj.m_szPortName.Format("COM%d",i);
  133.  if ( (pDoc->m_ComObj.OpenPort()) || (pDoc->m_ComObj.m_szPortName==s1) )
  134.         m_cPortName.AddString(pDoc->m_ComObj.m_szPortName);
  135.  pDoc->m_ComObj.ClosePort();
  136. }
  137.     */
  138.     // pDoc->m_ComObj.m_szPortName = s1;   //按‘CANCLE’后,串口类的当前串口不变。
  139. }
  140. void CSettingCmmDlg::OnOK() 
  141. {
  142. // TODO: Add extra validation here
  143. //::::OnOK()后,控件变量的环境销毁,无法再调用GetWindowText
  144.     m_RemoteIPAddr.GetWindowText(m_sRemoteIPAddr);
  145. m_LocalIPAddr.GetWindowText(m_sLocalIPAddr);
  146. CDialog::OnOK();
  147. }
  148. bool CSettingCmmDlg::CheckComm(CString sPortName)
  149. {
  150.     HANDLE hCom;
  151.     hCom = INVALID_HANDLE_VALUE;
  152. int nTryTime = 1;
  153. while(nTryTime < 4) 
  154. {
  155. hCom = CreateFile( _T("\\.\")+sPortName,
  156.                GENERIC_READ|GENERIC_WRITE, 
  157.                0,
  158.                    NULL, 
  159.                OPEN_EXISTING,
  160.                FILE_FLAG_OVERLAPPED,
  161.                NULL
  162.                );
  163. if(hCom != INVALID_HANDLE_VALUE)
  164. {
  165. CloseHandle(hCom);
  166. return true;
  167. }
  168. nTryTime++;
  169. Sleep(10);
  170. }
  171. return false;
  172. }