mirror of
https://github.com/reactos/reactos.git
synced 2024-07-05 04:06:22 +00:00
[RSHELL]
* CMenuBand: Implement PopupItem for static menus. * CMenuDeskBar: Initialize m_Banner. * CStartMenu: Create CSubMenu_Constructor function that creates submenus (needs a better name/location). * Misc. code style changes. CORE-7881 svn path=/branches/shell-experiments/; revision=62228
This commit is contained in:
parent
d28d1bb1df
commit
3aaf437172
|
@ -44,7 +44,7 @@ public:
|
||||||
HRESULT GetWindow(HWND *phwnd);
|
HRESULT GetWindow(HWND *phwnd);
|
||||||
HRESULT ShowWindow(BOOL fShow);
|
HRESULT ShowWindow(BOOL fShow);
|
||||||
HRESULT Close();
|
HRESULT Close();
|
||||||
|
|
||||||
BOOL IsWindowOwner(HWND hwnd) { return m_hwnd && m_hwnd == hwnd; }
|
BOOL IsWindowOwner(HWND hwnd) { return m_hwnd && m_hwnd == hwnd; }
|
||||||
|
|
||||||
virtual HRESULT FillToolbar() = 0;
|
virtual HRESULT FillToolbar() = 0;
|
||||||
|
@ -897,7 +897,7 @@ HRESULT CMenuToolbarBase::CreateToolbar(HWND hwndParent, DWORD dwFlags)
|
||||||
}
|
}
|
||||||
|
|
||||||
SetWindowLongPtr(m_hwnd, GWLP_USERDATA, (LONG_PTR)this);
|
SetWindowLongPtr(m_hwnd, GWLP_USERDATA, (LONG_PTR)this);
|
||||||
m_SubclassOld = (WNDPROC)SetWindowLongPtr(m_hwnd, GWLP_WNDPROC, (LONG_PTR)CMenuToolbarBase::s_SubclassProc);
|
m_SubclassOld = (WNDPROC) SetWindowLongPtr(m_hwnd, GWLP_WNDPROC, (LONG_PTR) CMenuToolbarBase::s_SubclassProc);
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
@ -1030,7 +1030,7 @@ HRESULT CMenuStaticToolbar::FillToolbar()
|
||||||
tbb.fsStyle |= BTNS_WHOLEDROPDOWN;
|
tbb.fsStyle |= BTNS_WHOLEDROPDOWN;
|
||||||
tbb.iString = (INT_PTR) MenuString;
|
tbb.iString = (INT_PTR) MenuString;
|
||||||
tbb.idCommand = info.wID;
|
tbb.idCommand = info.wID;
|
||||||
|
|
||||||
SMINFO sminfo;
|
SMINFO sminfo;
|
||||||
if (info.wID >= 0 && SUCCEEDED(m_menuBand->CallCBWithId(info.wID, SMC_GETINFO, 0, (LPARAM) &sminfo)))
|
if (info.wID >= 0 && SUCCEEDED(m_menuBand->CallCBWithId(info.wID, SMC_GETINFO, 0, (LPARAM) &sminfo)))
|
||||||
{
|
{
|
||||||
|
@ -1067,10 +1067,27 @@ HRESULT CMenuStaticToolbar::PopupItem(UINT uItem)
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
if (!SendMessage(m_hwnd, TB_GETITEMRECT, index, (LPARAM) &rc))
|
if (!SendMessage(m_hwnd, TB_GETITEMRECT, index, (LPARAM) &rc))
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
int px = rc.right;
|
|
||||||
int py = rc.bottom;
|
|
||||||
|
|
||||||
// TODO: Create popup CMenuDeskBar
|
POINT a = { rc.left, rc.top };
|
||||||
|
POINT b = { rc.right, rc.bottom };
|
||||||
|
|
||||||
|
ClientToScreen(m_hwnd, &a);
|
||||||
|
ClientToScreen(m_hwnd, &b);
|
||||||
|
|
||||||
|
POINTL pt = { b.x, b.y };
|
||||||
|
RECTL rcl = { a.x, a.y, b.x, b.y }; // maybe-TODO: fetch client area of deskbar?
|
||||||
|
|
||||||
|
CComPtr<IShellMenu> shellMenu;
|
||||||
|
HRESULT hr = m_menuBand->CallCBWithId(uItem, SMC_GETOBJECT, (WPARAM) &IID_IShellMenu, (LPARAM) &shellMenu);
|
||||||
|
if (FAILED(hr))
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
CComPtr<IMenuPopup> popup;
|
||||||
|
hr = CSubMenu_Constructor(shellMenu, IID_PPV_ARG(IMenuPopup, &popup));
|
||||||
|
if (FAILED(hr))
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
popup->Popup(&pt, &rcl, MPPF_TOP | MPPF_RIGHT);
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
@ -1179,7 +1196,7 @@ HRESULT CMenuSFToolbar::GetShellFolder(DWORD *pdwFlags, LPITEMIDLIST *ppidl, REF
|
||||||
}
|
}
|
||||||
HRESULT CMenuSFToolbar::OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResult)
|
HRESULT CMenuSFToolbar::OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResult)
|
||||||
{
|
{
|
||||||
// return m_menuBand->CallCBWithPidl(GetPidlFromId(wParam), SMC_SFEXEC, 0, 0);
|
// TODO: return m_menuBand->CallCBWithPidl(GetPidlFromId(wParam), SMC_SFEXEC, 0, 0);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1951,5 +1968,4 @@ HRESULT CMenuBand::_CallCB(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
smData.psf->Release();
|
smData.psf->Release();
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -446,7 +446,8 @@ CMenuDeskBar::CMenuDeskBar() :
|
||||||
m_Vertical(true),
|
m_Vertical(true),
|
||||||
m_Visible(false),
|
m_Visible(false),
|
||||||
m_NeededSize(200),
|
m_NeededSize(200),
|
||||||
m_Tracking(false)
|
m_Tracking(false),
|
||||||
|
m_Banner(NULL)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -125,10 +125,14 @@ private:
|
||||||
case IDM_DOCUMENTS: csidl = CSIDL_RECENT; break;
|
case IDM_DOCUMENTS: csidl = CSIDL_RECENT; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
hr = CoCreateInstance(CLSID_MenuBand,
|
hr = CoCreateInstance(CLSID_MenuBand,
|
||||||
NULL,
|
NULL,
|
||||||
CLSCTX_INPROC_SERVER,
|
CLSCTX_INPROC_SERVER,
|
||||||
IID_PPV_ARG(IShellMenu,&pShellMenu));
|
IID_PPV_ARG(IShellMenu, &pShellMenu));
|
||||||
|
#else
|
||||||
|
hr = CMenuBand_Constructor(IID_PPV_ARG(IShellMenu, &pShellMenu));
|
||||||
|
#endif
|
||||||
|
|
||||||
hr = pShellMenu->Initialize(this, 0, ANCESTORDEFAULT, SMINIT_VERTICAL);
|
hr = pShellMenu->Initialize(this, 0, ANCESTORDEFAULT, SMINIT_VERTICAL);
|
||||||
|
|
||||||
|
@ -252,7 +256,6 @@ CStartMenu_Constructor(
|
||||||
IShellMenu* pShellMenu;
|
IShellMenu* pShellMenu;
|
||||||
IBandSite* pBandSite;
|
IBandSite* pBandSite;
|
||||||
IDeskBar* pDeskBar;
|
IDeskBar* pDeskBar;
|
||||||
IShellMenuCallback* callback;
|
|
||||||
LPITEMIDLIST pidlStartMenu;
|
LPITEMIDLIST pidlStartMenu;
|
||||||
|
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
@ -268,7 +271,7 @@ CStartMenu_Constructor(
|
||||||
hr = CMenuBand_Constructor(IID_PPV_ARG(IShellMenu, &pShellMenu));
|
hr = CMenuBand_Constructor(IID_PPV_ARG(IShellMenu, &pShellMenu));
|
||||||
#endif
|
#endif
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return NULL;
|
return hr;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
hr = CoCreateInstance(CLSID_MenuBandSite,
|
hr = CoCreateInstance(CLSID_MenuBandSite,
|
||||||
|
@ -279,7 +282,7 @@ CStartMenu_Constructor(
|
||||||
hr = CMenuSite_Constructor(IID_PPV_ARG(IBandSite, &pBandSite));
|
hr = CMenuSite_Constructor(IID_PPV_ARG(IBandSite, &pBandSite));
|
||||||
#endif
|
#endif
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return NULL;
|
return hr;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
hr = CoCreateInstance(CLSID_MenuDeskBar,
|
hr = CoCreateInstance(CLSID_MenuDeskBar,
|
||||||
|
@ -290,23 +293,18 @@ CStartMenu_Constructor(
|
||||||
hr = CMenuDeskBar_Constructor(IID_PPV_ARG(IDeskBar, &pDeskBar));
|
hr = CMenuDeskBar_Constructor(IID_PPV_ARG(IDeskBar, &pDeskBar));
|
||||||
#endif
|
#endif
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return NULL;
|
return hr;
|
||||||
|
|
||||||
CComObject<CShellMenuCallback> *pCallback;
|
CComObject<CShellMenuCallback> *pCallback;
|
||||||
hr = CComObject<CShellMenuCallback>::CreateInstance(&pCallback);
|
hr = CComObject<CShellMenuCallback>::CreateInstance(&pCallback);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return FALSE;
|
return hr;
|
||||||
pCallback->AddRef(); // CreateInstance returns object with 0 ref count */
|
pCallback->AddRef(); // CreateInstance returns object with 0 ref count */
|
||||||
pCallback->Initialize(pShellMenu, pBandSite, pDeskBar);
|
pCallback->Initialize(pShellMenu, pBandSite, pDeskBar);
|
||||||
callback = pCallback;
|
|
||||||
|
|
||||||
hr = CShellMenuCallback::_CreatorClass::CreateInstance(NULL, IID_PPV_ARG(IShellMenuCallback, &callback));
|
|
||||||
if (FAILED(hr))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
pShellMenu->Initialize(pCallback, -1, 0, SMINIT_TOPLEVEL | SMINIT_VERTICAL);
|
pShellMenu->Initialize(pCallback, -1, 0, SMINIT_TOPLEVEL | SMINIT_VERTICAL);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return NULL;
|
return hr;
|
||||||
|
|
||||||
/* FIXME: Use CLSID_MergedFolder class and IID_IAugmentedShellFolder2 interface here */
|
/* FIXME: Use CLSID_MergedFolder class and IID_IAugmentedShellFolder2 interface here */
|
||||||
/* CLSID_MergedFolder 26fdc864-be88-46e7-9235-032d8ea5162e */
|
/* CLSID_MergedFolder 26fdc864-be88-46e7-9235-032d8ea5162e */
|
||||||
|
@ -319,11 +317,53 @@ CStartMenu_Constructor(
|
||||||
|
|
||||||
hr = pDeskBar->SetClient(pBandSite);
|
hr = pDeskBar->SetClient(pBandSite);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return NULL;
|
return hr;
|
||||||
|
|
||||||
hr = pBandSite->AddBand(pShellMenu);
|
hr = pBandSite->AddBand(pShellMenu);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return NULL;
|
return hr;
|
||||||
|
|
||||||
|
return pDeskBar->QueryInterface(riid, ppv);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
HRESULT
|
||||||
|
CSubMenu_Constructor(IShellMenu * pShellMenu, REFIID riid, void **ppv)
|
||||||
|
{
|
||||||
|
IBandSite* pBandSite;
|
||||||
|
IDeskBar* pDeskBar;
|
||||||
|
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
hr = CoCreateInstance(CLSID_MenuBandSite,
|
||||||
|
NULL,
|
||||||
|
CLSCTX_INPROC_SERVER,
|
||||||
|
IID_PPV_ARG(IBandSite, &pBandSite));
|
||||||
|
#else
|
||||||
|
hr = CMenuSite_Constructor(IID_PPV_ARG(IBandSite, &pBandSite));
|
||||||
|
#endif
|
||||||
|
if (FAILED(hr))
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
hr = CoCreateInstance(CLSID_MenuDeskBar,
|
||||||
|
NULL,
|
||||||
|
CLSCTX_INPROC_SERVER,
|
||||||
|
IID_PPV_ARG(IDeskBar, &pDeskBar));
|
||||||
|
#else
|
||||||
|
hr = CMenuDeskBar_Constructor(IID_PPV_ARG(IDeskBar, &pDeskBar));
|
||||||
|
#endif
|
||||||
|
if (FAILED(hr))
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
hr = pDeskBar->SetClient(pBandSite);
|
||||||
|
if (FAILED(hr))
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
hr = pBandSite->AddBand(pShellMenu);
|
||||||
|
if (FAILED(hr))
|
||||||
|
return hr;
|
||||||
|
|
||||||
return pDeskBar->QueryInterface(riid, ppv);
|
return pDeskBar->QueryInterface(riid, ppv);
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,4 +32,5 @@ extern "C" INT WINAPI Shell_GetCachedImageIndex(LPCWSTR szPath, INT nIndex, UINT
|
||||||
|
|
||||||
extern "C" HRESULT CMenuDeskBar_Constructor(REFIID riid, LPVOID *ppv);
|
extern "C" HRESULT CMenuDeskBar_Constructor(REFIID riid, LPVOID *ppv);
|
||||||
extern "C" HRESULT CMenuSite_Constructor(REFIID riid, LPVOID *ppv);
|
extern "C" HRESULT CMenuSite_Constructor(REFIID riid, LPVOID *ppv);
|
||||||
extern "C" HRESULT CMenuBand_Constructor(REFIID riid, LPVOID *ppv);
|
extern "C" HRESULT CMenuBand_Constructor(REFIID riid, LPVOID *ppv);
|
||||||
|
extern "C" HRESULT CSubMenu_Constructor(IShellMenu * pShellMenu, REFIID riid, void **ppv);
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
#include "wraplog.h"
|
#include "wraplog.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
static UINT openCount = 0;
|
static INT openCount = 0;
|
||||||
static UINT callLevel;
|
static INT callLevel;
|
||||||
static FILE*log;
|
static FILE*log;
|
||||||
|
|
||||||
static UINT nTemps;
|
static INT nTemps;
|
||||||
static CHAR strTemp[10][256];
|
static CHAR strTemp[10][256];
|
||||||
|
|
||||||
void WrapLogOpen()
|
void WrapLogOpen()
|
||||||
|
|
Loading…
Reference in a new issue