AppTabManager.cpp
Upload User: kairuinn
Upload Date: 2009-02-07
Package Size: 2922k
Code Size: 5k
Category:

Graph program

Development Platform:

Visual C++

  1. // AppTabManager.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "Solidgraph.h"
  5. #include "AppTabManager.h"
  6. #include "DocManagerEx.h"
  7. // CAppTabManager
  8. IMPLEMENT_DYNAMIC(CAppTabManager, CControlBar)
  9. CAppTabManager::CAppTabManager()
  10. {
  11. }
  12. CAppTabManager::~CAppTabManager()
  13. {
  14. std::vector<TAB_STRUCT*>::iterator itTabInfo;
  15. for ( itTabInfo = m_tab_infos.begin(); itTabInfo != m_tab_infos.end(); ++itTabInfo )
  16. delete (*itTabInfo);
  17. }
  18. #define ID_TAB 1
  19. BEGIN_MESSAGE_MAP(CAppTabManager, CControlBar)
  20. ON_WM_CREATE()
  21. ON_WM_SIZE()
  22. ON_NOTIFY( TCN_SELCHANGE, ID_TAB, OnTabChanged )
  23. END_MESSAGE_MAP()
  24. // CTabBar message handlers
  25. void CAppTabManager::OnTabChanged( NMHDR * /* pNotifyStruct */, LRESULT * /* result */ ) 
  26. {
  27. TC_ITEM tci;
  28. tci.mask = TCIF_PARAM;
  29. m_tabs.GetItem(m_tabs.GetCurSel(), &tci );
  30. ((CDocManagerEx*)theApp.m_pDocManager)->ActivateFrame((CDocTemplate*)tci.lParam);
  31. }
  32. void CAppTabManager::AddTab( CDocTemplate* dT, const char* str) 
  33. {
  34. TAB_STRUCT* lpWndTabInfo = new TAB_STRUCT;
  35. lpWndTabInfo->rtClass = dT;
  36. memset( lpWndTabInfo->szText, 0x00, (101)* sizeof( TCHAR ) );
  37. strcpy(lpWndTabInfo->szText,str);
  38. //::GetWindowText( hWnd, lpWndTabInfo->szText, 101 );
  39. lpWndTabInfo->nTabId = m_tabs.InsertItem( TCIF_PARAM | TCIF_TEXT, 
  40. m_tabs.GetItemCount(), lpWndTabInfo->szText, -1, (LPARAM)dT );
  41. m_tab_infos.push_back( lpWndTabInfo );
  42. }
  43. int CAppTabManager::TabIdByRT( CDocTemplate* dT)
  44. {
  45. // Get nTabId by HWND-data of tab
  46. TC_ITEM tci;
  47. tci.mask = TCIF_PARAM;
  48. int nCount = m_tabs.GetItemCount();
  49. for (int i = 0; i < nCount; ++i ) {
  50. m_tabs.GetItem(i, &tci );
  51. if ( dT == (CDocTemplate*)tci.lParam )
  52. return i;
  53. }
  54. return -1;
  55. }
  56. void CAppTabManager::RemoveTab(CDocTemplate* dT) 
  57. {
  58. std::vector<TAB_STRUCT*>::iterator itTabInfo;
  59. // deleting referenced tab infos
  60. for ( itTabInfo = m_tab_infos.begin(); itTabInfo != m_tab_infos.end(); ++itTabInfo ) 
  61. if ( dT == (*itTabInfo)->rtClass ) { // here is
  62. TAB_STRUCT* lpInfo = (*itTabInfo);
  63. m_tab_infos.erase( itTabInfo );
  64. delete lpInfo;
  65. break;
  66. }
  67. // deleting referenced tab
  68. m_tabs.DeleteItem( TabIdByRT( dT ) );
  69. // re-initialize nTabId members of WND_TAB_INFO
  70. for ( itTabInfo = m_tab_infos.begin(); itTabInfo != m_tab_infos.end(); ++itTabInfo )
  71. (*itTabInfo)->nTabId = TabIdByRT( (*itTabInfo)->rtClass );
  72. // activate new tab
  73. /*if ( m_tabs.GetItemCount() > 0 ) {
  74. ActivateTab( hWndActive );
  75. }*/
  76. }
  77. void CAppTabManager::ActivateTab( CDocTemplate* dT) {
  78. TC_ITEM tci;
  79. tci.mask = TCIF_PARAM;
  80. m_tabs.GetItem( m_tabs.GetCurSel(), &tci );
  81. if ( dT != (CDocTemplate*)tci.lParam )
  82. {
  83. m_tabs.SetCurSel( TabIdByRT( dT ) );
  84. }
  85. }
  86. // CAppTabManager message handlers
  87. void CAppTabManager::OnUpdateCmdUI(CFrameWnd* /*pTarget*/, BOOL /*bDisableIfNoHndler*/)
  88. {
  89. }
  90. BOOL CAppTabManager::CreateAppTabManager( CFrameWnd* pTarget ) {
  91. ASSERT( pTarget );
  92. m_pFrameWnd = pTarget;
  93. // m_hWndMDIClient = ( (CMDIFrameWnd*)m_pFrameWnd )->m_hWndMDIClient;
  94. CString strWndclass = ::AfxRegisterWndClass(CS_DBLCLKS, ::LoadCursor(NULL, IDC_ARROW), ::GetSysColorBrush(COLOR_BTNFACE), 0);
  95. if (!CWnd::Create(strWndclass, _T("AppManager"), 
  96. WS_CHILD | CBRS_TOP | WS_VISIBLE|WS_CLIPCHILDREN | CCS_NOPARENTALIGN | CCS_NOMOVEY | CCS_NORESIZE,
  97. CRect(0, 0, 100, 26), pTarget, 31255))
  98. return FALSE;
  99. SetBarStyle(GetBarStyle() | CBRS_TOP | CBRS_TOOLTIPS /* | CBRS_FLYBY | CBRS_SIZE_DYNAMIC */);
  100. //EnableDocking( CBRS_ALIGN_TOP );
  101. //pTarget->DockControlBar(this); 
  102. return TRUE;
  103. }
  104. int CAppTabManager::OnCreate(LPCREATESTRUCT lpCreateStruct)
  105. {
  106. if (CControlBar::OnCreate(lpCreateStruct) == -1)
  107. return -1;
  108. // 袜耱痤桦