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

Internet/IE编程

开发平台:

Visual C++

  1. // YCData.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "Peugeot.h"
  5. #include "YCData.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. // CYCData dialog
  15. IMPLEMENT_DYNCREATE(CYCData, CDialog)
  16. CYCData::CYCData(CWnd* pParent /*=NULL*/)
  17. : CDialog(CYCData::IDD, pParent)
  18. {
  19. //{{AFX_DATA_INIT(CYCData)
  20. // NOTE: the ClassWizard will add member initialization here
  21. //}}AFX_DATA_INIT
  22. m_pYCGridCtrl = NULL;
  23. }
  24. void CYCData::DoDataExchange(CDataExchange* pDX)
  25. {
  26. CDialog::DoDataExchange(pDX);
  27. //{{AFX_DATA_MAP(CYCData)
  28. // NOTE: the ClassWizard will add DDX and DDV calls here
  29. //}}AFX_DATA_MAP
  30. }
  31. BEGIN_MESSAGE_MAP(CYCData, CDialog)
  32. //{{AFX_MSG_MAP(CYCData)
  33. ON_WM_DESTROY()
  34. //}}AFX_MSG_MAP
  35. ON_MESSAGE(WM_GRIDEDITCELL,OnNotifyGrid)
  36. ON_MESSAGE(WM_GRIDDBLCLICK,OnNotifyDblClkGrid)
  37. END_MESSAGE_MAP()
  38. /////////////////////////////////////////////////////////////////////////////
  39. // CYCData message handlers
  40. BOOL CYCData::OnInitDialog() 
  41. {
  42. CDialog::OnInitDialog();
  43. // TODO: Add extra initialization here
  44. if (m_pYCGridCtrl == NULL)
  45. {
  46. //创建m_pDoc->m_pYXGridCtrl对象
  47.         m_pYCGridCtrl = new CGridCtrl;
  48. // m_pYXGridCtrl->m_hGridOwner=m_hGridOwner;
  49. if (!m_pYCGridCtrl) 
  50. {
  51.     AfxMessageBox("创建遥测表格失败");
  52. return false;
  53. }
  54. // 创建m_pDoc->m_pYXGridCtrl对象窗体
  55.     CRect rect;
  56.         rect.left   = 0;
  57. rect.top    = 0;
  58. rect.bottom = 0;
  59. rect.right  = 273;
  60. m_pYCGridCtrl->Create(rect, this, 100);
  61. m_pYCGridCtrl->SetEditable(TRUE);
  62. m_pYCGridCtrl->EnableDragAndDrop(TRUE);
  63. // TODO: Add extra initialization here
  64. }
  65. return TRUE;  // return TRUE unless you set the focus to a control
  66.               // EXCEPTION: OCX Property Pages should return FALSE
  67. }
  68. //绘制遥测电子表格
  69. void CYCData::DrawYCGrid()
  70. {
  71.      CMainFrame* pMainFrame;
  72.      pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd; //框架窗口指针
  73.  CPeugeotDoc* pDoc;
  74.  pDoc = (CPeugeotDoc*) pMainFrame->GetActiveDocument(); //文档指针
  75.      ReDrawCtr();
  76.      try 
  77.  {
  78.    m_pYCGridCtrl->SetRowCount(pDoc->m_YCNum+1);
  79.    m_pYCGridCtrl->SetColumnCount(3);
  80.    m_pYCGridCtrl->SetFixedRowCount(1);
  81.    m_pYCGridCtrl->SetFixedColumnCount(1);
  82.  }
  83.      catch (CMemoryException* e)
  84.  {
  85. e->ReportError();
  86. e->Delete();
  87. AfxMessageBox("遥测表格初始化失败");
  88.  }
  89.      GV_ITEM Item;
  90.      Item.mask = GVIF_TEXT|GVIF_FORMAT;
  91.      Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS; 
  92.  Item.row    = 0;
  93.  Item.col    = 0;
  94.  Item.szText = "点地址 D";
  95.      m_pYCGridCtrl->SetItem(&Item);
  96.      Item.col    = 1;
  97.  Item.szText = "点名称";
  98.      m_pYCGridCtrl->SetItem(&Item);
  99.  Item.col    = 2;
  100.  Item.szText = "码值 H";
  101.      m_pYCGridCtrl->SetItem(&Item);
  102.    
  103.  for(int i=1;i<pDoc->m_YCNum+1;i++)
  104.  {
  105.  Item.row = i;
  106.      Item.col = 0;   //点地址
  107.  Item.szText.Format("%d",(pDoc->m_YCAddr+i-1));   
  108.      m_pYCGridCtrl->SetItem(&Item);
  109.      Item.col = 1;   //点名称  
  110.      Item.szText.Format("遥测%d",i);
  111.      m_pYCGridCtrl->SetItem(&Item);
  112.      Item.col = 2;   //点码值
  113.      Item.szText = "0000";
  114.      m_pYCGridCtrl->SetItem(&Item);
  115.  }
  116. }
  117. void CYCData::UpdateYCGrid()
  118. {
  119.      CMainFrame* pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;           //框架窗口指针;
  120.      CPeugeotDoc* pDoc      = (CPeugeotDoc*) pMainFrame->GetActiveDocument(); //文档指针
  121.      ASSERT_VALID(pDoc);
  122.  CString s1; 
  123.  BYTE hib, lob;       //临时变量
  124.  for (int i=0; i<pDoc->m_YCNum; i++)
  125.  {
  126.        hib = HIBYTE((WORD) pDoc->m_pYCData[i]);
  127.    lob = LOBYTE((WORD) pDoc->m_pYCData[i]);
  128.    s1 = ByteToString(hib) + ByteToString(lob);
  129.    m_pYCGridCtrl->SetItemText(i+1,2,s1);
  130.    m_pYCGridCtrl->Invalidate(TRUE);
  131.  }
  132. }
  133. void CYCData::OnDestroy() 
  134. {
  135.   if (m_pYCGridCtrl != NULL)
  136. delete m_pYCGridCtrl;
  137. CDialog::OnDestroy();
  138. }
  139. LRESULT CYCData::OnNotifyGrid(WPARAM wParam,LPARAM lParam)
  140. {
  141.    CMainFrame* pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;           //框架窗口指针;
  142.    CPeugeotDoc* pDoc      = (CPeugeotDoc*) pMainFrame->GetActiveDocument(); //文档指针
  143.    ASSERT_VALID(pDoc);
  144. CString strData;
  145. int strLen;
  146. char c[4];    
  147.     strData = m_pYCGridCtrl->GetItemText(wParam,2);
  148. strLen  = strData.GetLength();
  149. for (int i=0; i<4; i++)
  150. {
  151. if (i < strLen) 
  152. {
  153.    c[i] = strData[strLen-1-i];  //从字符右起取值
  154.    ChartToInt(c[i]);            //转换成 0-F 整数
  155. }  
  156. else
  157.    c[i] = 0x00;                //字符不足的按0值补
  158. }
  159.      
  160.    BYTE hib, lob;       //临时变量
  161.    hib = (c[3]<<4) | c[2];
  162.    lob = (c[1]<<4) | c[0];
  163.    pDoc->m_pYCData[wParam - 1] = (hib <<8) | lob;
  164.    strData = ByteToString(hib) + ByteToString(lob);
  165.    m_pYCGridCtrl->SetItemText(wParam,2, strData);
  166.    m_pYCGridCtrl->Invalidate(TRUE);
  167. //  if (pDoc->m_PrtType == pDoc->IEC101_S)
  168. //       pDoc->m_PrtIEC101.SlaveSend_ChangeYC(wParam-1,1);  //发送变化遥测报文
  169. return 0L;
  170. }
  171. LRESULT CYCData::OnNotifyDblClkGrid(WPARAM wParam,LPARAM lParam)
  172. {
  173.   return 0L;
  174. }
  175. void CYCData::ReDrawCtr()
  176. {
  177. CMainFrame* pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;           //框架窗口指针;
  178. CPeugeotDoc* pDoc      = (CPeugeotDoc*) pMainFrame->GetActiveDocument(); //文档指针
  179.     ASSERT_VALID(pDoc);
  180. CRect BarRect,GridRect;
  181. pMainFrame->m_wndMyBar1.GetClientRect(&BarRect);
  182. int iGridHeight;
  183. iGridHeight = BarRect.bottom-30; 
  184. m_pYCGridCtrl->MoveWindow(0,0,271 ,iGridHeight); 
  185. }