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

IP电话/视频会议

开发平台:

Visual C++

  1. // MainView.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "conference.h"
  5. #include "MainView.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. IMPLEMENT_DYNCREATE( CMainView , CView )
  12. extern CConferenceApp theApp;
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CMainView
  15. CMainView::CMainView()
  16. {
  17. this->chatWnd = NULL;
  18. this->wbWnd = NULL;
  19. this->ieWnd = NULL;
  20. this->fileWnd = NULL;
  21. this->shareWnd = NULL;
  22. }
  23. CMainView::~CMainView()
  24. {
  25. }
  26. BEGIN_MESSAGE_MAP(CMainView, CView)
  27. //{{AFX_MSG_MAP(CMainView)
  28. ON_WM_SIZE()
  29. ON_WM_CREATE()
  30. ON_WM_DESTROY()
  31. //}}AFX_MSG_MAP
  32. END_MESSAGE_MAP()
  33. /////////////////////////////////////////////////////////////////////////////
  34. // CMainView drawing
  35. int CMainView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  36. {
  37. if ( CView::OnCreate(lpCreateStruct) == -1 )
  38. return -1;
  39. static int i = 0;
  40. CRect rc;
  41. this->GetClientRect( &rc );
  42. //第一个视图,分割窗口
  43. if( ! i && this->m_wndSplitter.CreateStatic( this , 2 , 1 ) )
  44. {
  45. i ++;
  46. this->m_wndSplitter.CreateView( 0 , 0 , RUNTIME_CLASS( CMainView ) , CSize( rc.Width( ) , rc.Height( ) / 2 ) , NULL );
  47. this->m_wndSplitter.CreateView( 1 , 0 , RUNTIME_CLASS( CMainView ) , CSize( 0 , 0 ) , NULL  );
  48. this->m_wndSplitter.SetRowInfo( 0 , ::GetSystemMetrics( SM_CYSCREEN ) * 3 / 4 , 0 );
  49. }//第2个视图,标签窗口
  50. else if( i == 1 )
  51. {
  52. i ++;
  53. this->m_tab.Create( TCS_TABS | WS_CHILD | WS_VISIBLE | TCS_BOTTOM | TCS_FOCUSNEVER , rc , this , 0 );
  54. CFont font;
  55. font.CreatePointFont( 100 , "新宋体" );
  56. this->m_tab.SetFont( &font );
  57. font.Detach( );
  58. this->wbWnd = ::CreateWBWnd( CMainView::OnWB , this , theApp.GetClient( ).GetUserName( ) );
  59. this->m_tab.AddWnd( this->wbWnd , "电子白板" , false);
  60. this->ieWnd = ::CreateIEWnd( CMainView::OnIEURL , this , theApp.GetClient( ).GetUserName( ) );
  61. this->m_tab.AddWnd( this->ieWnd , "协同浏览" , false );
  62. this->shareWnd = ::CreateShareWnd( CMainView::OnShare , this , theApp.GetClient( ).GetUserName( ) );
  63. this->m_tab.AddWnd( this->shareWnd , "程序共享" , false );
  64. this->fileWnd = ::CreateFileWnd( CMainView::OnFile , this , theApp.GetClient( ).GetUserName( ) );
  65. this->m_tab.AddWnd( this->fileWnd , "文件传输" , false );
  66. }//第三个视图,文字聊天窗口
  67. else if ( i == 2 )
  68. {
  69. if( this->chatWnd = ::CreateChatWnd( CMainView::OnChat , this , theApp.GetClient( ).GetUserName( ) ) )
  70. {
  71. this->chatWnd->SetParent( this );
  72. this->chatWnd->ModifyStyle( WS_CAPTION | WS_BORDER | WS_THICKFRAME , 0 );
  73. this->chatWnd->ShowWindow( SW_SHOW );
  74. }
  75. }
  76. return 0;
  77. }
  78. CWnd * CMainView::GetTabWnd( int index )
  79. {
  80. CMainView * view = ( CMainView * )this->m_wndSplitter.GetPane( 0 , 0 );
  81. switch( index )
  82. {
  83. case 0 : return view->wbWnd;
  84. case 1 : return view->ieWnd;
  85. case 2 : return view->shareWnd;
  86. case 3 : return view->fileWnd;
  87. }
  88. return NULL;
  89. }
  90. void CMainView::OnSize(UINT nType, int cx, int cy) 
  91. {
  92. CView::OnSize(nType, cx, cy);
  93. if( this->GetWindow( GW_CHILD ) )
  94. this->GetWindow( GW_CHILD )->MoveWindow( 0 , 0 , cx , cy );
  95. }
  96. void CMainView::OnChat( void * pContext , CWnd * pWnd , char * buffer , int size )
  97. {
  98. CMainView * pThis = ( CMainView * )pContext;
  99. theApp.GetClient( ).SendModulePackage( PModulePackage::CHAT , buffer , size );
  100.     //回显
  101. ::SetChatMessage( pThis->chatWnd , buffer , size );
  102. }
  103. void CMainView::OnWB( void * pContext , CWnd * pWnd , char * buffer , int size )
  104. {
  105. CMainView * pThis = ( CMainView * )pContext;
  106. theApp.GetClient( ).SendModulePackage( PModulePackage::WB , buffer , size );
  107. }
  108. void CMainView::OnIEURL(  void * pContext , CWnd * pWnd , char * buffer , int size )
  109. {
  110. CMainView * pThis = ( CMainView * )pContext;
  111. theApp.GetClient( ).SendModulePackage( PModulePackage::IE , buffer , size );
  112. }
  113. void CMainView::OnFile( void * pContext , CWnd * pWnd , char * buffer , int size )
  114. {
  115. CMainView * pThis = ( CMainView * )pContext;
  116. if( ! buffer || ! size )
  117. pThis->GetParent( )->GetParent( )->GetParent( )->SendMessage( WM_ADD_USER , ( WPARAM )pWnd );
  118. else
  119. theApp.GetClient( ).SendModulePackage( PModulePackage::FILE , buffer , size );
  120. }
  121. bool CMainView::OnShare( void * pContext , CWnd * pWnd , char * buffer , int size )
  122. {
  123. CMainView * pThis = ( CMainView * )pContext;
  124. if( buffer&& size )
  125. theApp.GetClient( ).SendModulePackage( PModulePackage::SHARE , buffer , size );
  126. return ! theApp.GetClient( ).GetConferenceName( ).empty( );
  127. }
  128. void CMainView::SetModulePackage( int module , char * buffer , int size )
  129. {
  130. CMainView * view = ( CMainView * )this->m_wndSplitter.GetPane( 0 , 0 );
  131. switch( module )
  132. {//聊天
  133. case PModulePackage::CHAT : 
  134. {
  135. view = ( CMainView * )this->m_wndSplitter.GetPane( 1 , 0 );
  136. ::SetChatMessage( view->chatWnd , buffer , size ); 
  137. }break;
  138. case PModulePackage::WB :
  139. ::SetWBMessage( view->wbWnd , buffer , size ); break;
  140.     //协同浏览
  141. case PModulePackage::IE :
  142. ::SetIEMessage( view->ieWnd , buffer , size ); break;
  143.     //文件传输
  144. case PModulePackage::FILE :
  145. ::SetFileMessage( view->fileWnd , buffer , size ); break;
  146.     //应用程序共享 
  147. case PModulePackage::SHARE : 
  148. ::SetShareMessage( view->shareWnd , buffer , size ); break;
  149. }
  150. }
  151. void CMainView::OnDestroy() 
  152. {
  153. if( this->chatWnd )
  154. this->chatWnd->SendMessage( WM_CLOSE );
  155. if( this->wbWnd )
  156. this->wbWnd->SendMessage( WM_CLOSE );
  157. if( this->ieWnd )
  158. this->ieWnd->SendMessage( WM_CLOSE );
  159. if( this->fileWnd )
  160. this->fileWnd->SendMessage( WM_CLOSE );
  161. if( this->shareWnd )
  162. this->shareWnd->SendMessage( WM_CLOSE );
  163.     
  164. CView::OnDestroy();
  165. }