PropSheetBar.cpp
上传用户:ledjyj
上传日期:2019-03-13
资源大小:36k
文件大小:4k
源码类别:

工具条

开发平台:

Visual C++

  1. // PropSheetBar.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "tab_dlg_bar.h"
  5. #include "PropSheetBar.h"
  6. #include ".propsheetbar.h"
  7. // CPropSheetBar
  8. const CSize sizeTitleOffset(6,3);
  9. IMPLEMENT_DYNAMIC(CPropSheetBar, CControlBar)
  10. CPropSheetBar::CPropSheetBar()
  11. {
  12. m_brushBkgd.CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
  13. // m_sizeTitleOffset=CSize(6,3);
  14. }
  15. CPropSheetBar::~CPropSheetBar()
  16. {
  17. }
  18. BEGIN_MESSAGE_MAP(CPropSheetBar, CControlBar)
  19. ON_WM_WINDOWPOSCHANGED()
  20. // ON_WM_ACTIVATE()
  21. END_MESSAGE_MAP()
  22. // CPropSheetBar message handlers
  23. void CPropSheetBar::OnUpdateCmdUI(CFrameWnd* /*pTarget*/, BOOL /*bDisableIfNoHndler*/)
  24. {
  25. }
  26. BOOL CPropSheetBar::Create(LPCTSTR lpszWindowName, CWnd* pParentWnd, UINT nID)
  27. {
  28. // create the base window
  29.     CString lpszClassName = AfxRegisterWndClass(CS_DBLCLKS, LoadCursor(NULL, IDC_ARROW),
  30.         m_brushBkgd, 0);
  31. DWORD style=WS_CHILD | WS_VISIBLE | CBRS_LEFT | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY;
  32.     m_dwStyle = style & CBRS_ALL;
  33. if (!CControlBar::Create(lpszClassName, lpszWindowName, style,  CRect(0,0,0,0), pParentWnd,NULL))
  34. return FALSE;
  35. m_strTitle=lpszWindowName;
  36. // create the property sheet
  37. m_cPropSheet.Create(this,WS_CHILD|WS_VISIBLE);
  38. m_cPropSheet.SetTitle(lpszWindowName);
  39. CClientDC dc(this);
  40. m_sizeTitle=dc.GetTextExtent(m_strTitle);
  41. CRect rc;
  42.     m_cPropSheet.GetWindowRect(rc); // screen coordinates
  43.     m_sizePropSheet=rc.Size();
  44. return TRUE;
  45. }
  46. CSize CPropSheetBar::CalcDynamicLayout(int nLength, DWORD dwMode)
  47. {
  48. TRACE("in CPropSheetBar::CalcDynamicLayout, length = %d, dwMode = %d, bHorz = %dnm_sizePropSheet.x=%d, y=%dn",nLength,dwMode, dwMode&LM_HORZ,m_sizePropSheet.cx,m_sizePropSheet.cy);
  49. if (IsFloating())
  50. {
  51. TRACE("is floatingn");
  52. CRect rc(CPoint(6,6),m_sizePropSheet);
  53. m_cPropSheet.MoveWindow(rc);
  54. return m_sizePropSheet+CSize(16,16);
  55. }
  56. CRect rc(CPoint(4,m_sizeTitle.cy+sizeTitleOffset.cy),m_sizePropSheet);
  57. m_cPropSheet.MoveWindow(rc);
  58. return m_sizePropSheet+CSize(16,m_sizeTitle.cy+sizeTitleOffset.cy+10);
  59. }
  60. void CPropSheetBar::DrawGripper(CDC *pDC,const CRect &rect)
  61. {
  62. TRACE("In CPropSheetBar::DrawGripper, r.top=%d, r.left=%d, r.bot=%d, r.right=%dn",rect.top,rect.left,rect.bottom,rect.right);
  63. if (IsFloating())
  64. {
  65. CControlBar::DrawGripper(pDC,rect);
  66. return;
  67. }
  68. // CControlBar::DrawGripper(pDC,rect);
  69. CFont font;
  70. VERIFY(font.CreateFont(
  71. 14,                        // nHeight
  72. 0,                         // nWidth
  73. 0,                         // nEscapement
  74. 0,                         // nOrientation
  75. FW_NORMAL,                 // nWeight
  76. FALSE,                     // bItalic
  77. FALSE,                     // bUnderline
  78. 0,                         // cStrikeOut
  79. ANSI_CHARSET,              // nCharSet
  80. OUT_DEFAULT_PRECIS,        // nOutPrecision
  81. CLIP_DEFAULT_PRECIS,       // nClipPrecision
  82. DEFAULT_QUALITY,           // nQuality
  83. DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
  84. "Arial"));                 // lpszFacename
  85. CFont *oF=pDC->SelectObject(&font);
  86. pDC->SetBkColor(GetSysColor(COLOR_BTNFACE));
  87. pDC->TextOut(rect.left+sizeTitleOffset.cx,rect.top+sizeTitleOffset.cy,m_strTitle);
  88. CSize sz=pDC->GetTextExtent(m_strTitle);
  89. // Draw the docking grippers 
  90. CRect rectGrip1(rect.left+sz.cx+2*sizeTitleOffset.cx,7,rect.right-10,7+3);
  91. pDC->Draw3dRect(rectGrip1, 
  92. RGB(255,255,255), 
  93. RGB(128,128,128)); 
  94. CRect rectGrip2(rect.left+sz.cx+2*sizeTitleOffset.cx,11,rect.right-10, 11+3); 
  95. pDC->Draw3dRect(rectGrip2, 
  96. RGB(255,255,255), 
  97. RGB(128,128,128)); 
  98. }