MainFrm.cpp
上传用户:xywutai
上传日期:2007-01-02
资源大小:72k
文件大小:6k
源码类别:

工具条

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "RebarMenu.h"
  5. #include "MainFrm.h"
  6. #include "ToolBarCtrlEx.h"
  7. #include "ReBarCtrl.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. #define MAX_MENU_SUBMENUS  20
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CMainFrame
  16. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  17. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  18. //{{AFX_MSG_MAP(CMainFrame)
  19. ON_WM_CREATE()
  20. ON_COMMAND(ID_VIEW_CUST, OnViewCust)
  21. //}}AFX_MSG_MAP
  22. ON_COMMAND_RANGE(1,MAX_MENU_SUBMENUS, OnMenu)
  23. // required handlers for adjusting toolbar-buttons
  24. ON_NOTIFY(TBN_QUERYDELETE, AFX_IDW_TOOLBAR, OnQueryDelete)
  25. ON_NOTIFY(TBN_QUERYINSERT, AFX_IDW_TOOLBAR, OnQueryInsert)
  26. END_MESSAGE_MAP()
  27. static UINT indicators[] =
  28. {
  29.    ID_SEPARATOR,           // status line indicator
  30.       ID_INDICATOR_CAPS,
  31.       ID_INDICATOR_NUM,
  32.       ID_INDICATOR_SCRL,
  33. };
  34. /////////////////////////////////////////////////////////////////////////////
  35. // CMainFrame construction/destruction
  36. CMainFrame::CMainFrame()
  37. {
  38.    // TODO: add member initialization code here
  39.    
  40. }
  41. CMainFrame::~CMainFrame()
  42. {
  43. }
  44. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  45. {
  46.    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  47.       return -1;
  48.    
  49.    //RebarMenu
  50.    //remove system menu
  51.    GetMenu()->DestroyMenu();
  52.    DrawMenuBar();
  53.    
  54.    if (!m_wndToolBar.CreateEx(this) ||
  55.       !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  56.    {
  57.       TRACE0("Failed to create toolbarn");
  58.       return -1;      // fail to create
  59.    }
  60.    
  61.    if (!m_wndMenuBar.CreateEx(this))
  62.    {
  63.       TRACE0("Failed to create toolbarn");
  64.       return -1;      // fail to create
  65.    }
  66.    
  67.    //RebarMenu
  68.    //set styles of toolbars
  69.    m_wndToolBar.ModifyStyle(0, 
  70.       TBSTYLE_FLAT | TBSTYLE_TRANSPARENT | TBSTYLE_ALTDRAG | CCS_ADJUSTABLE);
  71.    
  72.    m_wndMenuBar.GetToolBarCtrl().ModifyStyleEx(0,WS_EX_TOOLWINDOW);
  73.    m_wndMenuBar.ModifyStyle(0, 
  74.       TBSTYLE_TRANSPARENT | TBSTYLE_FLAT | TBSTYLE_ALTDRAG |
  75.       TBSTYLE_LIST | TBSTYLE_WRAPABLE | CCS_ADJUSTABLE );
  76.    
  77.    //set bitmap size to minimum 
  78.    m_wndMenuBar.SetSizes(CSize(16,20),CSize(1,1));
  79.    
  80.    //create toolbar buttons based on menu (IDR_MAINFRAME)
  81.    TBBUTTON button;
  82.    CString strItem;
  83.    
  84.    CMenu mTopMenu;
  85.    mTopMenu.LoadMenu(IDR_MAINFRAME);
  86.    
  87.    UINT iPos;
  88.    for (iPos = 0; iPos < mTopMenu.GetMenuItemCount(); iPos++)
  89.    {
  90.       mTopMenu.GetMenuString(iPos, strItem, MF_BYPOSITION);
  91.       button.idCommand = iPos + 1;
  92.       button.iBitmap = -1;
  93.       button.fsState = 0;
  94.       button.fsStyle = TBSTYLE_AUTOSIZE | TBSTYLE_BUTTON;
  95.       button.iString = -1;
  96.       m_wndMenuBar.GetToolBarCtrl().InsertButton(iPos,&button);
  97.       m_wndMenuBar.SetButtonText(iPos,strItem);
  98.    }
  99.    
  100.    //create rebar
  101.    if (!m_wndReBar.Create(this))
  102.    {
  103.       TRACE0("Failed to create rebarn");
  104.       return -1; // fail to create
  105.    }
  106.    m_wndReBar.ModifyStyleEx(0,WS_EX_TOOLWINDOW);
  107.    m_wndReBar.ModifyStyle(0,WS_BORDER);
  108.    
  109.    // add the toolbars to the rebar
  110.    m_wndReBar.AddBar(&m_wndMenuBar);
  111.    m_wndReBar.AddBar(&m_wndToolBar,NULL,NULL,RBBS_BREAK);
  112.    
  113.    if (!m_wndStatusBar.Create(this) ||
  114.       !m_wndStatusBar.SetIndicators(indicators,
  115.       sizeof(indicators)/sizeof(UINT)))
  116.    {
  117.       TRACE0("Failed to create status barn");
  118.       return -1;      // fail to create
  119.    }
  120.    
  121.    // setup min/max sizes and ideal sizes for pieces of the rebar
  122.    REBARBANDINFO rbbi;
  123.    
  124.    CRect rcToolBar;
  125.    
  126.    m_wndMenuBar.GetWindowRect(&rcToolBar);
  127.    
  128.    rbbi.cbSize = sizeof(rbbi);
  129.    rbbi.fMask = RBBIM_STYLE | RBBIM_CHILDSIZE | RBBIM_IDEALSIZE | RBBIM_SIZE;
  130.    rbbi.fStyle = RBBS_CHILDEDGE | RBBS_FIXEDBMP;
  131.    
  132.    rbbi.cxMinChild = rcToolBar.Width();
  133.    rbbi.cyMinChild = rcToolBar.Height();
  134.    rbbi.cx = rbbi.cxIdeal = rcToolBar.Width() * 10;
  135.    m_wndReBar.GetReBarCtrl().SetBandInfo(0, &rbbi);
  136.    rbbi.cxMinChild = 0;
  137.    
  138.    m_wndToolBar.GetWindowRect(&rcToolBar);
  139.    
  140.    rbbi.cbSize = sizeof(rbbi);
  141.    rbbi.cxMinChild = rcToolBar.Width();
  142.    rbbi.cyMinChild = rcToolBar.Height()+2;
  143.    rbbi.cx = rbbi.cxIdeal = rcToolBar.Width() * 10;
  144.    rbbi.cxMinChild = 0;
  145.    m_wndReBar.GetReBarCtrl().SetBandInfo(1, &rbbi);
  146.    
  147.    m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
  148.       CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
  149.    
  150.    return 0;
  151. }
  152. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  153. {
  154.    
  155.    return CFrameWnd::PreCreateWindow(cs);
  156. }
  157. // customized toolbar handlers
  158. void CMainFrame::OnQueryDelete(NMHDR* pHdr, LRESULT* pResult) {
  159.    TRACE0("OnQueryDeleten");
  160.    LPTBNOTIFY pN = LPTBNOTIFY(pHdr);
  161.    *pResult = TRUE; // allow deletion of a button
  162. }
  163. void CMainFrame::OnQueryInsert(NMHDR* pHdr, LRESULT* pResult) {
  164.    TRACE0("OnQueryInsertn");
  165.    LPTBNOTIFY pN = LPTBNOTIFY(pHdr);
  166.    *pResult = TRUE; // allow insertion of a button
  167. }
  168. /////////////////////////////////////////////////////////////////////////////
  169. // CMainFrame diagnostics
  170. #ifdef _DEBUG
  171. void CMainFrame::AssertValid() const
  172. {
  173.    CFrameWnd::AssertValid();
  174. }
  175. void CMainFrame::Dump(CDumpContext& dc) const
  176. {
  177.    CFrameWnd::Dump(dc);
  178. }
  179. #endif //_DEBUG
  180. /////////////////////////////////////////////////////////////////////////////
  181. // CMainFrame message handlers
  182. // shows customize dialog
  183. void CMainFrame::OnViewCust() 
  184. {
  185.    m_wndToolBar.GetToolBarCtrl().Customize();
  186. }
  187. // handler to menu buttons
  188. void CMainFrame::OnMenu(UINT nID) 
  189. {
  190.    CMenu m_mnuTopMenu;
  191.    CRect rWindow,rButton;
  192.    m_mnuTopMenu.LoadMenu(IDR_MAINFRAME);
  193.    
  194.    UINT iPos;
  195.    for (iPos = 0; iPos < m_mnuTopMenu.GetMenuItemCount(); iPos++)
  196.    {
  197.       if (iPos == nID-1)
  198.       {
  199.          m_wndMenuBar.GetWindowRect(&rWindow);
  200.          m_wndMenuBar.GetItemRect( iPos, &rButton);
  201.          rWindow.top += rButton.bottom;
  202.          rWindow.left += rButton.left;
  203.          m_wndMenuBar.GetToolBarCtrl().SetState(iPos+1,TBSTATE_PRESSED|TBSTATE_ENABLED);
  204.          // show popup menu
  205.          m_mnuTopMenu.GetSubMenu(iPos)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,rWindow.left,rWindow.top,this);
  206.          m_wndMenuBar.GetToolBarCtrl().SetState(iPos+1,TBSTATE_ENABLED);
  207.          break;
  208.       }
  209.    }
  210.    
  211. }