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

Internet/IE编程

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "Peugeot.h"
  5. #include "MainFrm.h"
  6. #include "PeugeotDoc.h"
  7. #include "PeugeotView.h"
  8. ////////////////
  9. #include "YXData.h"
  10. #include "YCData.h"
  11. #include "YMData.h"
  12. #include "YKData.h"
  13. #include "SettingCmmDlg.h"
  14. #include "SettingPrtDlg.h"
  15. /////////////////
  16. #ifdef _DEBUG
  17. #define new DEBUG_NEW
  18. #undef THIS_FILE
  19. static char THIS_FILE[] = __FILE__;
  20. #endif
  21. /////////////////////////////////////////////////////////////////////////////
  22. // CMainFrame
  23. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  24. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  25. //{{AFX_MSG_MAP(CMainFrame)
  26. ON_WM_CREATE()
  27. ON_COMMAND(ID_SET_CMMPORT, OnSetCmmPort)
  28. ON_COMMAND(ID_SET_PROTOCOL, OnSetProtocol)
  29. ON_COMMAND(ID_COMMAND_CONCMM, OnConnectCmm)
  30. ON_COMMAND(ID_COMMAND_DISCONCMM, OnDisconncmm)
  31. ON_UPDATE_COMMAND_UI(ID_COMMAND_CONCMM, OnUpdateConcmm)
  32. ON_UPDATE_COMMAND_UI(ID_COMMAND_DISCONCMM, OnUpdateDisconcmm)
  33. ON_WM_CLOSE()
  34. ON_COMMAND(ID_VIEW_DATA, OnViewData)
  35. ON_COMMAND(ID_VIEW_MESSAGE, OnViewMessage)
  36. ON_UPDATE_COMMAND_UI(ID_VIEW_DATA, OnUpdateViewData)
  37. ON_UPDATE_COMMAND_UI(ID_VIEW_MESSAGE, OnUpdateViewMessage)
  38. ON_COMMAND(ID_COMMAND_PAUSE_DSP, OnPauseDsp)
  39. ON_COMMAND(ID_COMMAND_REFLASH_DSP, OnReflashDsp)
  40. ON_UPDATE_COMMAND_UI(ID_COMMAND_PAUSE_DSP, OnUpdatePauseDsp)
  41. ON_UPDATE_COMMAND_UI(ID_COMMAND_REFLASH_DSP, OnUpdateReflashDsp)
  42. ON_COMMAND(ID_COMMAND_CLEAR_DSP, OnClearDsp)
  43. ON_WM_SIZE()
  44. //}}AFX_MSG_MAP
  45. END_MESSAGE_MAP()
  46. static UINT indicators[] =
  47. {
  48. ID_SEPARATOR,           // status line indicator
  49. ID_INDICATOR_CAPS,
  50. ID_INDICATOR_NUM,
  51. ID_INDICATOR_SCRL,
  52. };
  53. /////////////////////////////////////////////////////////////////////////////
  54. // CMainFrame construction/destruction
  55. CMainFrame::CMainFrame()
  56. {
  57. IsCmmConnect = false;
  58. IsReflashMsg = true;
  59. IsFrameCreat = false;
  60. }
  61. CMainFrame::~CMainFrame()
  62. {
  63. }
  64. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  65. {
  66. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  67. return -1;
  68.    HBITMAP hbm  = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
  69.                   MAKEINTRESOURCE(IDB_TOOLBAR), //加载IDB_TOOLBAR
  70.                   IMAGE_BITMAP, //按位图格式
  71.                   0,0, // cx,cy
  72.                   LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS );
  73.    HBITMAP hbm2 = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
  74.                   MAKEINTRESOURCE(IDB_GRAYTOOLBAR), //加载IDB_TOOLBAR
  75.                   IMAGE_BITMAP, //按位图格式
  76.                   0,0, // cx,cy
  77.                   LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS );
  78.   CBitmap bm,bm2;
  79.   bm.Attach(hbm); 
  80.   bm2.Attach(hbm2);
  81.   m_ToolBar.Create(24,24,ILC_COLOR16, 12, 0);
  82.   m_ToolBar.Add(&bm,(CBitmap*)NULL);
  83.   m_GrayToolBar.Create(24,24,ILC_COLOR16, 12, 0);
  84.   m_GrayToolBar.Add(&bm2,(CBitmap*)NULL);
  85. if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  86. | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  87. !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  88.          
  89. {
  90. TRACE0("Failed to create toolbarn");
  91. return -1;      // fail to create
  92. }
  93.     m_wndToolBar.GetToolBarCtrl().SetImageList(&m_ToolBar);
  94. m_wndToolBar.GetToolBarCtrl().SetDisabledImageList(&m_GrayToolBar);
  95. if (!m_wndStatusBar.Create(this) ||
  96. !m_wndStatusBar.SetIndicators(indicators,
  97.   sizeof(indicators)/sizeof(UINT)))
  98. {
  99. TRACE0("Failed to create status barn");
  100. return -1;      // fail to create
  101. }
  102. // TODO: Delete these three lines if you don't want the toolbar to
  103. //  be dockable 
  104. //m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  105. //EnableDocking(CBRS_ALIGN_ANY);
  106. //DockControlBar(&m_wndToolBar);
  107.     ///////////////////
  108.     if (!m_wndMyBar1.Create(_T("数字显示窗口"), this, CSize(291,260),TRUE,123))
  109. {
  110. TRACE0("Failed to create mybarn");
  111. return -1;
  112. }
  113. if (!m_wndMyBar2.Create(_T("信息提示窗口"), this,CSize(200,100),TRUE,124))
  114. {
  115. TRACE0("Failed to create mybarn");
  116. return -1;
  117. }
  118.     //////////////////////////////////////
  119. m_wndToolBar.SetButtonText(0,"打开");
  120. m_wndToolBar.SetButtonText(1,"保存");
  121.     m_wndToolBar.SetButtonText(3,"规约");
  122.     m_wndToolBar.SetButtonText(4,"端口");
  123.     m_wndToolBar.SetButtonText(6,"连接");
  124. m_wndToolBar.SetButtonText(7,"断开");
  125.     m_wndToolBar.SetButtonText(9,"数据");
  126.     m_wndToolBar.SetButtonText(10,"消息");
  127. m_wndToolBar.SetButtonText(12,"暂停");
  128.     m_wndToolBar.SetButtonText(13,"刷新");
  129.     m_wndToolBar.SetButtonText(14,"清空");
  130.     m_wndToolBar.SetButtonText(16,"关于");
  131. /////////////调整工具条/////////////////
  132.     CRect rc(0, 0, 0, 0);
  133. CSize sizeMax(0, 0);
  134. CToolBarCtrl& bar = m_wndToolBar.GetToolBarCtrl();
  135. for (int nIndex = bar.GetButtonCount() - 1; nIndex >= 0; nIndex--)
  136. {
  137. bar.GetItemRect(nIndex, rc);
  138. rc.NormalizeRect();
  139. sizeMax.cx = __max(rc.Size().cx, sizeMax.cx);
  140. sizeMax.cy = __max(rc.Size().cy, sizeMax.cy);
  141. }
  142. m_wndToolBar.SetSizes(sizeMax, CSize(24,24));
  143. ////////////创建TAB Control,并把它加入到ControlBar中
  144. /// 需要注意的是:同一个ControlBar只能加入一个"一级子窗口"
  145. m_TabCtrl.Create(TCS_DOWN|WS_CHILD|WS_VISIBLE,CRect(0,0,100,100),&m_wndMyBar1,125);
  146. m_TabCtrl.AddPage(RUNTIME_CLASS(CYXData),IDD_YXDATA,"遥信",IDI_ICON_yx);
  147.     m_TabCtrl.AddPage(RUNTIME_CLASS(CYCData),IDD_YCDATA,"遥测",IDI_ICON_yc);
  148. m_TabCtrl.AddPage(RUNTIME_CLASS(CYMData),IDD_YMDATA,"电度",IDI_ICON_ym);
  149. m_TabCtrl.AddPage(RUNTIME_CLASS(CYKData),IDD_YKDATA,"遥控",IDI_ICON_yk);
  150. m_TabCtrl.UpdateWindow();
  151. ////////////创建LIST Control,并把它加入到ControlBar中LVS_REPORT
  152. m_MsgList.Create(WS_THICKFRAME | WS_VSCROLL | WS_CHILD | WS_VISIBLE | LVS_REPORT,CRect(0,0,0,0),&m_wndMyBar2,126);
  153.     
  154. DWORD styles = m_MsgList.GetExtendedStyle();
  155. m_MsgList.SetExtendedStyle(styles|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); //整行选择和网格条纹
  156.    LVCOLUMN  column[3];
  157. int i;
  158. for (i=0; i<3; i++)
  159. {
  160.         column[i].mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH | LVCF_ORDER;
  161. column[i].fmt = LVCFMT_LEFT;
  162. column[i].iSubItem = i;
  163. column[i].iOrder = i;
  164. }
  165. column[0].pszText = "时间";
  166.     column[1].pszText = "消息类型";
  167. column[2].pszText = "内容";
  168.     column[0].cx = 120;
  169.     column[1].cx = 120;
  170. column[2].cx = 360;
  171. for (i=0; i<3; i++)
  172.     m_MsgList.InsertColumn(i, column+i);
  173.  ///////////////两个WNDBAR的停靠控制///////////////////
  174. m_wndMyBar1.SetBarStyle(m_wndMyBar1.GetBarStyle() |
  175. CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
  176. m_wndMyBar2.SetBarStyle(m_wndMyBar2.GetBarStyle() |
  177. CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
  178. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);     //使工具栏可停靠
  179. m_wndMyBar1.EnableDocking(CBRS_ALIGN_ANY);
  180. m_wndMyBar2.EnableDocking(CBRS_ALIGN_ANY);
  181. EnableDocking(CBRS_ALIGN_ANY);
  182. DockControlBar(&m_wndToolBar);                 //3个工具栏停靠方式
  183. DockControlBar(&m_wndMyBar1, AFX_IDW_DOCKBAR_LEFT);
  184. DockControlBar(&m_wndMyBar2, AFX_IDW_DOCKBAR_BOTTOM);
  185. /////////使浮动与停靠显示相同的头部////
  186. #ifdef _SCB_REPLACE_MINIFRAME
  187.     m_pFloatingFrameClass = RUNTIME_CLASS(CSCBMiniDockFrameWnd);
  188. #endif //_SCB_REPLACE_MINIFRAME
  189. ///////////////////
  190.     IsFrameCreat = true;
  191. return 0;
  192. }
  193. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  194. {
  195. if( !CFrameWnd::PreCreateWindow(cs) )
  196. return FALSE;
  197. // TODO: Modify the Window class or styles here by modifying
  198. //  the CREATESTRUCT cs
  199. return TRUE;
  200. }
  201. /////////////////////////////////////////////////////////////////////////////
  202. // CMainFrame diagnostics
  203. #ifdef _DEBUG
  204. void CMainFrame::AssertValid() const
  205. {
  206. CFrameWnd::AssertValid();
  207. }
  208. void CMainFrame::Dump(CDumpContext& dc) const
  209. {
  210. CFrameWnd::Dump(dc);
  211. }
  212. #endif //_DEBUG
  213. /////////////////////////////////////////////////////////////////////////////
  214. // CMainFrame message handlers
  215. void CMainFrame::OnSetCmmPort() 
  216. {
  217.    SetCmmPort();
  218. }
  219. void CMainFrame::OnSetProtocol() 
  220. {
  221.    CSettingPrtDlg PrtDlg;
  222.    if (PrtDlg.DoModal()==IDOK)   // TODO: 保存通讯对话框设置的参数
  223. {
  224.   CPeugeotDoc* pDoc;
  225.   pDoc  = (CPeugeotDoc*)GetActiveDocument();  
  226.   ASSERT_VALID(pDoc);
  227.     
  228.     switch (PrtDlg.m_PrtType)    //选中通讯规约
  229. {
  230.       case 0:
  231.              pDoc->m_PrtType    = pDoc->IEC101_M;
  232.  pDoc->m_MasterFlag = true;
  233.      break;
  234.           case 1:
  235.              pDoc->m_PrtType    = pDoc->IEC101_S;
  236.  pDoc->m_MasterFlag = false;
  237.      break;
  238.           case 2:
  239.              pDoc->m_PrtType    = pDoc->Modbus_M;
  240.  pDoc->m_MasterFlag = true;
  241.      break;
  242.           case 3:
  243.              pDoc->m_PrtType    = pDoc->Modbus_S;
  244.  pDoc->m_MasterFlag = false;
  245.      break;
  246.       default:
  247.              pDoc->m_PrtType    = pDoc->IEC101_S;
  248.  pDoc->m_MasterFlag = false;
  249.      break;
  250. }
  251.   //信息体寄存器地址、数量情况  
  252.   pDoc->m_YXAddr = PrtDlg.m_YXAddr;   
  253.   pDoc->m_YCAddr = PrtDlg.m_YCAddr;
  254.   pDoc->m_YMAddr = PrtDlg.m_YMAddr;
  255.   pDoc->m_YXNum  = PrtDlg.m_YXNum;
  256.   pDoc->m_YCNum  = PrtDlg.m_YCNum;
  257.   pDoc->m_YMNum  = PrtDlg.m_YMNum;
  258.       if ((pDoc->m_PrtType == pDoc->IEC101_M) || (pDoc->m_PrtType == pDoc->IEC101_S))
  259.   {//保存IEC101规约参数
  260.     pDoc->m_PrtIEC101.m_Addr           = PrtDlg.m_IEC101Addr;
  261.     pDoc->m_PrtIEC101.m_CauseOfTranLen = PrtDlg.m_IEC101CauseLen;
  262.     pDoc->m_PrtIEC101.m_CommAddrLen    = PrtDlg.m_IEC101ASDULen;
  263.     pDoc->m_PrtIEC101.m_MsgAddrLen     = PrtDlg.m_IEC101MsgLen;
  264.   }
  265.       else
  266.   {//保存MODBUS规约参数
  267.         pDoc->m_PrtModbus.m_Addr     = PrtDlg.m_ModbusAddr;
  268.         pDoc->m_PrtModbus.m_CallIntv = PrtDlg.m_ModbusCallInt;
  269.     pDoc->m_PrtModbus.m_YXFunc   = PrtDlg.m_ModbusYXFunc;
  270.         pDoc->m_PrtModbus.m_YCFunc   = PrtDlg.m_ModbusYCFunc;
  271.         pDoc->m_PrtModbus.m_YCSize   = PrtDlg.m_ModbusYCSize;
  272.   }
  273.  
  274.       pDoc->NewStackAddr();       //生成实时库空间
  275.   DrawGrid();                 //绘制电子表格
  276.       
  277.   if (pDoc->m_pYXData != NULL)
  278.         UpdateYXGrid();
  279.       if (pDoc->m_pYCData != NULL)
  280.         UpdateYCGrid();
  281.   if (pDoc->m_pYMData != NULL)
  282.         UpdateYMGrid();
  283.   
  284. }
  285. }
  286. void CMainFrame::OnConnectCmm() 
  287. {
  288. CPeugeotDoc*  pDoc  = (CPeugeotDoc*)GetActiveDocument();  //文档指针  主框架类函数;
  289. CPeugeotView* pView = (CPeugeotView*)GetActiveView();     //视图指针;
  290. // OnDisconncmm(); 
  291. if (pDoc->m_PrtType == pDoc->Blank)         //若协议为空,先选中可用协议
  292. OnSetProtocol();  
  293. if (pDoc->m_PrtType == pDoc->Blank)         //如协议对话框中,按‘取消’,仍未选中协议
  294. {
  295.         AfxMessageBox("请先选择/设置通讯协议");
  296. return;
  297. }
  298. if ( (pDoc->m_PrtType == pDoc->IEC101_M) || ((pDoc->m_PrtType == pDoc->IEC101_S)) )
  299. pView->m_pPrtObj = &(pDoc->m_PrtIEC101);  //协议对象指向IEC101协议
  300. else    
  301. pView->m_pPrtObj = &(pDoc->m_PrtModbus);  //协议对象指向MODBUS协议
  302.     pView->m_pPrtObj->InitPrt();    //规约初始化
  303. if (pDoc->m_CmmPortType == pDoc->CommPort)      
  304. {   //串口通讯方式
  305. pDoc->m_ComObj.m_hOwner = pView->GetSafeHwnd(); //串口消息发到该句柄的窗口
  306. if (pDoc->m_ComObj.OpenPort())
  307. {
  308. if ( (pView->m_pPrtObj != NULL) && (pDoc->m_MasterFlag) ) //主站时启动召唤定时器 
  309. pView->m_pPrtObj->StartTimer();
  310. IsCmmConnect = true;
  311. }
  312. else
  313. {
  314. AfxMessageBox("无法打开" + pDoc->m_ComObj.m_szPortName + "rn" + "请选择其它端口");
  315. return;
  316. }    
  317. }
  318. else
  319. {   //网口通讯方式
  320. switch (pDoc->m_NetParam.TCPPrtType)
  321. {
  322. case pDoc->m_NetParam.TCPServer:
  323. pDoc->m_pSrvSocketObj = new CDAServerSocket(pView->GetSafeHwnd());
  324. if ( pDoc->m_pSrvSocketObj->OpenPort(pDoc->m_NetParam.LocalIPPort,pDoc->m_NetParam.LocalIPAddr) )
  325. IsCmmConnect = true;
  326. else
  327. {    
  328. AfxMessageBox("无法创建 " + pDoc->m_NetParam.LocalIPAddr + "服务端口");
  329. return;
  330. }
  331. break;
  332. case pDoc->m_NetParam.TCPClient:
  333. if(pDoc->m_pCltSocketObj != NULL)
  334. {
  335. pDoc->m_pCltSocketObj->ClosePort();
  336. delete pDoc->m_pCltSocketObj;
  337. pDoc->m_pCltSocketObj = NULL;
  338. }
  339. pDoc->m_pCltSocketObj = new CDAClientSocket(pView->GetSafeHwnd());
  340. if (pDoc->m_pCltSocketObj->OpenPort(pDoc->m_NetParam.RemoteIPPort,pDoc->m_NetParam.RemoteIPAddr))
  341. {
  342. }
  343. else
  344. {
  345. AfxMessageBox("无法创建网络端口");
  346. return;
  347. }
  348. break;
  349. case pDoc->m_NetParam.UDP:
  350. pDoc->m_pUDPSocketObj = new CDAUDPSocket(pView->GetSafeHwnd());
  351. if ( pDoc->m_pUDPSocketObj->OpenPort(pDoc->m_NetParam.LocalIPPort) )
  352. {
  353. IsCmmConnect = true;
  354. pView->m_pSocketObj = (CAsyncSocket*)pDoc->m_pUDPSocketObj;
  355. if ( (pView->m_pPrtObj != NULL) && (pDoc->m_MasterFlag) ) //主站时启动召唤定时器 
  356. pView->m_pPrtObj->StartTimer();
  357. }
  358. else
  359. AfxMessageBox("无法打开网络端口,请重试 ");
  360. return;
  361. }
  362. break;
  363. default:
  364. break;
  365. }
  366. }
  367. }
  368. //绘制各页的电子表格;  及遥控对话窗口
  369. void CMainFrame::DrawGrid()
  370. {
  371.   CYXData* pYXDlg;
  372.   CYCData* pYCDlg;
  373.   CYMData* pYMDlg;
  374.   CYKData* pYKDlg;
  375.   
  376.   //获取各页的指针
  377.   pYXDlg = (CYXData*)m_TabCtrl.GetPagePoint(0);
  378.   pYCDlg = (CYCData*)m_TabCtrl.GetPagePoint(1);
  379.   pYMDlg = (CYMData*)m_TabCtrl.GetPagePoint(2);
  380.   pYKDlg = (CYKData*)m_TabCtrl.GetPagePoint(3);
  381.   
  382.   //各页绘制表格
  383.   pYXDlg->DrawYXGrid();
  384.   pYCDlg->DrawYCGrid();
  385.   pYMDlg->DrawYMGrid();
  386.   //加载各页控件参数
  387.   pYXDlg->UpdateYXChara(FALSE);
  388.   pYKDlg->UpdateYKChara(FALSE);
  389. }
  390. //更新YX电子表格数据
  391. void CMainFrame::UpdateYXGrid()
  392. {
  393.   CYXData* pYXDlg;
  394.   pYXDlg = (CYXData*)m_TabCtrl.GetPagePoint(0);
  395.   pYXDlg->UpdateYXGrid();
  396. }
  397. void CMainFrame::UpdateYCGrid()
  398. {
  399.   CYCData* pYCDlg;
  400.   pYCDlg = (CYCData*)m_TabCtrl.GetPagePoint(1);
  401.   pYCDlg->UpdateYCGrid();
  402. }
  403. void CMainFrame::UpdateYMGrid()
  404. {
  405.   CYMData* pYMDlg;
  406.   pYMDlg = (CYMData*)m_TabCtrl.GetPagePoint(2);
  407.   pYMDlg->UpdateYMGrid();
  408. }
  409. //断开通讯连接
  410. void CMainFrame::OnDisconncmm() 
  411. {
  412. CPeugeotDoc*  pDoc  = (CPeugeotDoc*)GetActiveDocument();  //文档指针  主框架类函数;
  413. CPeugeotView* pView = (CPeugeotView*)GetActiveView();     //视图指针;
  414.    
  415.     if ( (pView->m_pPrtObj != NULL) && (pDoc->m_MasterFlag) ) //主站时关闭召唤定时器
  416. pView->m_pPrtObj->CloseTimer();
  417.     pView->m_pSocketObj = NULL;
  418. if (pDoc->m_CmmPortType == pDoc->CommPort)      
  419. pDoc->m_ComObj.ClosePort();
  420. else
  421. { //网口通讯方式
  422.     if(pDoc->m_pSrvSocketObj != NULL)
  423.    pDoc->m_pSrvSocketObj->ClosePort();
  424.    delete pDoc->m_pSrvSocketObj;
  425.    pDoc->m_pSrvSocketObj = NULL;
  426. }
  427.     if(pDoc->m_pCltSocketObj != NULL)
  428. {
  429.    pDoc->m_pCltSocketObj->ClosePort();
  430.    delete pDoc->m_pCltSocketObj;
  431.    pDoc->m_pCltSocketObj = NULL;
  432. }
  433.     if(pDoc->m_pUDPSocketObj != NULL)
  434. {
  435.    pDoc->m_pUDPSocketObj->ClosePort();
  436.    delete pDoc->m_pUDPSocketObj;
  437.    pDoc->m_pUDPSocketObj = NULL;
  438. }
  439. }
  440. IsCmmConnect = false;
  441. }
  442. void CMainFrame::OnUpdateConcmm(CCmdUI* pCmdUI) 
  443. {
  444.   pCmdUI->Enable(!IsCmmConnect);
  445. }
  446. void CMainFrame::OnUpdateDisconcmm(CCmdUI* pCmdUI) 
  447. {
  448.   pCmdUI->Enable(IsCmmConnect);
  449. }
  450. void CMainFrame::OnClose() 
  451. {
  452.     if (IsCmmConnect)
  453.    OnDisconncmm();
  454. CFrameWnd::OnClose();
  455. }
  456. //底部消息窗口显示信息
  457. void CMainFrame::DisplayEvent(UINT nflag, CString s2)
  458. {
  459.     CTime t = CTime::GetCurrentTime();
  460. CString s0;
  461. CString s1;
  462. s0 = t.Format("%y-%m-%d %H:%M:%S");
  463. if (nflag == 1)
  464. s1 = "主站操作";
  465. else if (nflag == 2)
  466. s1 = "子站应答";
  467. else if (nflag == 3)
  468. s1 = "通道事件";
  469. else
  470.     s1 = "其它类型";
  471.     
  472. m_MsgList.InsertItem(LVIF_TEXT|LVIF_STATE, 0, s0, 0, LVIS_SELECTED,0, 0);
  473. m_MsgList.SetItemText(0,1,s1);
  474.     m_MsgList.SetItemText(0,2,s2);
  475.     
  476. int i;
  477. i = m_MsgList.GetItemCount();
  478.     if (i>8)     
  479.  m_MsgList.DeleteItem(i-1);
  480. }
  481. void CMainFrame::OnViewData() 
  482. {
  483. ShowControlBar(&m_wndMyBar1, !m_wndMyBar1.IsVisible(), FALSE);
  484. }
  485. void CMainFrame::OnViewMessage() 
  486. {
  487. ShowControlBar(&m_wndMyBar2, !m_wndMyBar2.IsVisible(), FALSE);
  488. }
  489. void CMainFrame::OnUpdateViewData(CCmdUI* pCmdUI) 
  490. {
  491.     pCmdUI->Enable();
  492. pCmdUI->SetCheck(m_wndMyBar1.IsVisible());
  493. }
  494. void CMainFrame::OnUpdateViewMessage(CCmdUI* pCmdUI) 
  495. {
  496.     pCmdUI->Enable();
  497. pCmdUI->SetCheck(m_wndMyBar2.IsVisible());
  498. }
  499. void CMainFrame::OnPauseDsp() 
  500. {
  501.     IsReflashMsg = false;
  502. }
  503. void CMainFrame::OnReflashDsp() 
  504. {
  505. IsReflashMsg = true;
  506. }
  507. void CMainFrame::OnUpdatePauseDsp(CCmdUI* pCmdUI) 
  508. {
  509. pCmdUI->Enable(IsReflashMsg);
  510. }
  511. void CMainFrame::OnUpdateReflashDsp(CCmdUI* pCmdUI) 
  512. {
  513.     pCmdUI->Enable(!IsReflashMsg);
  514. }
  515. void CMainFrame::OnClearDsp() 
  516. {
  517. CPeugeotView* pView = (CPeugeotView*)GetActiveView();     //视图指针;
  518. pView->ClearMsg();
  519. }
  520. void CMainFrame::SetCmmPort()
  521. {
  522.     CSettingCmmDlg CmmDlg;
  523. if (CmmDlg.DoModal()==IDOK)   // TODO: 保存通讯对话框设置的参数
  524. {
  525.   CPeugeotDoc* pDoc;
  526.   pDoc = (CPeugeotDoc*)GetActiveDocument();  
  527.   ASSERT_VALID(pDoc);
  528.     
  529.       if (CmmDlg.m_CmmType == 0)
  530.    {  // 串口参数 dcb
  531.    pDoc->m_CmmPortType = pDoc->CommPort;
  532.            pDoc->m_ComObj.m_szPortName = CmmDlg.m_sPortName ;
  533.    pDoc->m_ComObj.m_nParity    = CmmDlg.m_Parity ;
  534.        pDoc->m_ComObj.m_nDataBits  = CmmDlg.m_ByteSize+4 ;
  535.            pDoc->m_ComObj.m_nStopBits  = CmmDlg.m_StopBits ;
  536.    switch (CmmDlg.m_BaudRate) 
  537.    {
  538.    case 0:
  539.    pDoc->m_ComObj.m_nBaudRate =  CBR_300;
  540.    break;
  541.    case 1:
  542.                pDoc->m_ComObj.m_nBaudRate =  CBR_600;
  543.    break;
  544.    case 2:
  545.    pDoc->m_ComObj.m_nBaudRate =  CBR_1200;
  546.    break;
  547.    case 3:
  548.                pDoc->m_ComObj.m_nBaudRate =  CBR_2400;
  549.    break;
  550.            case 4:
  551.    pDoc->m_ComObj.m_nBaudRate =  CBR_4800;
  552.    break;
  553.    case 5:
  554.                pDoc->m_ComObj.m_nBaudRate =  CBR_9600;
  555.    break;
  556.    case 6:
  557.    pDoc->m_ComObj.m_nBaudRate =  CBR_14400;
  558.    break;
  559.    case 7:
  560.                pDoc->m_ComObj.m_nBaudRate =  CBR_19200;
  561.    break;
  562.    case 8:
  563.    pDoc->m_ComObj.m_nBaudRate =  CBR_38400;
  564.    break;
  565.    case 9:
  566.                pDoc->m_ComObj.m_nBaudRate =  CBR_56000;
  567.    break;
  568.    case 10:
  569.    pDoc->m_ComObj.m_nBaudRate =  CBR_57600;
  570.    break;
  571.    case 11:
  572.                pDoc->m_ComObj.m_nBaudRate =  CBR_115200;
  573.    break;
  574.    default:
  575.    pDoc->m_ComObj.m_nBaudRate =  CBR_9600;
  576.    break;
  577.    }
  578.    }
  579.    else
  580.        {  // 网口参数
  581.    pDoc->m_CmmPortType = pDoc->NetPort;
  582.    switch (CmmDlg.m_TCPIPPrtType)
  583.    {
  584.    case 0:
  585.                pDoc->m_NetParam.TCPPrtType = pDoc->m_NetParam.TCPServer;
  586.    break;
  587.    case 1:
  588.    pDoc->m_NetParam.TCPPrtType = pDoc->m_NetParam.TCPClient;
  589.    break;
  590.    case 2:
  591.    pDoc->m_NetParam.TCPPrtType = pDoc->m_NetParam.UDP;
  592.    break;
  593.    default:
  594.                pDoc->m_NetParam.TCPPrtType = pDoc->m_NetParam.TCPServer;
  595.    break;
  596.    }
  597.            pDoc->m_NetParam.RemoteIPPort = CmmDlg.m_RemoteIPPort;
  598.            pDoc->m_NetParam.LocalIPPort  = CmmDlg.m_LocalIPPort;
  599.            pDoc->m_NetParam.RemoteIPAddr = CmmDlg.m_sRemoteIPAddr;
  600.            pDoc->m_NetParam.LocalIPAddr  = CmmDlg.m_sLocalIPAddr;
  601.    }
  602. }
  603. }
  604. void CMainFrame::OnSize(UINT nType, int cx, int cy) 
  605. {
  606. CFrameWnd::OnSize(nType, cx, cy);
  607. if (!IsFrameCreat)
  608. return;
  609. else
  610. {
  611. CYXData* pYXDlg;
  612. CYCData* pYCDlg;
  613. CYMData* pYMDlg;
  614. // CYKData* pYKDlg;
  615. //获取各页的指针
  616. pYXDlg = (CYXData*)m_TabCtrl.GetPagePoint(0);
  617. pYCDlg = (CYCData*)m_TabCtrl.GetPagePoint(1);
  618. pYMDlg = (CYMData*)m_TabCtrl.GetPagePoint(2);
  619. // pYKDlg = (CYKData*)m_TabCtrl.GetPagePoint(3);
  620. //各页绘制表格
  621. pYXDlg->ReDrawCtr();
  622. pYCDlg->ReDrawCtr();
  623. pYMDlg->ReDrawCtr();
  624. }
  625. }