Iterator.cpp
上传用户:popouu88
上传日期:2013-02-11
资源大小:2894k
文件大小:5k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. // Iterator.cpp: implementation of the CIterator class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "Iterator.h"
  6. #include "..WB.h"
  7. #include "..DrawView.h"
  8. #ifdef _DEBUG
  9. #undef THIS_FILE
  10. static char THIS_FILE[]=__FILE__;
  11. #define new DEBUG_NEW
  12. #endif
  13. //////////////////////////////////////////////////////////////////////
  14. // Construction/Destruction
  15. //////////////////////////////////////////////////////////////////////
  16. CIterator::CIterator(  CDrawView * view )
  17. {
  18. this->hCursor = ::AfxGetApp( )->LoadStandardCursor( MAKEINTRESOURCE( IDC_ARROW ) );
  19. this->hOldCursor = NULL;
  20. this->view = view;
  21. this->rect.SetRect( 0 , 0 , 33 , 22 );
  22. this->drag = false;
  23. this->dragPoint = CPoint( 0 , 0 );
  24. this->imglist.Create( IDB_WB_ITERATOR , 33 , 1 , RGB( 255 , 0 , 0 ) );
  25. this->m_bShow = false;
  26. }
  27. CIterator::~CIterator( )
  28. {
  29. if( this->hCursor )
  30. ::DestroyCursor( this->hCursor );
  31. this->view = NULL;
  32. }
  33. void CIterator::SetIterator( bool * m_bShow , CPoint * point )
  34. {
  35. if( m_bShow == NULL && point == NULL )
  36. {
  37. this->m_bShow = ! this->m_bShow; 
  38. CPoint pt = this->view->GetScrollPosition( );
  39. if( pt.y >= this->rect.top )
  40. {
  41. CRect rc;
  42. this->view->GetClientRect( &rc );
  43. rc.OffsetRect( pt );
  44. this->rect.OffsetRect( rc.CenterPoint( ) - this->rect.TopLeft( ) );
  45. }
  46. this->view->Invalidate( ); 
  47. //通知外部指示器变化
  48. int size = 0;
  49. //用户名  
  50. size += this->view->userName.GetLength( ) + sizeof( char );
  51. //id
  52. size += sizeof( int );
  53. //图元类型
  54. size += sizeof( int );
  55. //图元的操作
  56. size += sizeof( int );
  57. //图元的参数(包括 是否显示、坐标)
  58. size += 3 * sizeof( int );
  59. char * buffer = new char[ size ];
  60. char * now = buffer;
  61. //用户名
  62. strcpy( now , this->view->userName ); now += this->view->userName.GetLength( ) + sizeof( char );
  63. //图元id
  64. *( int * )now = 0; now += sizeof( int );
  65. //图元的类型
  66. *( int  * )now = 0; now += sizeof( int );
  67. //图元的操作
  68. *( int * )now = CDrawView::ITERATOR; now += sizeof( int );
  69. //图元的参数
  70. *( int * )now = this->m_bShow; now += sizeof( int );
  71. //图元的坐标
  72. *( int * )now = this->rect.left; now += sizeof( int );
  73. *( int * )now = this->rect.top; 
  74.         //通知外部程序
  75. this->view->OnWB( this->view->pContext , this->view->GetParent( ) , buffer , size );
  76. delete buffer;
  77. }
  78. else
  79. {
  80. this->m_bShow = * m_bShow;
  81. this->rect.OffsetRect( * point - this->rect.TopLeft( ) );
  82. }
  83. }
  84. void CIterator::Draw( CDC * pDC )
  85. {
  86. if( this && this->m_bShow )
  87. this->imglist.Draw( pDC , 0 , this->rect.TopLeft( ) , ILD_TRANSPARENT );
  88. }
  89. bool CIterator::LButtonDown( UINT nFlags , CPoint point )
  90. {
  91. if( this && this->m_bShow && ( nFlags & MK_LBUTTON ) && this->rect.PtInRect( point ) )
  92. {
  93. this->dragPoint = point;
  94. this->drag = true;
  95. return true;
  96. }
  97. return false;
  98. }
  99. bool CIterator::LButtonUp( UINT nFlags , CPoint point )
  100. {
  101. if( this && this->m_bShow && this->drag )
  102. {
  103. this->drag = false;
  104. //通知外部指示器变化
  105. int size = 0;
  106. //用户名  
  107. size += this->view->userName.GetLength( ) + sizeof( char );
  108. //id
  109. size += sizeof( int );
  110. //图元类型
  111. size += sizeof( int );
  112. //图元的操作
  113. size += sizeof( int );
  114. //图元的参数(包括 是否显示、坐标)
  115. size += 3 * sizeof( int );
  116. char * buffer = new char[ size ];
  117. char * now = buffer;
  118. //用户名
  119. strcpy( now , this->view->userName ); now += this->view->userName.GetLength( ) + sizeof( char );
  120. //图元id
  121. *( int * )now = 0; now += sizeof( int );
  122. //图元的类型
  123. *( int  * )now = 0; now += sizeof( int );
  124. //图元的操作
  125. *( int * )now = CDrawView::ITERATOR; now += sizeof( int );
  126. //图元的参数
  127. *( int * )now = this->m_bShow; now += sizeof( int );
  128. //图元的坐标
  129. *( int * )now = this->rect.left; now += sizeof( int );
  130. *( int * )now = this->rect.top; 
  131.         //通知外部程序
  132. this->view->OnWB( this->view->pContext , this->view->GetParent( ) , buffer , size );
  133. delete buffer;
  134. return true;
  135. }
  136. return false;
  137. }
  138. bool CIterator::MouseMove( UINT nFlags , CPoint point )
  139. {
  140. if( this )
  141. {
  142. if( ! ( nFlags & MK_LBUTTON ) )
  143. {
  144. if( this->rect.PtInRect( point ) )
  145. {
  146. if( ! this->hOldCursor )
  147. this->hOldCursor = ( HCURSOR )::SetClassLong( this->view->GetSafeHwnd( ) , GCL_HCURSOR , ( long )this->hCursor );
  148. }
  149. else if( this->hOldCursor )
  150. {
  151. ::SetClassLong( this->view->GetSafeHwnd( ) , GCL_HCURSOR , ( long )this->hOldCursor );
  152. this->hOldCursor = NULL;
  153. }
  154. }
  155. if( ( nFlags & MK_LBUTTON ) && this->drag )
  156. {
  157. this->rect.OffsetRect( point - this->dragPoint );
  158. this->dragPoint = point;
  159. this->view->Invalidate( );
  160. return true;
  161. }
  162. }
  163. return false;
  164. }