home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 November / Chip_2003-11_cd1.bin / software / dave / dqsd.exe / src / DQSDTools / MenuBuilder.h < prev    next >
C/C++ Source or Header  |  2002-10-23  |  4KB  |  117 lines

  1. // MenuBuilder.h : Declaration of the CMenuBuilder
  2.  
  3. #ifndef __MENUBUILDER_H_
  4. #define __MENUBUILDER_H_
  5.  
  6. #include "resource.h"       // main symbols
  7.  
  8. /////////////////////////////////////////////////////////////////////////////
  9. // CMenuBuilder
  10. class ATL_NO_VTABLE CMenuBuilder : 
  11.     public CComObjectRootEx<CComSingleThreadModel>,
  12.     public CComCoClass<CMenuBuilder, &CLSID_MenuBuilder>,
  13.     public IObjectWithSiteImpl<CMenuBuilder>,
  14.     public ISupportErrorInfoImpl<&IID_IMenuBuilder>,
  15.     public IObjectSafetyImpl<CMenuBuilder, INTERFACESAFE_FOR_UNTRUSTED_CALLER>,
  16.     public IDispatchImpl<IMenuBuilder, &IID_IMenuBuilder, &LIBID_DQSDTOOLSLib>
  17. {
  18. public:
  19.     CMenuBuilder() 
  20.     : m_nMenuItem( 0 )
  21.     , m_nHorizontalAlignment( EHorizontalAlignment::RIGHT )
  22.     {
  23.         m_hMain = ::CreatePopupMenu();
  24.  
  25.         ATLTRACE("CMenuBuilder - created\n");
  26.         m_hTrackerWnd = NULL;
  27.         m_hTooltipWnd = NULL;
  28.     }
  29.  
  30.     virtual ~CMenuBuilder()
  31.     {
  32.         if(m_hTrackerWnd != NULL)
  33.         {
  34.             DestroyWindow(m_hTrackerWnd);
  35.         }
  36.         if(m_hTooltipWnd != NULL)
  37.         {
  38.             DestroyWindow(m_hTooltipWnd);
  39.         }
  40.  
  41.         ATLTRACE("CMenuBuilder - destroyed\n");
  42.         ATLTRACE("DQSDTools: Lock count %d\n", _Module.GetLockCount());
  43.     }
  44.  
  45. DECLARE_REGISTRY_RESOURCEID(IDR_MENUBUILDER)
  46.  
  47. DECLARE_PROTECT_FINAL_CONSTRUCT()
  48.  
  49. BEGIN_COM_MAP(CMenuBuilder)
  50.     COM_INTERFACE_ENTRY(IMenuBuilder)
  51.     COM_INTERFACE_ENTRY(IDispatch)
  52.     COM_INTERFACE_ENTRY(ISupportErrorInfo)
  53.     COM_INTERFACE_ENTRY(IObjectWithSite)
  54.     COM_INTERFACE_ENTRY(IObjectSafety)
  55. END_COM_MAP()
  56.  
  57. public:
  58.     STDMETHOD(SetSite)(IUnknown* pUnkSite);
  59.  
  60. // IMenuBuilder
  61. public:
  62.     STDMETHOD(InitialiseTooltips)(long displayTimeMultiplier);
  63.     STDMETHOD(get_HorizontalAlignment)(/*[out, retval]*/ short *pVal);
  64.     STDMETHOD(put_HorizontalAlignment)(/*[in]*/ short newVal);
  65.     STDMETHOD(AppendSubMenu)(/*[in]*/ BSTR bstrName, VARIANT* pvParentMenu, /*[out,retval]*/ long* phmenu);
  66.     STDMETHOD(AppendMenuItem)(/*[in]*/ BSTR bstrItem, /*[in]*/ BSTR bstrKey, /*[in]*/ BSTR bstrToolTip, /*[in,optional]*/ VARIANT* pvhMenu);
  67.     STDMETHOD(AppendSeparator)(/*[in,optional]*/ VARIANT* pvParentMenu);
  68.     STDMETHOD(Display)(LPDISPATCH pDispDocument, VARIANT* pbstrSelection);
  69.     STDMETHOD(InsertMenuItem)(/*[in]*/ BSTR bstrItem, /*[in]*/ BSTR bstrKey, /*[in]*/ BSTR bstrToolTip, /*[in]*/ UINT position, /*[in,optional]*/ VARIANT* pvhMenu );
  70.     STDMETHOD(InsertSeparator)(/*[in]*/ UINT position, /*[in,optional]*/ VARIANT* pvParentMenu);
  71.     STDMETHOD(InsertSubMenu)(/*[in]*/ BSTR bstrName, /*[in]*/ UINT position, /*[in,optional]*/ VARIANT* pvParentMenu, /*[out,retval]*/ long *phmenu);
  72.     STDMETHOD(GetMenuItemCount)(/*[in,optional]*/ VARIANT* pvParentMenu, /*[out,retval]*/ long *pCount);
  73.     STDMETHOD(FindSubMenu)(/*[in]*/ BSTR bstrName, /*[in,optional]*/ VARIANT* pvParentMenu, /*[out,retval]*/ long *phmenu);
  74.     STDMETHOD(FindMenuItem)(/*[in]*/ BSTR bstrName, /*[in,optional]*/ VARIANT* pvParentMenu, /*[out,retval]*/ long *pPosition);
  75.     STDMETHOD(GetMenuString)(/*[in]*/ UINT position, /*[in,optional]*/ VARIANT* pvParentMenu, /*[out, retval]*/ BSTR* pbstrResult);
  76.     STDMETHOD(GetMenuItemID)(/*[in]*/ UINT position, /*[in,optional]*/ VARIANT* pvParentMenu, /*[out, retval]*/ long *nID);
  77.     STDMETHOD(EnableMenuItem)(/*[in]*/ UINT position, /*[in,optional]*/ VARIANT* pvParentMenu);
  78.     STDMETHOD(DisableMenuItem)(/*[in]*/ UINT position, /*[in,optional]*/ VARIANT* pvParentMenu);
  79.  
  80. // Implementation
  81. protected:
  82.     static LPCTSTR    DQSD_REG_KEY;
  83.     static LPCTSTR    DQSD_SEC_KEY;
  84.     HMENU            m_hMain;
  85.     int                m_nMenuItem;
  86.     std::map< int, std::string > m_mapKeys;
  87.     std::map< int, std::string > m_toolTips;
  88.     
  89.     UINT            m_nHorizontalAlignment;
  90.  
  91.     CComPtr<IHTMLWindow2> m_spIHTMLWindow2;
  92.     CComPtr<IHTMLDocument2> m_spIHTMLDoc2;
  93.  
  94.     UINT getHorizontalPosition();
  95.  
  96.     enum EHorizontalAlignment
  97.     {
  98.         CENTER,
  99.         LEFT,
  100.         RIGHT,
  101.     };
  102.  
  103. protected:
  104.     static LRESULT CALLBACK TrackerWndProc(
  105.     HWND hwnd,      // handle to window
  106.     UINT uMsg,      // message identifier
  107.     WPARAM wParam,  // first message parameter
  108.     LPARAM lParam   // second message parameter
  109.     );
  110.  
  111.     HWND            m_hTrackerWnd;
  112.     static HWND        m_hTooltipWnd;
  113.  
  114. };
  115.  
  116. #endif //__MENUBUILDER_H_
  117.