OutputBar.cpp
上传用户:szcysw
上传日期:2013-03-11
资源大小:6752k
文件大小:5k
源码类别:

界面编程

开发平台:

Visual C++

  1. // OutputBar.cpp : implementation file
  2. //
  3. /////////////////////////////////////////////////////////////////////////////
  4. #include "StdAfx.h"
  5. #include "Resource.h"
  6. #include "OutputBar.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // COutputBar
  14. COutputBar::COutputBar()
  15. {
  16. NONCLIENTMETRICS ncm;
  17. memset(&ncm, 0, sizeof(NONCLIENTMETRICS));
  18. ncm.cbSize = sizeof(NONCLIENTMETRICS);
  19. VERIFY(::SystemParametersInfo(SPI_GETNONCLIENTMETRICS,
  20. sizeof(NONCLIENTMETRICS), &ncm, 0));
  21. _tcscpy( ncm.lfMessageFont.lfFaceName, _T("Courier"));
  22. m_Font.CreateFontIndirect(&ncm.lfMessageFont);
  23. }
  24. COutputBar::~COutputBar()
  25. {
  26. // TODO: add destruction code here.
  27. }
  28. IMPLEMENT_DYNAMIC(COutputBar, CCJControlBar)
  29. BEGIN_MESSAGE_MAP(COutputBar, CCJControlBar)
  30. //{{AFX_MSG_MAP(COutputBar)
  31. ON_WM_CREATE()
  32. ON_WM_SIZE()
  33. ON_WM_PAINT()
  34. //}}AFX_MSG_MAP
  35. END_MESSAGE_MAP()
  36. static CString strBuild[] =
  37. {
  38. _T("--------------------Configuration: TestApp - Win32 Debug--------------------"),
  39. _T("Compiling..."),
  40. _T("TestAppView.cpp"),
  41. _T("Linking..."),
  42. _T(""),
  43. _T("TestApp.exe - 0 error(s), 0 warning(s)"),
  44. };
  45. static CString strDebug[] =
  46. {
  47. _T("Loaded 'E:\WINNT\System32\ntdll.dll', no matching symbolic information found."),
  48. _T("Loaded symbols for 'E:\WINNT\system32\MFC42D.DLL'"),
  49. _T("Loaded symbols for 'E:\WINNT\system32\MSVCRTD.DLL'"),
  50. _T("Loaded 'E:\WINNT\system32\KERNEL32.DLL', no matching symbolic information found."),
  51. _T("Loaded 'E:\WINNT\system32\GDI32.DLL', no matching symbolic information found."),
  52. _T("Loaded 'E:\WINNT\system32\USER32.DLL', no matching symbolic information found."),
  53. _T("Loaded 'E:\WINNT\system32\ADVAPI32.DLL', no matching symbolic information found."),
  54. _T("Loaded 'E:\WINNT\system32\RPCRT4.DLL', no matching symbolic information found."),
  55. _T("Loaded symbols for 'E:\WINNT\system32\MFCO42D.DLL'")
  56. };
  57. static CString strTabs[] =
  58. {
  59. "Build",
  60. "Debug",
  61. "Find in Files 1",
  62. "Find in Files 2"
  63. };
  64. /////////////////////////////////////////////////////////////////////////////
  65. // COutputBar message handlers
  66. int COutputBar::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  67. {
  68. if (CCJControlBar::OnCreate(lpCreateStruct) == -1)
  69. return -1;
  70. if (!m_FlatTabCtrl.Create(NULL, "", WS_VISIBLE | WS_CHILD | FTS_HASARROWS | FTS_BOTTOM,
  71. CRect(10,10,200,25), this, IDC_FLATTAB))
  72. {
  73. TRACE0(_T("Unable to create flat tab control barn"));
  74. return -1;
  75. }
  76. int nItemCount = sizeof(strTabs)/sizeof(strTabs[0]);
  77. for( int iItem = 0; iItem < nItemCount; ++iItem)
  78. {
  79. m_FlatTabCtrl.InsertItem(iItem, strTabs[iItem]);
  80. }
  81. DWORD dwStyle = WS_CHILD | WS_VISIBLE | LBS_NOINTEGRALHEIGHT | 
  82. WS_VSCROLL | WS_TABSTOP;
  83. int nListCount = sizeof(m_OutputList)/sizeof(m_OutputList[0]);
  84. for( int iList = 0; iList < nListCount; ++iList)
  85. {
  86. if (!m_OutputList[iList].Create( dwStyle, CRect(0,0,0,0), this,
  87. IDC_OUTPUT_LIST+iList ))
  88. {
  89. TRACE(_T("Failed to create output window.n"));
  90. return -1;
  91. }
  92. m_OutputList[iList].SetFont( &m_Font );
  93. }
  94. int nBuildCount = sizeof(strBuild)/sizeof(strBuild[0]);
  95. for( int i = 0; i < nBuildCount; ++i)
  96. {
  97. m_OutputList[0].AddString(strBuild[i]);
  98. }
  99. int nDebugCount = sizeof(strDebug)/sizeof(strDebug[0]);
  100. for( i = 0; i < nDebugCount; ++i)
  101. {
  102. m_OutputList[1].AddString(strDebug[i]);
  103. }
  104. SelectTabView(0);
  105. return 0;
  106. }
  107. BOOL COutputBar::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) 
  108. {
  109. if(IDC_FLATTAB == (UINT)wParam)
  110. {
  111. NMHDR* pNMHDR = (NMHDR*)lParam;
  112. switch(pNMHDR->code)
  113. {
  114. case TCN_SELCHANGING:
  115. break;
  116. case TCN_SELCHANGE:
  117. SelectTabView(m_FlatTabCtrl.GetCurSel());
  118. break;
  119. }
  120. }
  121. return CCJControlBar::OnNotify(wParam, lParam, pResult);
  122. }
  123. void COutputBar::SelectTabView(int nTab)
  124. {
  125. int nListCount = sizeof(m_OutputList)/sizeof(m_OutputList[0]);
  126. for( int iList = 0; iList < nListCount; ++iList) {
  127. m_OutputList[iList].ShowWindow(SW_HIDE);
  128. }
  129. m_OutputList[nTab].ShowWindow(SW_SHOW);
  130. }
  131. void COutputBar::OnSize(UINT nType, int cx, int cy) 
  132. {
  133. CCJControlBar::OnSize(nType, cx, cy);
  134. if(m_FlatTabCtrl.GetSafeHwnd())
  135. {
  136. CRect rc;
  137. GetChildRect(rc);
  138. rc.DeflateRect(1,1);
  139. int nListCount = sizeof(m_OutputList)/sizeof(m_OutputList[0]);
  140. for( int iList = 0; iList < nListCount; ++iList) {
  141. m_OutputList[iList].MoveWindow(rc.left, rc.top,
  142. rc.Width(), rc.bottom-(IsFloating()?18:19));
  143. }
  144. m_FlatTabCtrl.MoveWindow(rc.left, rc.bottom-15, rc.Width(), 15);
  145. }
  146. }
  147. void COutputBar::OnPaint() 
  148. {
  149. CPaintDC dc(this); // device context for painting
  150. CRect rc;
  151. // m_iAuxImage = (UINT)-1;
  152. GetClientRect(&rc);
  153. CRect rect;
  154. GetChildRect(rect);
  155. DrawBorders(&dc,rc);
  156. dc.Draw3dRect(rect, ::GetSysColor(COLOR_3DDKSHADOW),
  157. ::GetSysColor(COLOR_3DDKSHADOW));
  158. }