4 * Copyright 2006 - 2007 Thomas Weidenmueller <w3seek@reactos.org>
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 UpdateStartMenu(IN OUT IMenuPopup
*pMenuPopup
,
25 IN HBITMAP hbmBanner OPTIONAL
,
28 CComPtr
<IBanneredBar
> pbb
;
31 hRet
= pMenuPopup
->QueryInterface(IID_PPV_ARG(IBanneredBar
, &pbb
));
34 hRet
= pbb
->SetBitmap(hbmBanner
);
36 /* Update the icon size */
37 hRet
= pbb
->SetIconSize(bSmallIcons
? BMICON_SMALL
: BMICON_LARGE
);
44 CreateStartMenu(IN ITrayWindow
*Tray
,
45 OUT IMenuBand
**ppMenuBand
,
46 IN HBITMAP hbmBanner OPTIONAL
,
50 CComPtr
<IMenuPopup
> pMp
;
51 CComPtr
<IUnknown
> pSms
;
52 CComPtr
<IMenuBand
> pMb
;
53 CComPtr
<IInitializeObject
> pIo
;
54 CComPtr
<IUnknown
> pUnk
;
55 CComPtr
<IBandSite
> pBs
;
58 hr
= CreateStartMenuSite(Tray
, IID_PPV_ARG(IUnknown
, &pSms
));
59 if (FAILED_UNEXPECTEDLY(hr
))
62 hr
= _CStartMenu_CreateInstance(IID_PPV_ARG(IMenuPopup
, &pMp
));
63 if (FAILED_UNEXPECTEDLY(hr
))
66 /* Set the menu site so we can handle messages */
67 hr
= IUnknown_SetSite(pMp
, pSms
);
68 if (FAILED_UNEXPECTEDLY(hr
))
71 /* Initialize the menu object */
72 hr
= pMp
->QueryInterface(IID_PPV_ARG(IInitializeObject
, &pIo
));
74 hr
= pIo
->Initialize();
78 /* Everything is initialized now. Let's get the IMenuBand interface. */
79 if (FAILED_UNEXPECTEDLY(hr
))
82 hr
= pMp
->GetClient(&pUnk
);
83 if (FAILED_UNEXPECTEDLY(hr
))
86 hr
= pUnk
->QueryInterface(IID_PPV_ARG(IBandSite
, &pBs
));
87 if (FAILED_UNEXPECTEDLY(hr
))
90 /* Finally we have the IBandSite interface, there's only one
91 band in it that apparently provides the IMenuBand interface */
92 hr
= pBs
->EnumBands(0, &dwBandId
);
93 if (FAILED_UNEXPECTEDLY(hr
))
96 hr
= pBs
->GetBandObject(dwBandId
, IID_PPV_ARG(IMenuBand
, &pMb
));
97 if (FAILED_UNEXPECTEDLY(hr
))
104 *ppMenuBand
= pMb
.Detach();