MainFrm.cpp
上传用户:sdpcwz
上传日期:2009-12-14
资源大小:1237k
文件大小:3k
源码类别:

书籍源码

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "TBarDropButton.h"
  5. #include "MainFrm.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CMainFrame
  13. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  14. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  15. //{{AFX_MSG_MAP(CMainFrame)
  16. // NOTE - the ClassWizard will add and remove mapping macros here.
  17. //    DO NOT EDIT what you see in these blocks of generated code !
  18. ON_WM_CREATE()
  19. ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnToolbarDropDown)
  20. //}}AFX_MSG_MAP
  21. END_MESSAGE_MAP()
  22. static UINT indicators[] =
  23. {
  24. ID_SEPARATOR,           // status line indicator
  25. ID_INDICATOR_CAPS,
  26. ID_INDICATOR_NUM,
  27. ID_INDICATOR_SCRL,
  28. };
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CMainFrame construction/destruction
  31. CMainFrame::CMainFrame()
  32. {
  33. // TODO: add member initialization code here
  34. }
  35. CMainFrame::~CMainFrame()
  36. {
  37. }
  38. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  39. {
  40. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  41. return -1;
  42. if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  43. | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  44. !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  45. {
  46. TRACE0("Failed to create toolbarn");
  47. return -1;      // fail to create
  48. }
  49. if (!m_wndStatusBar.Create(this) ||
  50. !m_wndStatusBar.SetIndicators(indicators,
  51.   sizeof(indicators)/sizeof(UINT)))
  52. {
  53. TRACE0("Failed to create status barn");
  54. return -1;      // fail to create
  55. }
  56. // TODO: Delete these three lines if you don't want the toolbar to
  57. //  be dockable
  58. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  59. EnableDocking(CBRS_ALIGN_ANY);
  60. DockControlBar(&m_wndToolBar);
  61. // Set the drop arrow.
  62. m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
  63. DWORD dwStyle = m_wndToolBar.GetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN));
  64. dwStyle |= TBSTYLE_DROPDOWN;
  65. m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN), dwStyle);
  66. return 0;
  67. }
  68. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  69. {
  70. if( !CFrameWnd::PreCreateWindow(cs) )
  71. return FALSE;
  72. // TODO: Modify the Window class or styles here by modifying
  73. //  the CREATESTRUCT cs
  74. return TRUE;
  75. }
  76. /////////////////////////////////////////////////////////////////////////////
  77. // CMainFrame diagnostics
  78. #ifdef _DEBUG
  79. void CMainFrame::AssertValid() const
  80. {
  81. CFrameWnd::AssertValid();
  82. }
  83. void CMainFrame::Dump(CDumpContext& dc) const
  84. {
  85. CFrameWnd::Dump(dc);
  86. }
  87. #endif //_DEBUG
  88. /////////////////////////////////////////////////////////////////////////////
  89. // CMainFrame message handlers
  90. void CMainFrame::OnToolbarDropDown(NMTOOLBAR* pnmtb, LRESULT *plr)
  91. {
  92. CWnd *pWnd;
  93. UINT nID;
  94. //根据ID
  95. switch (pnmtb->iItem)
  96. {
  97. case ID_FILE_OPEN:
  98. pWnd = &m_wndToolBar;
  99. nID  = IDR_MENU1;
  100. break;
  101. default:
  102. return;
  103. }
  104. //加载相应的菜单显示
  105. CMenu menu;
  106. menu.LoadMenu(nID);
  107. CMenu* pPopup = menu.GetSubMenu(0);
  108. ASSERT(pPopup);
  109. CRect rc;
  110. pWnd->SendMessage(TB_GETRECT, pnmtb->iItem, (LPARAM)&rc);
  111. pWnd->ClientToScreen(&rc);
  112. pPopup->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,
  113. rc.left, rc.bottom, this, &rc);
  114. }