Author: rharabien
Date: Wed Nov 30 12:21:27 2011
New Revision: 54547
URL: 
http://svn.reactos.org/svn/reactos?rev=54547&view=rev
Log:
[SHELL32] - Restore functionality of Start Menu from old shell32
Modified:
    trunk/reactos/dll/win32/shell32/shell32_main.cpp
    trunk/reactos/dll/win32/shell32/startmenu.cpp
    trunk/reactos/dll/win32/shell32/startmenu.h
Modified: trunk/reactos/dll/win32/shell32/shell32_main.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/shell32_…
==============================================================================
--- trunk/reactos/dll/win32/shell32/shell32_main.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/shell32_main.cpp [iso-8859-1] Wed Nov 30 12:21:27 2011
@@ -1287,7 +1287,7 @@
 OBJECT_ENTRY(CLSID_RecycleBin, CRecycleBin)
 OBJECT_ENTRY(CLSID_OpenWithMenu, COpenWithMenu)
 OBJECT_ENTRY(CLSID_NewMenu, CNewMenu)
-OBJECT_ENTRY(CLSID_StartMenu, CStartMenuCallback)
+OBJECT_ENTRY(CLSID_StartMenu, CStartMenu)
 OBJECT_ENTRY(CLSID_MenuBandSite, CMenuBandSite)
 END_OBJECT_MAP()
Modified: trunk/reactos/dll/win32/shell32/startmenu.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/startmen…
==============================================================================
--- trunk/reactos/dll/win32/shell32/startmenu.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/startmenu.cpp [iso-8859-1] Wed Nov 30 12:21:27 2011
@@ -22,148 +22,324 @@
 WINE_DEFAULT_DEBUG_CHANNEL(shell32start);
-CStartMenuCallback::CStartMenuCallback()
-{
-}
-
-CStartMenuCallback::~CStartMenuCallback()
-{
-}
-
-HRESULT STDMETHODCALLTYPE CStartMenuCallback::SetSite(IUnknown *pUnkSite)
-{
-    return E_NOTIMPL;
-}
-
-HRESULT STDMETHODCALLTYPE CStartMenuCallback::GetSite(REFIID riid, void **ppvSite)
-{
-    return E_NOTIMPL;
-}
-
-HRESULT STDMETHODCALLTYPE CStartMenuCallback::CallbackSM(LPSMDATA psmd, UINT uMsg, WPARAM
wParam, LPARAM lParam)
-{
+CStartMenu::CStartMenu()
+{
+    m_pBandSite = NULL;
+    m_pUnkSite = NULL;
+}
+
+CStartMenu::~CStartMenu()
+{
+}
+
+HRESULT STDMETHODCALLTYPE CStartMenu::ContextSensitiveHelp(BOOL fEnterMode)
+{
+    UNIMPLEMENTED;
+    return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CStartMenu::GetWindow(HWND *phwnd)
+{
+    UNIMPLEMENTED;
+    return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CStartMenu::GetClient(IUnknown **ppunkClient)
+{
+    TRACE("(%p, %p)\n", this, ppunkClient);
+
+    *ppunkClient = (IUnknown*)m_pBandSite;
+    (*ppunkClient)->AddRef();
+    return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE CStartMenu::OnPosRectChangeDB(LPRECT prc)
+{
+    UNIMPLEMENTED;
+    return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CStartMenu::SetClient(IUnknown *punkClient)
+{
+    UNIMPLEMENTED;
+    return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CStartMenu::OnSelect(DWORD dwSelectType)
+{
+    UNIMPLEMENTED;
+    return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CStartMenu::Popup(POINTL *ppt, RECTL *prcExclude, MP_POPUPFLAGS
dwFlags)
+{
+    UNIMPLEMENTED;
+    return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CStartMenu::SetSubMenu(IMenuPopup *pmp, BOOL fSet)
+{
+    UNIMPLEMENTED;
+    return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CStartMenu::SetSite(IUnknown *pUnkSite)
+{
+    TRACE("(%p, %p)\n", this, pUnkSite);
+
+    if (m_pUnkSite)
+        m_pUnkSite->Release();
+    m_pUnkSite = pUnkSite;
+    if (m_pUnkSite)
+        m_pUnkSite->AddRef();
+    return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE CStartMenu::GetSite(REFIID riid, void **ppvSite)
+{
+    TRACE("(%p, %s, %p)\n", this, debugstr_guid(&riid), ppvSite);
+
+    if (!m_pUnkSite)
+        return E_FAIL;
+
+    return m_pUnkSite->QueryInterface(riid, ppvSite);
+}
+
+HRESULT STDMETHODCALLTYPE CStartMenu::Initialize()
+{
+    HRESULT hr;
+    CComObject<CMenuBandSite> *pBandSiteObj;
+
+    TRACE("(%p)\n", this);
+
+    //pBandSiteObj = new CComObject<CMenuBandSite>();
+    ATLTRY (pBandSiteObj = new CComObject<CMenuBandSite>);
+    if (pBandSiteObj == NULL)
+        return E_OUTOFMEMORY;
+
+    hr = pBandSiteObj->QueryInterface(IID_IBandSite, (VOID**)&m_pBandSite);
+    if (FAILED(hr))
+        return NULL;
+
+    return m_pBandSite->AddBand((IMenuBand*)this);
+}
+
+HRESULT STDMETHODCALLTYPE CStartMenu::IsMenuMessage(MSG *pmsg)
+{
+    UNIMPLEMENTED;
+    return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CStartMenu::TranslateMenuMessage(MSG *pmsg, LRESULT *plRet)
+{
+    UNIMPLEMENTED;
     return E_NOTIMPL;
 }
 CMenuBandSite::CMenuBandSite()
 {
+    m_pObjects = NULL;
+    m_cObjects = 0;
 }
 CMenuBandSite::~CMenuBandSite()
 {
 }
+HRESULT STDMETHODCALLTYPE CMenuBandSite::AddBand(IUnknown *punk)
+{
+    IUnknown **pObjects;
+
+    TRACE("punk %p\n", punk);
+
+    if (!punk)
+        return E_FAIL;
+
+    pObjects = (IUnknown**)CoTaskMemAlloc(sizeof(IUnknown*) * (m_cObjects + 1));
+    if (!pObjects)
+        return E_FAIL;
+
+    RtlMoveMemory(pObjects, m_pObjects, sizeof(IUnknown*) * m_cObjects);
+
+    CoTaskMemFree(m_pObjects);
+
+    m_pObjects = pObjects;
+
+    m_pObjects[m_cObjects] = punk;
+    punk->AddRef();
+
+    m_cObjects++;
+
+    return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE CMenuBandSite::EnumBands(UINT uBand, DWORD *pdwBandID)
+{
+    ULONG Index, ObjectCount;
+
+    TRACE("uBand %uu pdwBandID %p\n", uBand, pdwBandID);
+
+    if (uBand == (UINT)-1)
+        return m_cObjects;
+
+    ObjectCount = 0;
+
+    for(Index = 0; Index < m_cObjects; Index++)
+    {
+        if (m_pObjects[Index] != NULL)
+        {
+            if (uBand == ObjectCount)
+            {
+                *pdwBandID = Index;
+                return S_OK;
+            }
+            ObjectCount++;
+        }
+    }
+    return E_FAIL;
+}
+
+HRESULT STDMETHODCALLTYPE CMenuBandSite::QueryBand(DWORD dwBandID, IDeskBand **ppstb,
DWORD *pdwState, LPWSTR pszName, int cchName)
+{
+    UNIMPLEMENTED;
+    return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CMenuBandSite::SetBandState(DWORD dwBandID, DWORD dwMask, DWORD
dwState)
+{
+    UNIMPLEMENTED;
+    return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CMenuBandSite::RemoveBand(DWORD dwBandID)
+{
+    TRACE("dwBandID %u\n", dwBandID);
+
+    if (m_cObjects <= dwBandID)
+        return E_FAIL;
+
+    if (m_pObjects[dwBandID])
+    {
+        m_pObjects[dwBandID]->Release();
+        m_pObjects[dwBandID] = NULL;
+    }
+
+    return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE CMenuBandSite::GetBandObject(DWORD dwBandID, REFIID riid, VOID
**ppv)
+{
+    TRACE("dwBandID %u riid %p ppv %p\n", dwBandID, riid, ppv);
+
+    if (m_cObjects <= dwBandID)
+        return E_FAIL;
+
+    if (m_pObjects[dwBandID])
+    {
+        return m_pObjects[dwBandID]->QueryInterface(riid, ppv);
+    }
+
+    return E_FAIL;
+}
+
+HRESULT STDMETHODCALLTYPE CMenuBandSite::SetBandSiteInfo(const BANDSITEINFO *pbsinfo)
+{
+    UNIMPLEMENTED;
+    return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CMenuBandSite::GetBandSiteInfo(BANDSITEINFO *pbsinfo)
+{
+    UNIMPLEMENTED;
+    return E_NOTIMPL;
+}
+
 HRESULT STDMETHODCALLTYPE CMenuBandSite::GetWindow(HWND *phwnd)
 {
+    UNIMPLEMENTED;
     return E_NOTIMPL;
 }
 HRESULT STDMETHODCALLTYPE CMenuBandSite::ContextSensitiveHelp(BOOL fEnterMode)
 {
+    UNIMPLEMENTED;
     return E_NOTIMPL;
 }
 HRESULT STDMETHODCALLTYPE CMenuBandSite::SetDeskBarSite(IUnknown *punkSite)
 {
+    UNIMPLEMENTED;
     return E_NOTIMPL;
 }
 HRESULT STDMETHODCALLTYPE CMenuBandSite::SetModeDBC(DWORD dwMode)
 {
+    UNIMPLEMENTED;
     return E_NOTIMPL;
 }
 HRESULT STDMETHODCALLTYPE CMenuBandSite::UIActivateDBC(DWORD dwState)
 {
+    UNIMPLEMENTED;
     return E_NOTIMPL;
 }
 HRESULT STDMETHODCALLTYPE CMenuBandSite::GetSize(DWORD dwWhich, LPRECT prc)
 {
+    UNIMPLEMENTED;
+    return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CMenuBandSite::QueryStatus(const GUID *pguidCmdGroup, ULONG
cCmds, OLECMD prgCmds[  ], OLECMDTEXT *pCmdText)
+{
+    UNIMPLEMENTED;
+    return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE CMenuBandSite::Exec(const GUID *pguidCmdGroup, DWORD nCmdID,
DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
+{
+    UNIMPLEMENTED;
     return E_NOTIMPL;
 }
 HRESULT STDMETHODCALLTYPE CMenuBandSite::UIActivateIO(BOOL fActivate, LPMSG lpMsg)
 {
+    UNIMPLEMENTED;
     return E_NOTIMPL;
 }
 HRESULT STDMETHODCALLTYPE CMenuBandSite::HasFocusIO()
 {
+    UNIMPLEMENTED;
     return E_NOTIMPL;
 }
 HRESULT STDMETHODCALLTYPE CMenuBandSite::TranslateAcceleratorIO(LPMSG lpMsg)
 {
+    UNIMPLEMENTED;
     return E_NOTIMPL;
 }
 HRESULT STDMETHODCALLTYPE CMenuBandSite::OnFocusChangeIS(IUnknown *punkObj, BOOL
fSetFocus)
 {
+    UNIMPLEMENTED;
     return E_NOTIMPL;
 }
 HRESULT STDMETHODCALLTYPE CMenuBandSite::OnWinEvent(HWND paramC, UINT param10, WPARAM
param14, LPARAM param18, LRESULT *param1C)
 {
+    UNIMPLEMENTED;
     return E_NOTIMPL;
 }
 HRESULT STDMETHODCALLTYPE CMenuBandSite::IsWindowOwner(HWND paramC)
 {
+    UNIMPLEMENTED;
     return E_NOTIMPL;
 }
 HRESULT STDMETHODCALLTYPE CMenuBandSite::QueryService(REFGUID guidService, REFIID riid,
void **ppvObject)
 {
-    return E_NOTIMPL;
-}
-
-HRESULT STDMETHODCALLTYPE CMenuBandSite::QueryStatus(const GUID *pguidCmdGroup, ULONG
cCmds, OLECMD prgCmds[  ], OLECMDTEXT *pCmdText)
-{
-    return E_NOTIMPL;
-}
-
-HRESULT STDMETHODCALLTYPE CMenuBandSite::Exec(const GUID *pguidCmdGroup, DWORD nCmdID,
DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
-{
-    return E_NOTIMPL;
-}
-
-HRESULT STDMETHODCALLTYPE CMenuBandSite::AddBand(IUnknown *punk)
-{
-    return E_NOTIMPL;
-}
-
-HRESULT STDMETHODCALLTYPE CMenuBandSite::EnumBands(UINT uBand, DWORD *pdwBandID)
-{
-    return E_NOTIMPL;
-}
-
-HRESULT STDMETHODCALLTYPE CMenuBandSite::QueryBand(DWORD dwBandID, IDeskBand **ppstb,
DWORD *pdwState, LPWSTR pszName, int cchName)
-{
-    return E_NOTIMPL;
-}
-
-HRESULT STDMETHODCALLTYPE CMenuBandSite::SetBandState(DWORD dwBandID, DWORD dwMask, DWORD
dwState)
-{
-    return E_NOTIMPL;
-}
-
-HRESULT STDMETHODCALLTYPE CMenuBandSite::RemoveBand(DWORD dwBandID)
-{
-    return E_NOTIMPL;
-}
-
-HRESULT STDMETHODCALLTYPE CMenuBandSite::GetBandObject(DWORD dwBandID, REFIID riid, VOID
**ppv)
-{
-    return E_NOTIMPL;
-}
-
-HRESULT STDMETHODCALLTYPE CMenuBandSite::SetBandSiteInfo(const BANDSITEINFO *pbsinfo)
-{
-    return E_NOTIMPL;
-}
-
-HRESULT STDMETHODCALLTYPE CMenuBandSite::GetBandSiteInfo(BANDSITEINFO *pbsinfo)
-{
-    return E_NOTIMPL;
-}
+    UNIMPLEMENTED;
+    return E_NOTIMPL;
+}
Modified: trunk/reactos/dll/win32/shell32/startmenu.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/startmen…
==============================================================================
--- trunk/reactos/dll/win32/shell32/startmenu.h [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/startmenu.h [iso-8859-1] Wed Nov 30 12:21:27 2011
@@ -21,51 +21,91 @@
 #ifndef _STARTMENU_H_
 #define _STARTMENU_H_
-class CStartMenuCallback :
-       public CComCoClass<CStartMenuCallback, &CLSID_NULL>,
+class CStartMenu :
+       public CComCoClass<CStartMenu, &CLSID_StartMenu>,
        public CComObjectRootEx<CComMultiThreadModelNoCS>,
+       public IMenuPopup,
        public IObjectWithSite,
-       public IShellMenuCallback
+       public IInitializeObject,
+       public IMenuBand // FIXME
 {
 private:
+    IBandSite *m_pBandSite;
+    IUnknown *m_pUnkSite;
+
 public:
-       CStartMenuCallback();
-       ~CStartMenuCallback();
+       CStartMenu();
+       ~CStartMenu();
+
+    // *** IOleWindow methods ***
+    virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode);
+    virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *phwnd);
+
+    // *** IDeskBar methods ***
+    virtual HRESULT STDMETHODCALLTYPE GetClient(IUnknown **ppunkClient);
+    virtual HRESULT STDMETHODCALLTYPE OnPosRectChangeDB(LPRECT prc);
+    virtual HRESULT STDMETHODCALLTYPE SetClient(IUnknown *punkClient);
+
+    // *** IMenuPopup methods ***
+    virtual HRESULT STDMETHODCALLTYPE OnSelect(DWORD dwSelectType);
+    virtual HRESULT STDMETHODCALLTYPE Popup(POINTL *ppt, RECTL *prcExclude, MP_POPUPFLAGS
dwFlags);
+    virtual HRESULT STDMETHODCALLTYPE SetSubMenu(IMenuPopup *pmp, BOOL fSet);
        // *** IObjectWithSite methods ***
        virtual HRESULT STDMETHODCALLTYPE SetSite(IUnknown *pUnkSite);
        virtual HRESULT STDMETHODCALLTYPE GetSite(REFIID riid, void **ppvSite);
-       // *** IShellMenuCallback methods ***
-       virtual HRESULT STDMETHODCALLTYPE CallbackSM(LPSMDATA psmd, UINT uMsg, WPARAM
wParam, LPARAM lParam);
+    // *** IInitializeObject methods ***
+    virtual HRESULT STDMETHODCALLTYPE Initialize();
+
+    // *** IMenuBand methods *** FIXME
+    virtual HRESULT STDMETHODCALLTYPE IsMenuMessage(MSG *pmsg);
+    virtual HRESULT STDMETHODCALLTYPE TranslateMenuMessage(MSG *pmsg, LRESULT *plRet);
-DECLARE_NO_REGISTRY()
-DECLARE_NOT_AGGREGATABLE(CStartMenuCallback)
+DECLARE_REGISTRY_RESOURCEID(IDR_STARTMENU)
+DECLARE_NOT_AGGREGATABLE(CStartMenu)
 DECLARE_PROTECT_FINAL_CONSTRUCT()
-BEGIN_COM_MAP(CStartMenuCallback)
+BEGIN_COM_MAP(CStartMenu)
+    COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleWindow)
+    COM_INTERFACE_ENTRY_IID(IID_IDeskBar, IDeskBar)
+    COM_INTERFACE_ENTRY_IID(IID_IMenuPopup, IMenuPopup)
        COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite, IObjectWithSite)
-       COM_INTERFACE_ENTRY_IID(IID_IShellMenuCallback, IShellMenuCallback)
+       COM_INTERFACE_ENTRY_IID(IID_IInitializeObject, IInitializeObject)
+       COM_INTERFACE_ENTRY_IID(IID_IMenuBand, IMenuBand) // FIXME: Win does not export it
 END_COM_MAP()
 };
 class CMenuBandSite :
        public CComCoClass<CMenuBandSite, &CLSID_MenuBandSite>,
        public CComObjectRootEx<CComMultiThreadModelNoCS>,
+       public IBandSite,
        public IDeskBarClient,
+       public IOleCommandTarget,
        public IInputObject,
        public IInputObjectSite,
        public IWinEventHandler,
-       public IServiceProvider,
-       public IOleCommandTarget,
-       public IBandSite
+       public IServiceProvider
 {
 private:
+    IUnknown **m_pObjects;
+    ULONG m_cObjects;
+
 public:
        CMenuBandSite();
        ~CMenuBandSite();
-
+
+       // *** IBandSite methods ***
+       virtual HRESULT STDMETHODCALLTYPE AddBand(IUnknown *punk);
+       virtual HRESULT STDMETHODCALLTYPE EnumBands(UINT uBand, DWORD *pdwBandID);
+       virtual HRESULT STDMETHODCALLTYPE QueryBand(DWORD dwBandID, IDeskBand **ppstb,
DWORD *pdwState, LPWSTR pszName, int cchName);
+       virtual HRESULT STDMETHODCALLTYPE SetBandState(DWORD dwBandID, DWORD dwMask, DWORD
dwState);
+       virtual HRESULT STDMETHODCALLTYPE RemoveBand(DWORD dwBandID);
+       virtual HRESULT STDMETHODCALLTYPE GetBandObject(DWORD dwBandID, REFIID riid, VOID
**ppv);
+       virtual HRESULT STDMETHODCALLTYPE SetBandSiteInfo(const BANDSITEINFO *pbsinfo);
+       virtual HRESULT STDMETHODCALLTYPE GetBandSiteInfo(BANDSITEINFO *pbsinfo);
+
        // *** IOleWindow methods ***
        virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *phwnd);
        virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode);
@@ -75,6 +115,10 @@
        virtual HRESULT STDMETHODCALLTYPE SetModeDBC(DWORD dwMode);
        virtual HRESULT STDMETHODCALLTYPE UIActivateDBC(DWORD dwState);
        virtual HRESULT STDMETHODCALLTYPE GetSize(DWORD dwWhich, LPRECT prc);
+
+    // *** IOleCommandTarget methods ***
+       virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *pguidCmdGroup, ULONG
cCmds, OLECMD prgCmds[  ], OLECMDTEXT *pCmdText);
+       virtual HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup, DWORD nCmdID,
DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut);
        // *** IInputObject methods ***
        virtual HRESULT STDMETHODCALLTYPE UIActivateIO(BOOL fActivate, LPMSG lpMsg);
@@ -91,34 +135,20 @@
        // *** IServiceProvider methods ***
        virtual HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid,
void **ppvObject);
-       // *** IOleCommandTarget methods ***
-       virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *pguidCmdGroup, ULONG
cCmds, OLECMD prgCmds[  ], OLECMDTEXT *pCmdText);
-       virtual HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup, DWORD nCmdID,
DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut);
-
-       // *** IBandSite methods ***
-       virtual HRESULT STDMETHODCALLTYPE AddBand(IUnknown *punk);
-       virtual HRESULT STDMETHODCALLTYPE EnumBands(UINT uBand, DWORD *pdwBandID);
-       virtual HRESULT STDMETHODCALLTYPE QueryBand(DWORD dwBandID, IDeskBand **ppstb,
DWORD *pdwState, LPWSTR pszName, int cchName);
-       virtual HRESULT STDMETHODCALLTYPE SetBandState(DWORD dwBandID, DWORD dwMask, DWORD
dwState);
-       virtual HRESULT STDMETHODCALLTYPE RemoveBand(DWORD dwBandID);
-       virtual HRESULT STDMETHODCALLTYPE GetBandObject(DWORD dwBandID, REFIID riid, VOID
**ppv);
-       virtual HRESULT STDMETHODCALLTYPE SetBandSiteInfo(const BANDSITEINFO *pbsinfo);
-       virtual HRESULT STDMETHODCALLTYPE GetBandSiteInfo(BANDSITEINFO *pbsinfo);
-
 DECLARE_REGISTRY_RESOURCEID(IDR_MENUBANDSITE)
 DECLARE_NOT_AGGREGATABLE(CMenuBandSite)
 DECLARE_PROTECT_FINAL_CONSTRUCT()
 BEGIN_COM_MAP(CMenuBandSite)
+    COM_INTERFACE_ENTRY_IID(IID_IBandSite, IBandSite)
        COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleWindow)
        COM_INTERFACE_ENTRY_IID(IID_IDeskBarClient, IDeskBarClient)
+       COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
        COM_INTERFACE_ENTRY_IID(IID_IInputObject, IInputObject)
        COM_INTERFACE_ENTRY_IID(IID_IInputObjectSite, IInputObjectSite)
        COM_INTERFACE_ENTRY_IID(IID_IWinEventHandler, IWinEventHandler)
        COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
-       COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
-       COM_INTERFACE_ENTRY_IID(IID_IBandSite, IBandSite)
 END_COM_MAP()
 };