mirror of
https://github.com/reactos/reactos.git
synced 2025-08-01 21:03:14 +00:00
[RSHELL]
* CMenuBand: Handle WM_COMMAND and run SMC_EXEC for static menu items (Run, Shutdown). CORE-7881 svn path=/branches/shell-experiments/; revision=62226
This commit is contained in:
parent
d29f9dcfef
commit
b71085bcc2
1 changed files with 47 additions and 5 deletions
|
@ -40,6 +40,7 @@ public:
|
||||||
HRESULT Close();
|
HRESULT Close();
|
||||||
|
|
||||||
virtual HRESULT FillToolbar() = 0;
|
virtual HRESULT FillToolbar() = 0;
|
||||||
|
virtual HRESULT OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResult) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
@ -60,7 +61,7 @@ public:
|
||||||
HRESULT GetMenu(HMENU *phmenu, HWND *phwnd, DWORD *pdwFlags);
|
HRESULT GetMenu(HMENU *phmenu, HWND *phwnd, DWORD *pdwFlags);
|
||||||
|
|
||||||
virtual HRESULT FillToolbar();
|
virtual HRESULT FillToolbar();
|
||||||
|
virtual HRESULT OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResult);
|
||||||
private:
|
private:
|
||||||
HMENU m_hmenu;
|
HMENU m_hmenu;
|
||||||
};
|
};
|
||||||
|
@ -75,6 +76,8 @@ public:
|
||||||
HRESULT GetShellFolder(DWORD *pdwFlags, LPITEMIDLIST *ppidl, REFIID riid, void **ppv);
|
HRESULT GetShellFolder(DWORD *pdwFlags, LPITEMIDLIST *ppidl, REFIID riid, void **ppv);
|
||||||
|
|
||||||
virtual HRESULT FillToolbar();
|
virtual HRESULT FillToolbar();
|
||||||
|
virtual HRESULT OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResult);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -825,7 +828,7 @@ HRESULT CMenuToolbarBase::CreateToolbar(HWND hwndParent, DWORD dwFlags)
|
||||||
LONG tbStyles = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
|
LONG tbStyles = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
|
||||||
TBSTYLE_TOOLTIPS | TBSTYLE_TRANSPARENT | TBSTYLE_REGISTERDROP | TBSTYLE_LIST | TBSTYLE_FLAT |
|
TBSTYLE_TOOLTIPS | TBSTYLE_TRANSPARENT | TBSTYLE_REGISTERDROP | TBSTYLE_LIST | TBSTYLE_FLAT |
|
||||||
CCS_NODIVIDER | CCS_NOPARENTALIGN | CCS_NORESIZE | CCS_TOP;
|
CCS_NODIVIDER | CCS_NOPARENTALIGN | CCS_NORESIZE | CCS_TOP;
|
||||||
LONG tbExStyles = TBSTYLE_EX_DOUBLEBUFFER | TBSTYLE_EX_DRAWDDARROWS;
|
LONG tbExStyles = TBSTYLE_EX_DOUBLEBUFFER;
|
||||||
|
|
||||||
if (dwFlags & SMINIT_VERTICAL)
|
if (dwFlags & SMINIT_VERTICAL)
|
||||||
{
|
{
|
||||||
|
@ -960,7 +963,8 @@ HRESULT CMenuStaticToolbar::FillToolbar()
|
||||||
{
|
{
|
||||||
if (!AllocAndGetMenuString(m_hmenu, i, &MenuString))
|
if (!AllocAndGetMenuString(m_hmenu, i, &MenuString))
|
||||||
return E_OUTOFMEMORY;
|
return E_OUTOFMEMORY;
|
||||||
tbb.fsStyle |= BTNS_DROPDOWN;
|
if (::GetSubMenu(m_hmenu, i) != NULL)
|
||||||
|
tbb.fsStyle |= BTNS_DROPDOWN;
|
||||||
tbb.iString = (INT_PTR) MenuString;
|
tbb.iString = (INT_PTR) MenuString;
|
||||||
tbb.idCommand = info.wID;
|
tbb.idCommand = info.wID;
|
||||||
|
|
||||||
|
@ -1076,6 +1080,16 @@ HRESULT CMenuSFToolbar::GetShellFolder(DWORD *pdwFlags, LPITEMIDLIST *ppidl, REF
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT CMenuStaticToolbar::OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResult)
|
||||||
|
{
|
||||||
|
return m_menuBand->CallCBWithId(wParam, SMC_EXEC, 0, 0);
|
||||||
|
}
|
||||||
|
HRESULT CMenuSFToolbar::OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResult)
|
||||||
|
{
|
||||||
|
// return m_menuBand->CallCBWithPidl(GetPidlFromId(wParam), SMC_SFEXEC, 0, 0);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
CMenuBand::CMenuBand() :
|
CMenuBand::CMenuBand() :
|
||||||
m_site(NULL),
|
m_site(NULL),
|
||||||
m_psmc(NULL),
|
m_psmc(NULL),
|
||||||
|
@ -1614,9 +1628,37 @@ HRESULT STDMETHODCALLTYPE CMenuBand::SetMenuToolbar(IUnknown *punk, DWORD dwFlag
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
|
HRESULT STDMETHODCALLTYPE CMenuBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
|
||||||
{
|
{
|
||||||
|
HWND hwndStatic = NULL;
|
||||||
|
HWND hwndShlFld = NULL;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
*theResult = 0;
|
*theResult = 0;
|
||||||
if (uMsg == WM_NOTIFY)
|
switch (uMsg)
|
||||||
{
|
{
|
||||||
|
case WM_COMMAND:
|
||||||
|
|
||||||
|
if (m_staticToolbar != NULL)
|
||||||
|
hr = m_staticToolbar->GetWindow(&hwndStatic);
|
||||||
|
if (FAILED(hr))
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
if (hWnd == hwndStatic)
|
||||||
|
{
|
||||||
|
return m_staticToolbar->OnCommand(wParam, lParam, theResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_SFToolbar != NULL)
|
||||||
|
hr = m_SFToolbar->GetWindow(&hwndShlFld);
|
||||||
|
if (FAILED(hr))
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
if (hWnd == hwndShlFld)
|
||||||
|
{
|
||||||
|
return m_SFToolbar->OnCommand(wParam, lParam, theResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
case WM_NOTIFY:
|
||||||
NMHDR * hdr = (LPNMHDR) lParam;
|
NMHDR * hdr = (LPNMHDR) lParam;
|
||||||
NMTBCUSTOMDRAW * cdraw;
|
NMTBCUSTOMDRAW * cdraw;
|
||||||
switch (hdr->code)
|
switch (hdr->code)
|
||||||
|
@ -1661,8 +1703,8 @@ HRESULT STDMETHODCALLTYPE CMenuBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wPa
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return S_FALSE;
|
return S_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue