home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / mfc / general / docktool / editbar.cpp < prev    next >
C/C++ Source or Header  |  1998-03-26  |  5KB  |  229 lines

  1. // editbar.cpp : implementation file
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12.  
  13. #include "stdafx.h"
  14. #include "docktool.h"
  15. #include "editbar.h"
  16.  
  17. #ifdef _DEBUG
  18. #undef THIS_FILE
  19. static char BASED_CODE THIS_FILE[] = __FILE__;
  20. #endif
  21.  
  22. #define COMBOBOX_INDEX 5
  23. #define COMBOBOX_WIDTH 150
  24. #define COMBOBOX_HEIGHT 150
  25. #define COMBOBOX_BITMAP 4
  26.  
  27. static UINT BASED_CODE EditButtons[] =
  28. {
  29.     // same order as in the bitmap 'toolbar.bmp'
  30.     ID_EDIT_BM_TOGGLE,
  31.     ID_EDIT_BM_NEXT,
  32.     ID_EDIT_BM_PREV,
  33.     ID_EDIT_BM_CLEARALL,
  34.         ID_SEPARATOR,
  35.     ID_EDIT_FIND,
  36.         ID_SEPARATOR,
  37.     ID_EDIT_FINDINFILES,
  38.         ID_SEPARATOR,
  39.     ID_EDIT_INDENT,
  40.     ID_EDIT_UNINDENT,
  41.         ID_SEPARATOR,
  42.     ID_WINDOW_NEW,
  43.     ID_WINDOW_SPLIT,
  44.     ID_WINDOW_CASCADE,
  45.     ID_WINDOW_TILE_HORZ,
  46.     ID_WINDOW_TILE_VERT,
  47. };
  48.  
  49. /////////////////////////////////////////////////////////////////////////////
  50. // CEditBar
  51.  
  52. CEditBar::CEditBar()
  53. {
  54.     m_bColor = TRUE;
  55. }
  56.  
  57. CEditBar::~CEditBar()
  58. {
  59. }
  60.  
  61. BOOL CEditBar::Init(CWnd* pParentWnd, BOOL bColor, BOOL bToolTips)
  62. {
  63.     m_bColor = bColor;
  64.     m_bVertical = FALSE;
  65.  
  66.     // start out with no borders
  67.     DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_SIZE_DYNAMIC;
  68.     if (bToolTips)
  69.         dwStyle |= (CBRS_TOOLTIPS | CBRS_FLYBY);
  70.     if (!Create(pParentWnd, dwStyle, IDW_EDIT_BAR))
  71.     {
  72.         return FALSE;
  73.     }
  74.  
  75.     if (!SetColor(m_bColor))
  76.         return FALSE;
  77.  
  78.     if(!SetButtons(EditButtons, sizeof(EditButtons)/sizeof(UINT)))
  79.         return FALSE;
  80.  
  81.     CRect rect(-COMBOBOX_WIDTH, -COMBOBOX_HEIGHT, 0, 0);
  82.     // The ID of the ComboBox is important for two reasons.  One, so you
  83.     // can receive notifications from the control.  And also for ToolTips.
  84.     // During HitTesting if the ToolBar sees that the mouse is one a child
  85.     // control, the toolbar will lookup the controls ID and search for a
  86.     // string in the string table with the same ID to use for ToolTips
  87.     // and StatusBar info.
  88.     if (!m_SearchBox.Create(WS_CHILD | CBS_DROPDOWN |
  89.         CBS_AUTOHSCROLL | WS_VSCROLL | CBS_HASSTRINGS, rect, this,
  90.         IDC_EDITBAR_SEARCHBOX))
  91.     {
  92.         return FALSE;
  93.     }
  94.  
  95.     HFONT hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
  96.     if (hFont == NULL)
  97.         hFont = (HFONT)GetStockObject(ANSI_VAR_FONT);
  98.  
  99.     m_SearchBox.SendMessage(WM_SETFONT, (WPARAM)hFont);
  100.  
  101.     if(!SetHorizontal())
  102.         return FALSE;
  103.  
  104.     return TRUE;
  105. }
  106.  
  107. BOOL CEditBar::SetHorizontal()
  108. {
  109.     m_bVertical = FALSE;
  110.  
  111.     SetBarStyle(GetBarStyle() | CBRS_ALIGN_TOP);
  112.  
  113.     SetButtonInfo(COMBOBOX_INDEX, IDC_EDITBAR_SEARCHBOX, TBBS_SEPARATOR, COMBOBOX_WIDTH);
  114.  
  115.     if (m_SearchBox.m_hWnd != NULL)
  116.     {
  117.         CRect rect;
  118.         GetItemRect(COMBOBOX_INDEX, rect);
  119.  
  120.         m_SearchBox.SetWindowPos(NULL, rect.left, rect.top, 0, 0, SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOCOPYBITS);
  121.         m_SearchBox.ShowWindow(SW_SHOW);
  122.     }
  123.  
  124.     return TRUE;
  125. }
  126.  
  127. BOOL CEditBar::SetVertical()
  128. {
  129.     m_bVertical = TRUE;
  130.  
  131.     SetButtonInfo(COMBOBOX_INDEX, ID_EDIT_FIND, TBBS_BUTTON, COMBOBOX_BITMAP);
  132.  
  133.     if (m_SearchBox.m_hWnd != NULL)
  134.         m_SearchBox.ShowWindow(SW_HIDE);
  135.  
  136.     return TRUE;
  137. }
  138.  
  139. BOOL CEditBar::SetColor(BOOL bColor)
  140. {
  141.     m_bColor=bColor;
  142.  
  143.     if (m_bColor)
  144.         return LoadBitmap(IDR_COLOR_EDITBAR);
  145.     else
  146.         return LoadBitmap(IDR_MONO_EDITBAR);
  147. }
  148.  
  149. CSize CEditBar::CalcDynamicLayout(int nLength, DWORD dwMode)
  150. {
  151.     // if we're committing set the buttons appropriately
  152.     if (dwMode & LM_COMMIT)
  153.     {
  154.         if (dwMode & LM_VERTDOCK)
  155.         {
  156.             if (!m_bVertical)
  157.                 SetVertical();
  158.         }
  159.         else
  160.         {
  161.             if (m_bVertical)
  162.                 SetHorizontal();
  163.         }
  164.  
  165.         return CToolBar::CalcDynamicLayout(nLength, dwMode);
  166.     }
  167.     else
  168.     {
  169.         BOOL bOld = m_bVertical;
  170.         BOOL bSwitch = (dwMode & LM_HORZ) ? bOld : !bOld;
  171.  
  172.         if (bSwitch)
  173.         {
  174.             if (bOld)
  175.                 SetHorizontal();
  176.             else
  177.                 SetVertical();
  178.         }
  179.  
  180.  
  181.         CSize sizeResult = CToolBar::CalcDynamicLayout(nLength, dwMode);
  182.  
  183.         if (bSwitch)
  184.         {
  185.             if (bOld)
  186.                 SetHorizontal();
  187.             else
  188.                 SetVertical();
  189.         }
  190.  
  191.         return sizeResult;
  192.     }
  193. }
  194.  
  195. //CSize CEditBar::CalcFixedLayout(BOOL bStretch, BOOL bHorz)
  196. //{
  197. //      if (!bHorz && (m_dwStyle & CBRS_SIZE_DYNAMIC) && !(m_dwStyle & CBRS_FLOATING))
  198. //  {
  199. //      CSize size;
  200. //
  201. //      size = CControlBar::CalcFixedLayout(bStretch, bHorz);
  202. //
  203. //      CRect rect;
  204. //      rect.SetRectEmpty();
  205. //
  206. //      CalcInsideRect(rect, bHorz);
  207. //
  208. //      size.cx = m_sizeVert.cx + (m_rectInsideVert.Width() - rect.Width());
  209. //      size.cy = m_sizeVert.cy + (m_rectInsideVert.Height() - rect.Height());
  210. //      return size;
  211. //  }
  212. //  else
  213. //  {
  214. //      if (m_bVertical)
  215. //          SetHorizontal();
  216. //
  217. //      return CToolBar::CalcFixedLayout(bStretch, bHorz);
  218. //  }
  219. //}
  220.  
  221. BEGIN_MESSAGE_MAP(CEditBar, CToolBar)
  222.     //{{AFX_MSG_MAP(CEditBar)
  223.     //}}AFX_MSG_MAP
  224. END_MESSAGE_MAP()
  225.  
  226.  
  227. /////////////////////////////////////////////////////////////////////////////
  228. // CEditBar message handlers
  229.