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

Internet/IE编程

开发平台:

Visual C++

  1. // YXData.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "Peugeot.h"
  5. #include "YXData.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. // CYXData dialog
  15. IMPLEMENT_DYNCREATE(CYXData, CDialog)
  16. CYXData::CYXData(CWnd* pParent /*=NULL*/)
  17. : CDialog(CYXData::IDD, pParent)
  18. {
  19. //{{AFX_DATA_INIT(CYXData)
  20. m_YXType = -1;
  21. m_TimeType = -1;
  22. m_CheckBL = FALSE;
  23. m_CheckIV = FALSE;
  24. m_CheckNT = FALSE;
  25. m_CheckSB = FALSE;
  26. //}}AFX_DATA_INIT
  27. m_pYXGridCtrl = NULL;
  28. }
  29. void CYXData::DoDataExchange(CDataExchange* pDX)
  30. {
  31. CDialog::DoDataExchange(pDX);
  32. //{{AFX_DATA_MAP(CYXData)
  33. DDX_Radio(pDX, IDC_YXTYPE, m_YXType);
  34. DDX_Radio(pDX, IDC_TIMETYPE, m_TimeType);
  35. DDX_Check(pDX, IDC_CHECK_BL, m_CheckBL);
  36. DDX_Check(pDX, IDC_CHECK_IV, m_CheckIV);
  37. DDX_Check(pDX, IDC_CHECK_NT, m_CheckNT);
  38. DDX_Check(pDX, IDC_CHECK_SB, m_CheckSB);
  39. //}}AFX_DATA_MAP
  40. }
  41. BEGIN_MESSAGE_MAP(CYXData, CDialog)
  42. //{{AFX_MSG_MAP(CYXData)
  43. ON_WM_DESTROY()
  44. ON_BN_CLICKED(IDC_YXTYPE, OnYXType_A)
  45. ON_BN_CLICKED(IDC_YXTYPE_B, OnYXType_B)
  46. ON_BN_CLICKED(IDC_TIMETYPE, OnTimetype32)
  47. ON_BN_CLICKED(IDC_TIMETYPE_56, OnTimetype56)
  48. ON_BN_CLICKED(IDC_CHECK_BL, OnCheckBL)
  49. ON_BN_CLICKED(IDC_CHECK_IV, OnCheckIV)
  50. ON_BN_CLICKED(IDC_CHECK_NT, OnCheckNT)
  51. ON_BN_CLICKED(IDC_CHECK_SB, OnCheckSB)
  52. //}}AFX_MSG_MAP
  53. ON_MESSAGE(WM_GRIDEDITCELL,OnNotifyGrid)
  54.     ON_MESSAGE(WM_GRIDDBLCLICK,OnNotifyDblClkGrid)
  55. END_MESSAGE_MAP()
  56. /////////////////////////////////////////////////////////////////////////////
  57. // CYXData message handlers
  58. BOOL CYXData::OnInitDialog() 
  59. {
  60. CDialog::OnInitDialog();
  61. if (m_pYXGridCtrl == NULL)
  62. {
  63. //创建m_pDoc->m_pYXGridCtrl对象
  64.         m_pYXGridCtrl = new CGridCtrl;
  65. m_pYXGridCtrl->m_bIsYXGrid = true;
  66. // m_pYXGridCtrl->m_hGridOwner=m_hGridOwner;
  67. if (!m_pYXGridCtrl) 
  68. {
  69.     AfxMessageBox("创建遥信表格失败");
  70. return false;
  71. }
  72.         CRect rect;
  73.         rect.left   = 0;
  74. rect.top    = 0;
  75. rect.bottom = 0;
  76. rect.right  = 273;
  77. m_pYXGridCtrl->Create(rect, this, 100);
  78.         
  79. m_pYXGridCtrl->SetEditable(TRUE);
  80. m_pYXGridCtrl->EnableDragAndDrop(TRUE);
  81. }
  82. //m_pYXGridCtrl->ShowWindow(SW_HIDE);
  83. return TRUE;  
  84. }
  85. //绘制遥信电子表格
  86. void CYXData::DrawYXGrid()
  87. {
  88.      CMainFrame* pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd; //框架窗口指针;
  89.      CPeugeotDoc* pDoc      = (CPeugeotDoc*) pMainFrame->GetActiveDocument(); //文档指针
  90.      ASSERT_VALID(pDoc);
  91.  ReDrawCtr();
  92.      try 
  93.  {
  94.    m_pYXGridCtrl->SetRowCount(pDoc->m_YXNum+1);
  95.    m_pYXGridCtrl->SetColumnCount(3);
  96.    m_pYXGridCtrl->SetFixedRowCount(1);
  97.    m_pYXGridCtrl->SetFixedColumnCount(1);
  98.  }
  99.      catch (CMemoryException* e)
  100.  {
  101. e->ReportError();
  102. e->Delete();
  103. AfxMessageBox("遥信表格初始化失败");
  104.  }
  105.  GV_ITEM Item;
  106.      Item.mask = GVIF_TEXT|GVIF_FORMAT;
  107.      Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS; 
  108.  Item.row    = 0;
  109.  Item.col    = 0;
  110.  Item.szText = "点地址 D";
  111.      m_pYXGridCtrl->SetItem(&Item);
  112.      Item.col    = 1;
  113.  Item.szText = "点名称";
  114.      m_pYXGridCtrl->SetItem(&Item);
  115.  Item.col    = 2;
  116.  Item.szText = "码值 H";
  117.      m_pYXGridCtrl->SetItem(&Item);
  118.    
  119.  for(int i=1;i<pDoc->m_YXNum+1;i++)
  120.  {
  121.  Item.row = i;
  122.      Item.col = 0;   //点地址
  123.  if ( (pDoc->m_PrtType == pDoc->IEC101_M) || (pDoc->m_PrtType == pDoc->IEC101_S) )
  124.         Item.szText.Format("%d",(pDoc->m_YXAddr+i-1));   
  125.      else           //MODBUS遥信点地址方式
  126.      {             
  127.     int j,k;
  128.     j = ((i-1) / 16) + pDoc->m_YXAddr;   //字节地址
  129.     k =  (i-1) % 16;                      //位地址
  130.         Item.szText.Format("%d_%d",j,k);
  131.  }
  132.      m_pYXGridCtrl->SetItem(&Item);
  133.      Item.col = 1;   //点名称  
  134.      Item.szText.Format("遥信%d",i);
  135.      m_pYXGridCtrl->SetItem(&Item);
  136.      Item.col = 2;   //点码值
  137.      Item.szText = "00";
  138.      m_pYXGridCtrl->SetItem(&Item);
  139.  }
  140. //Item.nFormat = DT_RIGHT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;
  141. //Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;  
  142. }
  143. void CYXData::UpdateYXGrid()
  144. {
  145.      CMainFrame* pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;           //框架窗口指针;
  146.      CPeugeotDoc* pDoc      = (CPeugeotDoc*) pMainFrame->GetActiveDocument(); //文档指针
  147.      ASSERT_VALID(pDoc);
  148.  CString s1;
  149.  for (int i=0; i<pDoc->m_YXNum; i++)
  150.  {
  151.        
  152.    s1 = ByteToString(pDoc->m_pYXData[i]);
  153.    m_pYXGridCtrl->SetItemText(i+1,2,s1);
  154.    m_pYXGridCtrl->Invalidate(TRUE);
  155.  }
  156. }
  157. void CYXData::OnDestroy() 
  158. {
  159. if (m_pYXGridCtrl != NULL)
  160.    delete m_pYXGridCtrl;
  161. CDialog::OnDestroy();
  162. }
  163. LRESULT CYXData::OnNotifyGrid(WPARAM wParam,LPARAM lParam)
  164. {
  165.    CMainFrame* pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;           //框架窗口指针;
  166.    CPeugeotDoc* pDoc      = (CPeugeotDoc*) pMainFrame->GetActiveDocument(); //文档指针
  167.    ASSERT_VALID(pDoc);
  168. CString strData;
  169. int strLen;
  170. char c[2];    
  171.     strData = m_pYXGridCtrl->GetItemText(wParam,2);
  172. strLen  = strData.GetLength();
  173. for (int i=0; i<2; i++)
  174. { if (i < strLen) 
  175. {
  176.    c[i] = strData[strLen-1-i];  //从字符右起取值
  177.    ChartToInt(c[i]);            //转换成 0-F 整数
  178. }  
  179. else
  180.    c[i] = 0x00;                //字符不足的按0值补
  181. }
  182.      
  183. pDoc->m_pYXData[wParam - 1] = c[1]*16 + c[0];
  184.    if (pDoc->m_PrtType == pDoc->Modbus_S)
  185.    { 
  186.    if (pDoc->m_pYXData[wParam - 1] > 0)
  187.            pDoc->m_pYXData[wParam - 1] = 1;
  188.    }
  189.    strData = ByteToString(pDoc->m_pYXData[wParam - 1]);
  190.    m_pYXGridCtrl->SetItemText(wParam,2,strData);
  191.    m_pYXGridCtrl->Invalidate(TRUE);
  192.    if (pDoc->m_PrtType == pDoc->IEC101_S)
  193.        pDoc->m_PrtIEC101.SlaveSend_ChangeYX(wParam-1,1);  //发送遥信变位报文
  194. return 0L;
  195. }
  196. LRESULT CYXData::OnNotifyDblClkGrid(WPARAM wParam,LPARAM lParam)
  197. {
  198.    CMainFrame* pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;           //框架窗口指针;
  199.    CPeugeotDoc* pDoc      = (CPeugeotDoc*) pMainFrame->GetActiveDocument(); //文档指针
  200.    ASSERT_VALID(pDoc);
  201.    SwitchYX(wParam-1);
  202.    CString s1;
  203.    s1 = ByteToString(pDoc->m_pYXData[wParam-1]);
  204.    m_pYXGridCtrl->SetItemText(wParam,2,s1);
  205.    m_pYXGridCtrl->Invalidate(TRUE);
  206.  
  207.    if (pDoc->m_PrtType == pDoc->IEC101_S)
  208.        pDoc->m_PrtIEC101.SlaveSend_ChangeYX(wParam-1,1);  //发送遥信变位报文
  209. return 0L;
  210. }
  211. void CYXData::UpdateYXChara(BOOL bSave)
  212. {
  213.    CMainFrame* pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;           //框架窗口指针;
  214.    CPeugeotDoc* pDoc      = (CPeugeotDoc*) pMainFrame->GetActiveDocument(); //文档指针
  215.    ASSERT_VALID(pDoc);
  216.    if (bSave)
  217.    {
  218.        UpdateData(TRUE);
  219.    if (m_YXType == 0)
  220.    pDoc->m_PrtIEC101.m_YXChara = pDoc->m_PrtIEC101.m_YXChara & 0xfe; //单点
  221.    else
  222.        pDoc->m_PrtIEC101.m_YXChara = pDoc->m_PrtIEC101.m_YXChara | 0x01; //双点
  223.        if (m_TimeType == 0)
  224.    pDoc->m_PrtIEC101.m_YXChara = pDoc->m_PrtIEC101.m_YXChara & 0xfd; //32TIME
  225.    else
  226.        pDoc->m_PrtIEC101.m_YXChara = pDoc->m_PrtIEC101.m_YXChara | 0x02; //56TIME
  227.    }
  228.    else
  229.    {
  230.  m_YXType   = pDoc->m_PrtIEC101.m_YXChara & 0x01;
  231.  m_TimeType = (pDoc->m_PrtIEC101.m_YXChara & 0x02)>>1;
  232.      UpdateData(FALSE);
  233.    }
  234. }
  235. void CYXData::OnYXType_A()    //选择单点方式
  236. {
  237.    CMainFrame* pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd; //框架窗口指针;
  238.    CPeugeotDoc* pDoc      = (CPeugeotDoc*) pMainFrame->GetActiveDocument(); //文档指针
  239.    ASSERT_VALID(pDoc);
  240.    UpdateYXChara(TRUE);
  241.    if (pDoc->m_YXAddr != NULL)
  242.    {
  243.   for (int i=0; i<pDoc->m_YXNum; i++)
  244.   {
  245.   if ((pDoc->m_pYXData[i] & 0x03) == 2)              //合位,双点
  246.                pDoc->m_pYXData[i] = pDoc->m_pYXData[i] & 0xfc | 0x01;   //合位,单点  
  247.   else
  248.                pDoc->m_pYXData[i] = pDoc->m_pYXData[i] & 0xfc; //分位,单点      
  249.   }
  250.       UpdateYXGrid();
  251.    }
  252. }
  253. void CYXData::OnYXType_B()    //选择双点点方式
  254. {
  255.    CMainFrame* pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd; //框架窗口指针;
  256.    CPeugeotDoc* pDoc      = (CPeugeotDoc*) pMainFrame->GetActiveDocument(); //文档指针
  257.    ASSERT_VALID(pDoc);
  258.    UpdateYXChara(TRUE);
  259.    if (pDoc->m_YXAddr != NULL)
  260.    {
  261.   for (int i=0; i<pDoc->m_YXNum; i++)
  262.   {
  263.   if ((pDoc->m_pYXData[i] & 0x01) == 1)              //合位,单点
  264.                pDoc->m_pYXData[i] = pDoc->m_pYXData[i] & 0xfc | 0x02;   //合位,双点  
  265.   else
  266.                pDoc->m_pYXData[i] = pDoc->m_pYXData[i] & 0xfc | 0x01;   //分位,双点      
  267.   }
  268.       UpdateYXGrid();
  269.    }
  270. }
  271. void CYXData::OnTimetype32() 
  272. {
  273.   UpdateYXChara(TRUE);
  274. }
  275. void CYXData::OnTimetype56() 
  276. {
  277.   UpdateYXChara(TRUE);
  278. }
  279. void CYXData::OnCheckBL() 
  280. {
  281.   UpdateData(TRUE);
  282.   SetCharaDes(m_CheckBL,0x10);   //第5位
  283. }
  284. void CYXData::OnCheckSB() 
  285. {
  286.   UpdateData(TRUE);
  287.   SetCharaDes(m_CheckSB,0x20);   //第6位
  288. }
  289. void CYXData::OnCheckNT() 
  290. {
  291.   UpdateData(TRUE);
  292.   SetCharaDes(m_CheckNT,0x40);   //第7位
  293. }
  294. void CYXData::OnCheckIV() 
  295. {
  296.   UpdateData(TRUE);
  297.   SetCharaDes(m_CheckIV,0x80);   //第8位
  298. }
  299. //设置品质描述词
  300. void CYXData::SetCharaDes(BOOL bCheck, BYTE bChara)
  301. {
  302.    CMainFrame* pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd; //框架窗口指针;
  303.    CPeugeotDoc* pDoc      = (CPeugeotDoc*) pMainFrame->GetActiveDocument(); //文档指针
  304.    ASSERT_VALID(pDoc);
  305.    if (pDoc->m_YXAddr != NULL)
  306.    {
  307.   for (int i=0; i<pDoc->m_YXNum; i++)
  308.   {
  309.   if (bCheck)              //选中
  310.                pDoc->m_pYXData[i] = pDoc->m_pYXData[i] | bChara;     //该位置1
  311.   else
  312.                pDoc->m_pYXData[i] = pDoc->m_pYXData[i] & (~bChara);  //该位置0   
  313.   }
  314.       UpdateYXGrid();  //更新电子表格
  315.    }
  316. }
  317. //切换遥信状态
  318. void CYXData::SwitchYX(UINT nIndex)
  319. {
  320.    CMainFrame* pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;           //框架窗口指针;
  321.    CPeugeotDoc* pDoc      = (CPeugeotDoc*) pMainFrame->GetActiveDocument(); //文档指针
  322.    ASSERT_VALID(pDoc);
  323.    if (pDoc->m_PrtType == pDoc->Modbus_S)
  324.    { 
  325.    if (pDoc->m_pYXData[nIndex] == 0)
  326.            pDoc->m_pYXData[nIndex] = 1;
  327.    else
  328.            pDoc->m_pYXData[nIndex] = 0;
  329.    }
  330.    else if (pDoc->m_PrtType == pDoc->IEC101_S)
  331.    {
  332.        if ((pDoc->m_PrtIEC101.m_YXChara & 0x01) == 0x00)    //单点类型
  333.    {
  334.            if ((pDoc->m_pYXData[nIndex] & 0x01) == 0x00)  //分位
  335.                 pDoc->m_pYXData[nIndex] = pDoc->m_pYXData[nIndex] | 0x01;
  336.        else
  337.                 pDoc->m_pYXData[nIndex] = pDoc->m_pYXData[nIndex] & 0xfe;
  338.    }
  339.    else         //双点类型
  340.    {
  341.            if ((pDoc->m_pYXData[nIndex] & 0x03) == 0x01)  //分位 01
  342.                 pDoc->m_pYXData[nIndex] = (pDoc->m_pYXData[nIndex] & 0xfc) | 0x02;
  343.        else     //合位及不确定状态 10 、00 或 11
  344.                 pDoc->m_pYXData[nIndex] = (pDoc->m_pYXData[nIndex] & 0xfc) | 0x01;
  345.    }
  346.    }
  347. }
  348. //重画对话框控件,根据窗口大小变化调整位置,根据规约显示/隐藏部分控件
  349. void CYXData::ReDrawCtr()
  350. {
  351. CMainFrame* pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;           //框架窗口指针;
  352. CPeugeotDoc* pDoc      = (CPeugeotDoc*) pMainFrame->GetActiveDocument(); //文档指针
  353.     ASSERT_VALID(pDoc);
  354. CRect BarRect,GridRect;
  355. pMainFrame->m_wndMyBar1.GetClientRect(&BarRect);
  356. int iGridHeight;
  357. if (pDoc->m_PrtType != pDoc->IEC101_S)
  358. {
  359.         iGridHeight = BarRect.bottom-30; 
  360.         m_pYXGridCtrl->MoveWindow(0,0,271 ,iGridHeight);
  361.         GetDlgItem(IDC_STATIC1)->ShowWindow(SW_HIDE);
  362.         GetDlgItem(IDC_STATIC2)->ShowWindow(SW_HIDE);
  363. GetDlgItem(IDC_STATIC3)->ShowWindow(SW_HIDE);
  364. GetDlgItem(IDC_YXTYPE)->ShowWindow(SW_HIDE);
  365. GetDlgItem(IDC_YXTYPE_B)->ShowWindow(SW_HIDE);
  366. GetDlgItem(IDC_TIMETYPE)->ShowWindow(SW_HIDE);
  367. GetDlgItem(IDC_TIMETYPE_56)->ShowWindow(SW_HIDE);
  368. GetDlgItem(IDC_CHECK_BL)->ShowWindow(SW_HIDE);
  369. GetDlgItem(IDC_CHECK_NT)->ShowWindow(SW_HIDE);
  370. GetDlgItem(IDC_CHECK_SB)->ShowWindow(SW_HIDE);
  371. GetDlgItem(IDC_CHECK_IV)->ShowWindow(SW_HIDE);
  372. return;
  373. }
  374. iGridHeight = BarRect.bottom-120;   //120像素高度用于其他控件空间
  375.     m_pYXGridCtrl->MoveWindow(0,0,271 ,iGridHeight);
  376.     m_pYXGridCtrl->GetClientRect(&GridRect);
  377.     int CtrPos = GridRect.bottom + 16;
  378.     CRect c2;
  379. GetDlgItem(IDC_STATIC1)->GetWindowRect(&c2);
  380.     ScreenToClient(c2);
  381. int DatumLine = c2.top;
  382. GetDlgItem(IDC_STATIC1)->MoveWindow(c2.left,CtrPos,c2.Width(),c2.Height());
  383.     GetDlgItem(IDC_STATIC1)->ShowWindow(SW_SHOW);
  384.      
  385. GetDlgItem(IDC_YXTYPE)->GetWindowRect(&c2);
  386.     ScreenToClient(c2);
  387. GetDlgItem(IDC_YXTYPE)->MoveWindow(c2.left,(c2.top-DatumLine+CtrPos),c2.Width(),c2.Height());
  388.     GetDlgItem(IDC_YXTYPE)->ShowWindow(SW_SHOW);
  389.     GetDlgItem(IDC_YXTYPE_B)->GetWindowRect(&c2);
  390.     ScreenToClient(c2);
  391. GetDlgItem(IDC_YXTYPE_B)->MoveWindow(c2.left,(c2.top-DatumLine+CtrPos),c2.Width(),c2.Height());
  392.     GetDlgItem(IDC_YXTYPE_B)->ShowWindow(SW_SHOW);
  393.     
  394. GetDlgItem(IDC_TIMETYPE)->GetWindowRect(&c2);
  395.     ScreenToClient(c2);
  396. GetDlgItem(IDC_TIMETYPE)->MoveWindow(c2.left,(c2.top-DatumLine+CtrPos),c2.Width(),c2.Height());
  397.     GetDlgItem(IDC_TIMETYPE)->ShowWindow(SW_SHOW);
  398. GetDlgItem(IDC_TIMETYPE_56)->GetWindowRect(&c2);
  399.     ScreenToClient(c2);
  400. GetDlgItem(IDC_TIMETYPE_56)->MoveWindow(c2.left,(c2.top-DatumLine+CtrPos),c2.Width(),c2.Height());
  401.     GetDlgItem(IDC_TIMETYPE_56)->ShowWindow(SW_SHOW);
  402.     
  403. GetDlgItem(IDC_CHECK_BL)->GetWindowRect(&c2);
  404.     ScreenToClient(c2);
  405. GetDlgItem(IDC_CHECK_BL)->MoveWindow(c2.left,(c2.top-DatumLine+CtrPos),c2.Width(),c2.Height());
  406.     GetDlgItem(IDC_CHECK_BL)->ShowWindow(SW_SHOW);
  407. GetDlgItem(IDC_CHECK_NT)->GetWindowRect(&c2);
  408.     ScreenToClient(c2);
  409. GetDlgItem(IDC_CHECK_NT)->MoveWindow(c2.left,(c2.top-DatumLine+CtrPos),c2.Width(),c2.Height());
  410.     GetDlgItem(IDC_CHECK_NT)->ShowWindow(SW_SHOW);
  411. GetDlgItem(IDC_CHECK_SB)->GetWindowRect(&c2);
  412.     ScreenToClient(c2);
  413. GetDlgItem(IDC_CHECK_SB)->MoveWindow(c2.left,(c2.top-DatumLine+CtrPos),c2.Width(),c2.Height());
  414.     GetDlgItem(IDC_CHECK_SB)->ShowWindow(SW_SHOW);
  415. GetDlgItem(IDC_CHECK_IV)->GetWindowRect(&c2);
  416.     ScreenToClient(c2);
  417. GetDlgItem(IDC_CHECK_IV)->MoveWindow(c2.left,(c2.top-DatumLine+CtrPos),c2.Width(),c2.Height());
  418.     GetDlgItem(IDC_CHECK_IV)->ShowWindow(SW_SHOW);
  419.     GetDlgItem(IDC_STATIC2)->GetWindowRect(&c2);
  420.     ScreenToClient(c2);
  421. GetDlgItem(IDC_STATIC2)->MoveWindow(c2.left,(c2.top-DatumLine+CtrPos),c2.Width(),c2.Height());
  422.     GetDlgItem(IDC_STATIC2)->ShowWindow(SW_SHOW);
  423. GetDlgItem(IDC_STATIC3)->GetWindowRect(&c2);
  424.     ScreenToClient(c2);
  425. GetDlgItem(IDC_STATIC3)->MoveWindow(c2.left,(c2.top-DatumLine+CtrPos),c2.Width(),c2.Height());
  426.     GetDlgItem(IDC_STATIC3)->ShowWindow(SW_SHOW);
  427. }