MENUBAR.H
上传用户:shgx688
上传日期:2009-12-27
资源大小:855k
文件大小:4k
源码类别:

SNMP编程

开发平台:

MultiPlatform

  1. ////////////////////////////////////////////////////////////////
  2. // Copyright 1998 Paul DiLascia
  3. // If this code works, it was written by Paul DiLascia.
  4. // If not, I don't know who wrote it.
  5. //
  6. #ifndef __MENUBAR_H
  7. #define __MENUBAR_H
  8. #include "subclass.h"
  9. //////////////////
  10. // CMenuBar uses this private class to intercept messages on behalf
  11. // of its owning frame, as well as the MDI client window. Conceptually,
  12. // these should be two different hooks, but I want to save code.
  13. //
  14. class CMenuBarFrameHook : public CSubclassWnd {
  15. protected:
  16.    friend class CMenuBar;
  17.    CMenuBar* m_pMenuBar;
  18.    CMenuBarFrameHook();
  19.    ~CMenuBarFrameHook();
  20.    BOOL Install(CMenuBar* pMenuBar, HWND hWndToHook);
  21.    virtual LRESULT WindowProc(UINT msg, WPARAM wp, LPARAM lp);
  22. };
  23. //////////////////
  24. // CMenuBar implements an Office 97-style menu bar. Use it the way you would
  25. // a COAMToolBar, only you need not call LoadToolbar. All you have to do is
  26. //
  27. // * Create the CMenuBar from your OnCreate or OnCreateBands handler.
  28. //
  29. // * Call LoadMenu to load a menu. This will set your frame's menu to NULL.
  30. //
  31. // * Implemenent your frame's PreTranslateMessage function, to call
  32. //   CMenuBar::TranslateFrameMessage. 
  33. //
  34. #include "OAMToolBar.h"
  35. class  CMenuBar : public COAMToolBar {
  36. public:
  37. BOOL  m_bAutoRemoveFrameMenu;  // set frame's menu to NULL
  38. CMenuBar();
  39. ~CMenuBar();
  40. // You must call this from your frame's PreTranslateMessage fn
  41. virtual BOOL TranslateFrameMessage(MSG* pMsg);
  42. HMENU LoadMenu(HMENU hmenu); // load menu
  43. HMENU LoadMenu(LPCSTR lpszMenuName); // ...from resource file
  44. HMENU LoadMenu(UINT nID) {
  45. return LoadMenu(MAKEINTRESOURCE(nID));
  46. }
  47. HMENU GetMenu() { return m_hmenu; } // get current menu
  48. enum TRACKINGSTATE { // menubar has three states:
  49. TRACK_NONE = 0,   // * normal, not tracking anything
  50. TRACK_BUTTON,     // * tracking buttons (F10/Alt mode)
  51. TRACK_POPUP       // * tracking popups
  52. };
  53. TRACKINGSTATE GetTrackingState(int& iPopup) {
  54. iPopup = m_iPopupTracking; return m_iTrackingState;
  55. }
  56. static BOOL bTRACE;  // set TRUE to see TRACE msgs
  57. protected:
  58. friend class CMenuBarFrameHook;
  59. CMenuBarFrameHook m_frameHook;  // hooks frame window messages
  60. CStringArray m_arStrings;  // array of menu item names
  61. HMENU m_hmenu;  // the menu
  62. // menu tracking stuff:
  63. int  m_iPopupTracking;  // which popup I'm tracking if any
  64. int  m_iNewPopup;  // next menu to track
  65. BOOL  m_bProcessRightArrow;  // process l/r arrow keys?
  66. BOOL  m_bProcessLeftArrow;  // ...
  67. BOOL  m_bEscapeWasPressed;  // user pressed escape to exit menu
  68. CPoint m_ptMouse;  // mouse location when tracking popup
  69. HMENU  m_hMenuTracking;  // current popup I'm tracking
  70. TRACKINGSTATE m_iTrackingState;  // current tracking state
  71. // helpers
  72. void  RecomputeToolbarSize();
  73. void RecomputeMenuLayout();
  74. void UpdateFont();
  75. int GetNextOrPrevButton(int iButton, BOOL bPrev);
  76. void SetTrackingState(TRACKINGSTATE iState, int iButton=-1);
  77. void TrackPopup(int iButton);
  78. void ToggleTrackButtonMode();
  79. void CancelMenuAndTrackNewOne(int iButton);
  80. void  OnMenuSelect(HMENU hmenu, UINT nItemID);
  81. CPoint ComputeMenuTrackPoint(const CRect& rcButn, TPMPARAMS& tpm);
  82. BOOL IsValidButton(int iButton) const
  83. { return 0 <= iButton && iButton < GetToolBarCtrl().GetButtonCount(); }
  84. virtual BOOL OnMenuInput(MSG& m);  // handle popup menu input
  85. // overrides
  86. virtual void OnBarStyleChange(DWORD dwOldStyle, DWORD dwNewStyle);
  87. int HitTest(CPoint p) const;
  88. // command/message handlers
  89. //{{AFX_MSG(CMenuBar)
  90. afx_msg int  OnCreate(LPCREATESTRUCT lpCreateStruct);
  91. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  92. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  93. afx_msg void OnSize(UINT nType, int cx, int cy);
  94. //}}AFX_MSG
  95. afx_msg void OnUpdateMenuButton(CCmdUI* pCmdUI);
  96. afx_msg LRESULT OnSetMenuNull(WPARAM wp, LPARAM lp);
  97. static LRESULT CALLBACK MenuInputFilter(int code, WPARAM wp, LPARAM lp);
  98. DECLARE_DYNAMIC(CMenuBar)
  99. DECLARE_MESSAGE_MAP()
  100. #ifdef _DEBUG
  101. virtual void AssertValid() const;
  102. virtual void Dump(CDumpContext& dc) const;
  103. #endif
  104. };
  105. #endif