AnalogMeterTestView.cpp
上传用户:haifei
上传日期:2022-07-20
资源大小:77k
文件大小:9k
源码类别:

网络编程

开发平台:

Visual C++

  1. // AnalogMeterTestView.cpp : implementation of the CAnalogMeterTestView class
  2. // Download by http://www.codefans.net
  3. #include "stdafx.h"
  4. #include <math.h>
  5. #include "AnalogMeterTest.h"
  6. #include "InputString.h"
  7. #include "AnalogMeterTestDoc.h"
  8. #include "AnalogMeterTestView.h"
  9. #include "ComputerName.h" // Name Dlg
  10. #include "Thread.h"
  11. #ifdef _DEBUG
  12. #define new DEBUG_NEW
  13. #undef THIS_FILE
  14. static char THIS_FILE[] = __FILE__;
  15. #endif
  16. /////////////////////////////////////////////////////////////////////////////
  17. // CAnalogMeterTestView
  18. IMPLEMENT_DYNCREATE(CAnalogMeterTestView, CView)
  19. BEGIN_MESSAGE_MAP(CAnalogMeterTestView, CView)
  20. //{{AFX_MSG_MAP(CAnalogMeterTestView)
  21. ON_COMMAND(ID_TIMER_STARTSTOP, OnTimerStartstop)
  22. ON_WM_TIMER()
  23. ON_UPDATE_COMMAND_UI(ID_TIMER_STARTSTOP, OnUpdateTimerStartstop)
  24. ON_COMMAND(ID_METER1, OnMeter1)
  25. ON_COMMAND(ID_METER2, OnMeter2)
  26. //}}AFX_MSG_MAP
  27. // Standard printing commands
  28. ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
  29. ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
  30. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
  31. END_MESSAGE_MAP()
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CAnalogMeterTestView construction/destruction
  34. CAnalogMeterTestView::CAnalogMeterTestView()
  35. {
  36. // TODO: add construction code here
  37. for(int i =0;i<4;i++)
  38. {
  39.      m_lastAngleDeg[i] = 0.0 ;
  40.     m_bChanged[i] = FALSE ;
  41. }
  42. m_bTimerRunning = FALSE ;
  43. m_meterLeft.SetRange (0, 100.0) ;
  44. m_meterLeft.SetRangeDecimals(1) ;
  45. m_meterLeft.SetValueDecimals(3) ;
  46. m_meterLeft.SetTitle("METER 1") ;
  47. m_meterRight.SetRange (0, 100.0) ;
  48. m_meterRight.SetRangeDecimals(1) ;
  49. m_meterRight.SetValueDecimals(3) ;
  50. m_meterRight.SetTitle("METER 2") ;
  51. }
  52. CAnalogMeterTestView::~CAnalogMeterTestView()
  53. {
  54. }
  55. BOOL CAnalogMeterTestView::PreCreateWindow(CREATESTRUCT& cs)
  56. {
  57. // TODO: Modify the Window class or styles here by modifying
  58. //  the CREATESTRUCT cs
  59. return CView::PreCreateWindow(cs);
  60. }
  61. /////////////////////////////////////////////////////////////////////////////
  62. // CAnalogMeterTestView drawing
  63. void CAnalogMeterTestView::OnDraw(CDC* pDC)
  64. {
  65. CAnalogMeterTestDoc* pDoc = GetDocument();
  66. ASSERT_VALID(pDoc);
  67. CRect rectClient ;
  68. GetClientRect (&rectClient);
  69. // make two side-by-side rectangles 
  70. m_rectLeftMeter.left = rectClient.left + rectClient.Width()/10 ;
  71. m_rectLeftMeter.right =m_rectLeftMeter.left +150; //rectClient.left + rectClient.Width()/2 - 50 ;
  72. m_rectLeftMeter.top = rectClient.top + rectClient.Height()/10 ;
  73. m_rectLeftMeter.bottom = rectClient.bottom - rectClient.Height()/10 ;
  74. m_rectRightMeter.left = rectClient.left + rectClient.Width()/2 + 5 ;
  75. m_rectRightMeter.top = m_rectLeftMeter.top ;
  76. m_rectRightMeter.right =m_rectRightMeter.left +150; //rectClient.right - rectClient.Width()/10 ;
  77. m_rectRightMeter.bottom = m_rectLeftMeter.bottom ;
  78. // force them to be square
  79. if (m_rectLeftMeter.Height() > m_rectLeftMeter.Width())
  80. {
  81. m_rectLeftMeter.bottom = m_rectLeftMeter.top + m_rectLeftMeter.Width() ;
  82. m_rectRightMeter.bottom = m_rectLeftMeter.bottom ;
  83. }
  84. else
  85. {
  86. m_rectLeftMeter.left = m_rectLeftMeter.right-m_rectLeftMeter.Height() ;
  87. m_rectRightMeter.right = m_rectRightMeter.left+m_rectLeftMeter.Height() ;
  88. }
  89. m_meterLeft.ShowMeter (pDC, m_rectLeftMeter) ;
  90. m_meterRight.ShowMeter (pDC, m_rectRightMeter) ;
  91. }
  92. /////////////////////////////////////////////////////////////////////////////
  93. // CAnalogMeterTestView printing
  94. BOOL CAnalogMeterTestView::OnPreparePrinting(CPrintInfo* pInfo)
  95. {
  96. // default preparation
  97. return DoPreparePrinting(pInfo);
  98. }
  99. void CAnalogMeterTestView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  100. {
  101. // TODO: add extra initialization before printing
  102. }
  103. void CAnalogMeterTestView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  104. {
  105. // TODO: add cleanup after printing
  106. }
  107. /////////////////////////////////////////////////////////////////////////////
  108. // CAnalogMeterTestView diagnostics
  109. #ifdef _DEBUG
  110. void CAnalogMeterTestView::AssertValid() const
  111. {
  112. CView::AssertValid();
  113. }
  114. void CAnalogMeterTestView::Dump(CDumpContext& dc) const
  115. {
  116. CView::Dump(dc);
  117. }
  118. CAnalogMeterTestDoc* CAnalogMeterTestView::GetDocument() // non-debug version is inline
  119. {
  120. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAnalogMeterTestDoc)));
  121. return (CAnalogMeterTestDoc*)m_pDocument;
  122. }
  123. #endif //_DEBUG
  124. /////////////////////////////////////////////////////////////////////////////
  125. // CAnalogMeterTestView message handlers
  126. /////////////////////////////////////////////////////////////////////////////
  127. void CAnalogMeterTestView::OnTimerStartstop() 
  128. {
  129. // TODO: Add your command handler code here
  130. if (m_bTimerRunning)
  131. KillTimer(1) ;
  132. else
  133. SetTimer(1, 500, NULL) ;
  134. m_bTimerRunning ^= TRUE ;
  135. }
  136. /////////////////////////////////////////////////////////////////////////////
  137. void CAnalogMeterTestView::OnTimer(UINT nIDEvent) 
  138. {
  139. // TODO: Add your message handler code here and/or call default
  140. double mRad, dValue ;
  141. CClientDC  dcClient(this) ;
  142. //
  143. // 监视表1
  144. //
  145. if(m_bChanged[0])
  146. {
  147.         m_bChanged[0] = FALSE;
  148.     m_meterLeft.UpdateNeedle (&dcClient, m_lastAngleDeg[0]) ;
  149. }
  150. //
  151. // 监视表2
  152. //
  153. if(m_bChanged[1])
  154. {
  155.         m_bChanged[1] = FALSE;
  156.     m_meterRight.UpdateNeedle (&dcClient, m_lastAngleDeg[1]) ;
  157. }
  158. // provided by ClassWizard
  159. CView::OnTimer(nIDEvent);
  160. }
  161. /////////////////////////////////////////////////////////////////////////////
  162. /////////////////////////////////////////////////////////////////////////////
  163. void CAnalogMeterTestView::OnUpdateTimerStartstop(CCmdUI* pCmdUI) 
  164. {
  165. // TODO: Add your command update UI handler code here
  166. if (m_bTimerRunning)
  167. pCmdUI->SetCheck(1) ;
  168. else
  169. pCmdUI->SetCheck(0) ;
  170. }
  171. void CAnalogMeterTestView::OnInitialUpdate() 
  172. {
  173. CView::OnInitialUpdate();
  174. }
  175. // choose computer connected to meter1
  176. void CAnalogMeterTestView::OnMeter1() 
  177. {
  178. CComputerName Dlg;
  179. DWORD  dwRet;
  180.     Dlg.m_Title = "METER 1"; 
  181.     
  182. if(Dlg.DoModal()==IDOK)
  183. {
  184.            
  185. Dlg.m_strName = Dlg.m_strName;
  186. Dlg.m_strName.MakeUpper( );
  187.         NETRESOURCE  NetResource;
  188.         NetResource.dwScope = RESOURCE_GLOBALNET;
  189. NetResource.dwType = RESOURCETYPE_ANY;
  190.         NetResource.dwDisplayType = RESOURCEDISPLAYTYPE_SERVER; 
  191.         NetResource.dwUsage  = RESOURCEUSAGE_CONTAINER; 
  192.         NetResource.lpLocalName =NULL;
  193. CString temp = "\\"+Dlg.m_strName;
  194.         NetResource.lpRemoteName = temp.GetBuffer(temp.GetLength());
  195.         NetResource.lpProvider = NULL;
  196.         LPCTSTR  lpPassword = Dlg.m_Password.GetBuffer(Dlg.m_Password.GetLength());
  197.         LPCTSTR  lpUsername = Dlg.m_Connector.GetBuffer(Dlg.m_Connector.GetLength());
  198.         dwRet = WNetAddConnection2(
  199.                             &NetResource,
  200. lpPassword,
  201. lpUsername,
  202. 0);
  203. if(dwRet == NO_ERROR)
  204. {
  205.        // set meter title
  206.            m_meterLeft.SetTitle(Dlg.m_strName);
  207.      Invalidate(FALSE);
  208.            m_strComputer1 = Dlg.m_strName;
  209.    // start performance data collection thread 1
  210.            AfxBeginThread((AFX_THREADPROC)Meter1_thread,(void *)this);
  211. }
  212. else
  213. {
  214. switch(dwRet)
  215. {
  216. case ERROR_LOGON_FAILURE:
  217. AfxMessageBox("unknown user name or bad password...");
  218. break;
  219. default:
  220.                 Dlg.m_strName = "未能成功连接到"+ Dlg.m_strName;
  221.     AfxMessageBox(Dlg.m_strName,IDOK);
  222.             }
  223. }
  224. }
  225. }
  226. // choose computer connected to meter2
  227. void CAnalogMeterTestView::OnMeter2() 
  228. {
  229. CComputerName Dlg;
  230. DWORD  dwRet;
  231.     Dlg.m_Title = "METER 2"; 
  232. if(Dlg.DoModal()==IDOK)
  233. {
  234. Dlg.m_strName = Dlg.m_strName;
  235. Dlg.m_strName.MakeUpper( );
  236.         NETRESOURCE  NetResource;
  237.         NetResource.dwScope = RESOURCE_GLOBALNET;
  238. NetResource.dwType = RESOURCETYPE_ANY;
  239.         NetResource.dwDisplayType = RESOURCEDISPLAYTYPE_SERVER; 
  240.         NetResource.dwUsage  = RESOURCEUSAGE_CONTAINER; 
  241.         NetResource.lpLocalName =NULL;
  242. CString temp = "\\"+Dlg.m_strName;
  243.         NetResource.lpRemoteName = temp.GetBuffer(temp.GetLength());
  244.         NetResource.lpProvider = NULL;
  245.         LPCTSTR  lpPassword = Dlg.m_Password.GetBuffer(Dlg.m_Password.GetLength());
  246.         LPCTSTR  lpUsername = Dlg.m_Connector.GetBuffer(Dlg.m_Connector.GetLength());
  247.         dwRet = WNetAddConnection2(
  248.                             &NetResource,
  249. lpPassword,
  250. lpUsername,
  251. 0);
  252. if(dwRet == NO_ERROR)
  253. {
  254.        // set meter title
  255.            m_meterRight.SetTitle(Dlg.m_strName);
  256.      Invalidate(FALSE);
  257.            m_strComputer2 = Dlg.m_strName;
  258.    // start performance data collection thread 2
  259.            AfxBeginThread((AFX_THREADPROC)Meter2_thread,(void *)this);
  260. }
  261. else
  262. {
  263. switch(dwRet)
  264. {
  265. case ERROR_LOGON_FAILURE:
  266. AfxMessageBox("unknown user name or bad password...");
  267. break;
  268. default:
  269.                 Dlg.m_strName = "未能成功连接到"+ Dlg.m_strName;
  270.     AfxMessageBox(Dlg.m_strName,IDOK);
  271.             }
  272. }
  273. }
  274. }