home *** CD-ROM | disk | FTP | other *** search
/ Prima Shareware 3 / DuCom_Prima-Shareware-3_cd1.bin / PROGRAMO / C / MRCE / DOCKTEST.ZIP / MYSIZEBA.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1995-12-11  |  4.1 KB  |  160 lines

  1. // mysizeba.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "docktest.h"
  6. #include "mysizeba.h"
  7.  
  8. #define ID_PopupMessage            2000
  9.  
  10. #ifdef _DEBUG
  11. #undef THIS_FILE
  12. static char BASED_CODE THIS_FILE[] = __FILE__;
  13. #endif
  14.  
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CMyListBoxBar
  17. //
  18. // This is a sizeable contorl bar that has a list box and a button on it.
  19. // It is designed to be created dynamically ie you can have more than one 
  20. // of them.
  21.  
  22. IMPLEMENT_DYNAMIC(CMyListBoxBar, CMRCSizeControlBar);
  23.  
  24. CMyListBoxBar::CMyListBoxBar() 
  25.         : CMRCSizeControlBar( SZBARF_STDMOUSECLICKS)
  26. {
  27. }
  28.  
  29. CMyListBoxBar::~CMyListBoxBar()
  30. {
  31. }
  32.  
  33.  
  34.  
  35. BEGIN_MESSAGE_MAP(CMyListBoxBar, CMRCSizeControlBar)
  36.     //{{AFX_MSG_MAP(CMyListBoxBar)
  37.     ON_WM_CREATE()
  38.     ON_COMMAND(ID_PopupMessage, PopupMessage)
  39.     ON_WM_RBUTTONUP()
  40.     //}}AFX_MSG_MAP
  41. END_MESSAGE_MAP()
  42.  
  43.  
  44. /////////////////////////////////////////////////////////////////////////////
  45. // CMyListBoxBar message handlers
  46.  
  47.  
  48. //-------------------------------------------------------------------
  49. void CMyListBoxBar::OnSizedOrDocked(int cx, int cy, BOOL bFloating, int flags)
  50. // respond to this event as we need to override it
  51. //-------------------------------------------------------------------
  52. {
  53.     CRect rect(0, 0, cx, cy);        // rectangle for client area
  54.  
  55.     // shrink rectangle if we're docked
  56.     if (IsProbablyFloating())
  57.         rect.InflateRect(-2, -2);        // shrink for border when floating
  58.     else
  59.         rect.InflateRect(-4, -4);
  60.     
  61.     // position the button at the top right of the window
  62.     CRect ButtonRect;
  63.     m_Button.GetWindowRect(&ButtonRect);
  64.     rect.right -=  ButtonRect.Width();
  65.     m_Button.SetWindowPos(NULL, rect.right, rect.top, 0, 0,
  66.                             SWP_NOZORDER | SWP_NOSIZE);
  67.  
  68.     // fill the rest of the window with the list box..
  69.     rect.right -= 4;        // leave a bit of space.
  70.     m_ListBox.MoveWindow(&rect);
  71.  
  72. }
  73.  
  74.  
  75. //-------------------------------------------------------------------
  76. int CMyListBoxBar::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  77. //-------------------------------------------------------------------
  78. {
  79.     if (CMRCSizeControlBar::OnCreate(lpCreateStruct) == -1)
  80.         return -1;
  81.  
  82.     CRect rect;
  83.     GetClientRect(&rect);
  84.     
  85.     // create a list box to fill the client area with. Use CreateEx to add the
  86.     // WS_EX_CLIENTEDGE style. 
  87.     if (!m_ListBox.CreateEx(WS_EX_CLIENTEDGE,
  88.                              _T("LISTBOX"),
  89.                              NULL,
  90.                              WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL
  91.                                      | LBS_HASSTRINGS | LBS_NOTIFY | LBS_NOINTEGRALHEIGHT, 
  92.                              rect.left,
  93.                              rect.top,
  94.                               rect.Width(),
  95.                             rect.Height(),
  96.                              GetSafeHwnd(),
  97.                              0,
  98.                              NULL))
  99.     {
  100.         TRACE("Failed to create list box\n");
  101.         return -1;
  102.     }
  103.     
  104.     m_ListBox.SetHorizontalExtent(200);
  105.     
  106.     // add some strings to the list box - makes it a bit more interesting
  107.     for (int i = 0; i < 10; i++)
  108.     {
  109.         char msg[100];
  110.         sprintf(msg, "Line %d", i);
  111.         m_ListBox.AddString(msg);
  112.     }
  113.  
  114.     CRect ButtonRect(0, 0, 32, 32);        // dimensions of the button
  115.     
  116.     if (!m_Button.Create(BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 
  117.                         ButtonRect, this, ID_PopupMessage))
  118.     {
  119.         TRACE("Failed to create push button\n");
  120.         return -1;
  121.     }    
  122.     m_Button.LoadBitmap(IDB_BITMAP1);
  123.     return 0;                    
  124. }
  125.  
  126.  
  127. void CMyListBoxBar::PopupMessage()
  128. // command handler for the bitmap button. The point of this is to illustrate that
  129. // unlike c
  130. {
  131.     int nSel = m_ListBox.GetCurSel();
  132.     CString strMsg;
  133.     if (nSel == -1)
  134.         strMsg == "Nothing in the list box is selected";
  135.     else
  136.         strMsg.Format("Listbox item %d was selected", nSel);
  137.     AfxMessageBox(strMsg);
  138. }
  139.  
  140. void CMyListBoxBar::OnRButtonUp(UINT nFlags, CPoint point) 
  141. {
  142.     // TODO: Add your message handler code here and/or call default
  143.     // disable docking.
  144.     CMRCSizeControlBar::OnRButtonUp(nFlags, point);
  145.  
  146.     /*if (m_bAllowDocking)
  147.     {
  148.         EnableDocking(NULL);    // disable docking.
  149.         CMRCMDIFrameWndSizeDock * pMain = (CMRCMDIFrameWndSizeDock *) AfxGetMainWnd();
  150.         pMain->FloatControlBar(this, CPoint(0,0));
  151.         m_bAllowDocking = FALSE;
  152.     }
  153.     else
  154.     {
  155.         EnableDocking(CBRS_ALIGN_ANY);
  156.         m_bAllowDocking = TRUE;
  157.     } */
  158.     
  159. }
  160.