TaskingDoc.cpp
上传用户:z_mail1980
上传日期:2007-06-01
资源大小:647k
文件大小:4k
源码类别:

SNMP编程

开发平台:

Visual C++

  1. // TaskingDoc.cpp : implementation of the CTaskingDoc class
  2. //
  3. #include "stdafx.h"
  4. #include "Tasking.h"
  5. #include "Spinner.h"
  6. #include "TaskingDoc.h"
  7. #include "TaskingView.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CTaskingDoc
  15. IMPLEMENT_DYNCREATE(CTaskingDoc, CDocument)
  16. BEGIN_MESSAGE_MAP(CTaskingDoc, CDocument)
  17. //{{AFX_MSG_MAP(CTaskingDoc)
  18. // NOTE - the ClassWizard will add and remove mapping macros here.
  19. //    DO NOT EDIT what you see in these blocks of generated code!
  20. //}}AFX_MSG_MAP
  21. END_MESSAGE_MAP()
  22. /////////////////////////////////////////////////////////////////////////////
  23. // CTaskingDoc construction/destruction
  24. CTaskingDoc::CTaskingDoc()
  25. {
  26. // TODO: add one-time construction code here
  27. }
  28. CTaskingDoc::~CTaskingDoc()
  29. {
  30. }
  31. BOOL CTaskingDoc::OnNewDocument()
  32. {
  33. if (!CDocument::OnNewDocument())
  34. return FALSE;
  35. // TODO: add reinitialization code here
  36. // (SDI documents will reuse this document)
  37. InitSpinners();
  38. return TRUE;
  39. }
  40. /////////////////////////////////////////////////////////////////////////////
  41. // CTaskingDoc serialization
  42. void CTaskingDoc::Serialize(CArchive& ar)
  43. {
  44. if (ar.IsStoring())
  45. {
  46. // TODO: add storing code here
  47. }
  48. else
  49. {
  50. // TODO: add loading code here
  51. }
  52. }
  53. /////////////////////////////////////////////////////////////////////////////
  54. // CTaskingDoc diagnostics
  55. #ifdef _DEBUG
  56. void CTaskingDoc::AssertValid() const
  57. {
  58. CDocument::AssertValid();
  59. }
  60. void CTaskingDoc::Dump(CDumpContext& dc) const
  61. {
  62. CDocument::Dump(dc);
  63. }
  64. #endif //_DEBUG
  65. /////////////////////////////////////////////////////////////////////////////
  66. // CTaskingDoc commands
  67. void CTaskingDoc::CalcPoint(int nID, CSpinner *pSpin)
  68. {
  69. RECT lWndRect;
  70. CPoint pPos;
  71. int iLength;
  72. CTaskingView *pWnd;
  73. pWnd=(CTaskingView*)pSpin->GetViewWnd();
  74. pWnd->GetClientRect(&lWndRect);
  75. iLength=lWndRect.right/6;
  76. switch(nID)
  77. {
  78. case 0:
  79. pPos.x=(lWndRect.right/4)-iLength;
  80. pPos.y=(lWndRect.bottom/4)-iLength;
  81. break;
  82. case 1:
  83. pPos.x=((lWndRect.right/4)*3)-iLength;
  84. pPos.y=(lWndRect.bottom/4)-iLength;
  85. break;
  86. case 2:
  87. pPos.x=(lWndRect.right/4)-iLength;
  88. pPos.y=((lWndRect.bottom/4)*3)-(iLength*1.25);
  89. break;
  90. case 3:
  91. pPos.x=((lWndRect.right/4)*3)-iLength;
  92. pPos.y=((lWndRect.bottom/4)*3)-(iLength*1.25);
  93. break;
  94. }
  95. pSpin->SetLength(iLength);
  96. pSpin->SetPoint(pPos);
  97. }
  98. void CTaskingDoc::InitSpinners()
  99. {
  100. int i;
  101. POSITION pos=GetFirstViewPosition();
  102. if(pos!=NULL){
  103. CView *pView=GetNextView(pos);
  104. for(i=0;i<4;i++){
  105. m_cSpin[i].SetViewWnd(pView);
  106. m_cSpin[i].SetContinue(NULL);
  107. switch(i)
  108. {
  109. case 1:
  110. m_cSpin[i].SetContinue(&((CTaskingView*)pView)->m_bThread1);
  111. break;
  112. case 2:
  113. m_cSpin[i].SetContinue(&((CTaskingView*)pView)->m_bThread2);
  114. break;
  115. }
  116. CalcPoint(i,&m_cSpin[i]);
  117. }
  118. }
  119. }
  120. void CTaskingDoc::DoSpin(int nIndex)
  121. {
  122. m_cSpin[nIndex].Draw();
  123. }
  124. void CTaskingDoc::SuspendSpinner(int nIndex, BOOL bSuspend)
  125. //CTaskingDoc m;//去掉所有的对象m也可,但同时要去掉SuspendSpinner的static属性
  126. if(!bSuspend)
  127. {
  128. if(m_pSpinThread[nIndex])
  129. {
  130. HANDLE hThread=m_pSpinThread[nIndex]->m_hThread;
  131. ::WaitForSingleObject(hThread,INFINITE);
  132. }
  133. }
  134. else 
  135. {
  136. int iSpnr;
  137. switch(nIndex)
  138. {
  139. case 0:
  140. iSpnr=1;
  141. break;
  142. case 1:
  143. iSpnr=3;
  144. break;
  145. }
  146. m_pSpinThread[nIndex]=AfxBeginThread(ThreadFunc,(LPVOID)&m_cSpin[iSpnr]);
  147. }
  148. }
  149. UINT CTaskingDoc::ThreadFunc(LPVOID pParam)
  150. {
  151. CSpinner* lpSpin=(CSpinner*)pParam;
  152.   BOOL* pbContinue=lpSpin->GetContinue();
  153.   while(*pbContinue)
  154. lpSpin->Draw();
  155. return 0;
  156. }