ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

startmenu.cpp
Go to the documentation of this file.
00001 /*
00002  *    Start menu object
00003  *
00004  *    Copyright 2009 Andrew Hill
00005  *
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the GNU Lesser General Public
00008  * License as published by the Free Software Foundation; either
00009  * version 2.1 of the License, or (at your option) any later version.
00010  *
00011  * This library is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014  * Lesser General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU Lesser General Public
00017  * License along with this library; if not, write to the Free Software
00018  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
00019  */
00020 
00021 #include <precomp.h>
00022 
00023 WINE_DEFAULT_DEBUG_CHANNEL(shell32start);
00024 
00025 CStartMenu::CStartMenu()
00026 {
00027     m_pBandSite = NULL;
00028     m_pUnkSite = NULL;
00029 }
00030 
00031 CStartMenu::~CStartMenu()
00032 {
00033 }
00034 
00035 HRESULT STDMETHODCALLTYPE CStartMenu::ContextSensitiveHelp(BOOL fEnterMode)
00036 {
00037     UNIMPLEMENTED;
00038     return E_NOTIMPL;
00039 }
00040 
00041 HRESULT STDMETHODCALLTYPE CStartMenu::GetWindow(HWND *phwnd)
00042 {
00043     UNIMPLEMENTED;
00044     return E_NOTIMPL;
00045 }
00046 
00047 HRESULT STDMETHODCALLTYPE CStartMenu::GetClient(IUnknown **ppunkClient)
00048 {
00049     TRACE("(%p, %p)\n", this, ppunkClient);
00050 
00051     *ppunkClient = (IUnknown*)m_pBandSite;
00052     (*ppunkClient)->AddRef();
00053     return S_OK;
00054 }
00055 
00056 HRESULT STDMETHODCALLTYPE CStartMenu::OnPosRectChangeDB(LPRECT prc)
00057 {
00058     UNIMPLEMENTED;
00059     return E_NOTIMPL;
00060 }
00061 
00062 HRESULT STDMETHODCALLTYPE CStartMenu::SetClient(IUnknown *punkClient)
00063 {
00064     UNIMPLEMENTED;
00065     return E_NOTIMPL;
00066 }
00067 
00068 HRESULT STDMETHODCALLTYPE CStartMenu::OnSelect(DWORD dwSelectType)
00069 {
00070     UNIMPLEMENTED;
00071     return E_NOTIMPL;
00072 }
00073 
00074 HRESULT STDMETHODCALLTYPE CStartMenu::Popup(POINTL *ppt, RECTL *prcExclude, MP_POPUPFLAGS dwFlags)
00075 {
00076     UNIMPLEMENTED;
00077     return E_NOTIMPL;
00078 }
00079 
00080 HRESULT STDMETHODCALLTYPE CStartMenu::SetSubMenu(IMenuPopup *pmp, BOOL fSet)
00081 {
00082     UNIMPLEMENTED;
00083     return E_NOTIMPL;
00084 }
00085 
00086 HRESULT STDMETHODCALLTYPE CStartMenu::SetSite(IUnknown *pUnkSite)
00087 {
00088     TRACE("(%p, %p)\n", this, pUnkSite);
00089 
00090     if (m_pUnkSite)
00091         m_pUnkSite->Release();
00092     m_pUnkSite = pUnkSite;
00093     if (m_pUnkSite)
00094         m_pUnkSite->AddRef();
00095     return S_OK;
00096 }
00097 
00098 HRESULT STDMETHODCALLTYPE CStartMenu::GetSite(REFIID riid, void **ppvSite)
00099 {
00100     TRACE("(%p, %s, %p)\n", this, debugstr_guid(&riid), ppvSite);
00101 
00102     if (!m_pUnkSite)
00103         return E_FAIL;
00104 
00105     return m_pUnkSite->QueryInterface(riid, ppvSite);
00106 }
00107 
00108 HRESULT STDMETHODCALLTYPE CStartMenu::Initialize()
00109 {
00110     HRESULT hr;
00111     CComObject<CMenuBandSite> *pBandSiteObj;
00112     
00113     TRACE("(%p)\n", this);
00114 
00115     //pBandSiteObj = new CComObject<CMenuBandSite>();
00116     ATLTRY (pBandSiteObj = new CComObject<CMenuBandSite>);
00117     if (pBandSiteObj == NULL)
00118         return E_OUTOFMEMORY;
00119 
00120     hr = pBandSiteObj->QueryInterface(IID_IBandSite, (VOID**)&m_pBandSite);
00121     if (FAILED(hr))
00122         return NULL;
00123 
00124     return m_pBandSite->AddBand((IMenuBand*)this);
00125 }
00126 
00127 HRESULT STDMETHODCALLTYPE CStartMenu::IsMenuMessage(MSG *pmsg)
00128 {
00129     UNIMPLEMENTED;
00130     return E_NOTIMPL;
00131 }
00132 
00133 HRESULT STDMETHODCALLTYPE CStartMenu::TranslateMenuMessage(MSG *pmsg, LRESULT *plRet)
00134 {
00135     UNIMPLEMENTED;
00136     return E_NOTIMPL;
00137 }
00138 
00139 CMenuBandSite::CMenuBandSite()
00140 {
00141     m_pObjects = NULL;
00142     m_cObjects = 0;
00143 }
00144 
00145 CMenuBandSite::~CMenuBandSite()
00146 {
00147 }
00148 
00149 HRESULT STDMETHODCALLTYPE CMenuBandSite::AddBand(IUnknown *punk)
00150 {
00151     IUnknown **pObjects;
00152 
00153     TRACE("punk %p\n", punk);
00154 
00155     if (!punk)
00156         return E_FAIL;
00157 
00158     pObjects = (IUnknown**)CoTaskMemAlloc(sizeof(IUnknown*) * (m_cObjects + 1));
00159     if (!pObjects)
00160         return E_FAIL;
00161 
00162     RtlMoveMemory(pObjects, m_pObjects, sizeof(IUnknown*) * m_cObjects);
00163 
00164     CoTaskMemFree(m_pObjects);
00165 
00166     m_pObjects = pObjects;
00167 
00168     m_pObjects[m_cObjects] = punk;
00169     punk->AddRef();
00170 
00171     m_cObjects++;
00172 
00173     return S_OK;
00174 }
00175 
00176 HRESULT STDMETHODCALLTYPE CMenuBandSite::EnumBands(UINT uBand, DWORD *pdwBandID)
00177 {
00178     ULONG Index, ObjectCount;
00179 
00180     TRACE("uBand %uu pdwBandID %p\n", uBand, pdwBandID);
00181 
00182     if (uBand == (UINT)-1)
00183         return m_cObjects;
00184 
00185     ObjectCount = 0;
00186 
00187     for(Index = 0; Index < m_cObjects; Index++)
00188     {
00189         if (m_pObjects[Index] != NULL)
00190         {
00191             if (uBand == ObjectCount)
00192             {
00193                 *pdwBandID = Index;
00194                 return S_OK;
00195             }
00196             ObjectCount++;
00197         }
00198     }
00199     return E_FAIL;
00200 }
00201 
00202 HRESULT STDMETHODCALLTYPE CMenuBandSite::QueryBand(DWORD dwBandID, IDeskBand **ppstb, DWORD *pdwState, LPWSTR pszName, int cchName)
00203 {
00204     UNIMPLEMENTED;
00205     return E_NOTIMPL;
00206 }
00207 
00208 HRESULT STDMETHODCALLTYPE CMenuBandSite::SetBandState(DWORD dwBandID, DWORD dwMask, DWORD dwState)
00209 {
00210     UNIMPLEMENTED;
00211     return E_NOTIMPL;
00212 }
00213 
00214 HRESULT STDMETHODCALLTYPE CMenuBandSite::RemoveBand(DWORD dwBandID)
00215 {
00216     TRACE("dwBandID %u\n", dwBandID);
00217 
00218     if (m_cObjects <= dwBandID)
00219         return E_FAIL;
00220 
00221     if (m_pObjects[dwBandID])
00222     {
00223         m_pObjects[dwBandID]->Release();
00224         m_pObjects[dwBandID] = NULL;
00225     }
00226 
00227     return S_OK;
00228 }
00229 
00230 HRESULT STDMETHODCALLTYPE CMenuBandSite::GetBandObject(DWORD dwBandID, REFIID riid, VOID **ppv)
00231 {
00232     TRACE("dwBandID %u riid %p ppv %p\n", dwBandID, riid, ppv);
00233 
00234     if (m_cObjects <= dwBandID)
00235         return E_FAIL;
00236 
00237     if (m_pObjects[dwBandID])
00238     {
00239         return m_pObjects[dwBandID]->QueryInterface(riid, ppv);
00240     }
00241 
00242     return E_FAIL;
00243 }
00244 
00245 HRESULT STDMETHODCALLTYPE CMenuBandSite::SetBandSiteInfo(const BANDSITEINFO *pbsinfo)
00246 {
00247     UNIMPLEMENTED;
00248     return E_NOTIMPL;
00249 }
00250 
00251 HRESULT STDMETHODCALLTYPE CMenuBandSite::GetBandSiteInfo(BANDSITEINFO *pbsinfo)
00252 {
00253     UNIMPLEMENTED;
00254     return E_NOTIMPL;
00255 }
00256 
00257 HRESULT STDMETHODCALLTYPE CMenuBandSite::GetWindow(HWND *phwnd)
00258 {
00259     UNIMPLEMENTED;
00260     return E_NOTIMPL;
00261 }
00262 
00263 HRESULT STDMETHODCALLTYPE CMenuBandSite::ContextSensitiveHelp(BOOL fEnterMode)
00264 {
00265     UNIMPLEMENTED;
00266     return E_NOTIMPL;
00267 }
00268 
00269 HRESULT STDMETHODCALLTYPE CMenuBandSite::SetDeskBarSite(IUnknown *punkSite)
00270 {
00271     UNIMPLEMENTED;
00272     return E_NOTIMPL;
00273 }
00274 
00275 HRESULT STDMETHODCALLTYPE CMenuBandSite::SetModeDBC(DWORD dwMode)
00276 {
00277     UNIMPLEMENTED;
00278     return E_NOTIMPL;
00279 }
00280 
00281 HRESULT STDMETHODCALLTYPE CMenuBandSite::UIActivateDBC(DWORD dwState)
00282 {
00283     UNIMPLEMENTED;
00284     return E_NOTIMPL;
00285 }
00286 
00287 HRESULT STDMETHODCALLTYPE CMenuBandSite::GetSize(DWORD dwWhich, LPRECT prc)
00288 {
00289     UNIMPLEMENTED;
00290     return E_NOTIMPL;
00291 }
00292 
00293 HRESULT STDMETHODCALLTYPE CMenuBandSite::QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[  ], OLECMDTEXT *pCmdText)
00294 {
00295     UNIMPLEMENTED;
00296     return E_NOTIMPL;
00297 }
00298 
00299 HRESULT STDMETHODCALLTYPE CMenuBandSite::Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
00300 {
00301     UNIMPLEMENTED;
00302     return E_NOTIMPL;
00303 }
00304 
00305 HRESULT STDMETHODCALLTYPE CMenuBandSite::UIActivateIO(BOOL fActivate, LPMSG lpMsg)
00306 {
00307     UNIMPLEMENTED;
00308     return E_NOTIMPL;
00309 }
00310 
00311 HRESULT STDMETHODCALLTYPE CMenuBandSite::HasFocusIO()
00312 {
00313     UNIMPLEMENTED;
00314     return E_NOTIMPL;
00315 }
00316 
00317 HRESULT STDMETHODCALLTYPE CMenuBandSite::TranslateAcceleratorIO(LPMSG lpMsg)
00318 {
00319     UNIMPLEMENTED;
00320     return E_NOTIMPL;
00321 }
00322 
00323 HRESULT STDMETHODCALLTYPE CMenuBandSite::OnFocusChangeIS(IUnknown *punkObj, BOOL fSetFocus)
00324 {
00325     UNIMPLEMENTED;
00326     return E_NOTIMPL;
00327 }
00328 
00329 HRESULT STDMETHODCALLTYPE CMenuBandSite::OnWinEvent(HWND paramC, UINT param10, WPARAM param14, LPARAM param18, LRESULT *param1C)
00330 {
00331     UNIMPLEMENTED;
00332     return E_NOTIMPL;
00333 }
00334 
00335 HRESULT STDMETHODCALLTYPE CMenuBandSite::IsWindowOwner(HWND paramC)
00336 {
00337     UNIMPLEMENTED;
00338     return E_NOTIMPL;
00339 }
00340 
00341 HRESULT STDMETHODCALLTYPE CMenuBandSite::QueryService(REFGUID guidService, REFIID riid, void **ppvObject)
00342 {
00343     UNIMPLEMENTED;
00344     return E_NOTIMPL;
00345 }

Generated on Sun May 27 2012 04:18:38 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.