mirror of
https://github.com/reactos/reactos.git
synced 2025-06-25 14:29:43 +00:00
[RSHELL]
* Change C-style casts to static_cast where possible, and reinterpret_cast elsewhere. * Make coding style and formatting more consistent. svn path=/branches/shell-experiments/; revision=62239
This commit is contained in:
parent
46e9b4d1e3
commit
2b63295fea
5 changed files with 202 additions and 303 deletions
|
@ -26,9 +26,9 @@ BOOL WINAPI SetShellWindowEx(HWND, HWND);
|
|||
|
||||
#define SHDESK_TAG 0x4b534544
|
||||
|
||||
static const WCHAR szProgmanClassName[] = {'P','r','o','g','m','a','n'};
|
||||
static const WCHAR szProgmanWindowName[] = {
|
||||
'P','r','o','g','r','a','m',' ','M','a','n','a','g','e','r'
|
||||
static const WCHAR szProgmanClassName [] = { 'P', 'r', 'o', 'g', 'm', 'a', 'n' };
|
||||
static const WCHAR szProgmanWindowName [] = {
|
||||
'P', 'r', 'o', 'g', 'r', 'a', 'm', ' ', 'M', 'a', 'n', 'a', 'g', 'e', 'r'
|
||||
};
|
||||
|
||||
class CDesktopBrowser :
|
||||
|
@ -52,7 +52,7 @@ public:
|
|||
CDesktopBrowser();
|
||||
~CDesktopBrowser();
|
||||
HRESULT Initialize(HWND hWndx, IShellDesktopTray *ShellDeskx);
|
||||
HWND FindDesktopListView ();
|
||||
HWND FindDesktopListView();
|
||||
BOOL CreateDeskWnd();
|
||||
HWND DesktopGetWindowControl(IN UINT id);
|
||||
static LRESULT CALLBACK ProgmanWindowProc(IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam);
|
||||
|
@ -78,19 +78,19 @@ public:
|
|||
virtual HRESULT STDMETHODCALLTYPE SetToolbarItems(LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags);
|
||||
|
||||
// *** ICommDlgBrowser methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE OnDefaultCommand (struct IShellView *ppshv);
|
||||
virtual HRESULT STDMETHODCALLTYPE OnStateChange (struct IShellView *ppshv, ULONG uChange);
|
||||
virtual HRESULT STDMETHODCALLTYPE IncludeObject (struct IShellView *ppshv, LPCITEMIDLIST pidl);
|
||||
virtual HRESULT STDMETHODCALLTYPE OnDefaultCommand(struct IShellView *ppshv);
|
||||
virtual HRESULT STDMETHODCALLTYPE OnStateChange(struct IShellView *ppshv, ULONG uChange);
|
||||
virtual HRESULT STDMETHODCALLTYPE IncludeObject(struct IShellView *ppshv, LPCITEMIDLIST pidl);
|
||||
|
||||
// *** IServiceProvider methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid, void **ppvObject);
|
||||
|
||||
BEGIN_COM_MAP(CDesktopBrowser)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleWindow)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IShellBrowser, IShellBrowser)
|
||||
COM_INTERFACE_ENTRY_IID(IID_ICommDlgBrowser, ICommDlgBrowser)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
|
||||
END_COM_MAP()
|
||||
BEGIN_COM_MAP(CDesktopBrowser)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleWindow)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IShellBrowser, IShellBrowser)
|
||||
COM_INTERFACE_ENTRY_IID(IID_ICommDlgBrowser, ICommDlgBrowser)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
|
||||
END_COM_MAP()
|
||||
};
|
||||
|
||||
CDesktopBrowser::CDesktopBrowser()
|
||||
|
@ -163,7 +163,7 @@ static CDesktopBrowser *SHDESK_Create(HWND hWnd, LPCREATESTRUCT lpCreateStruct)
|
|||
CComObject<CDesktopBrowser> *pThis;
|
||||
HRESULT hRet;
|
||||
|
||||
ShellDesk = (IShellDesktopTray *)lpCreateStruct->lpCreateParams;
|
||||
ShellDesk = static_cast<IShellDesktopTray *>(lpCreateStruct->lpCreateParams);
|
||||
if (ShellDesk == NULL)
|
||||
{
|
||||
WARN("No IShellDesk interface provided!");
|
||||
|
@ -185,7 +185,7 @@ static CDesktopBrowser *SHDESK_Create(HWND hWnd, LPCREATESTRUCT lpCreateStruct)
|
|||
return pThis;
|
||||
}
|
||||
|
||||
HWND CDesktopBrowser::FindDesktopListView ()
|
||||
HWND CDesktopBrowser::FindDesktopListView()
|
||||
{
|
||||
return FindWindowExW(hWndShellView, NULL, WC_LISTVIEW, NULL);
|
||||
}
|
||||
|
@ -202,8 +202,8 @@ BOOL CDesktopBrowser::CreateDeskWnd()
|
|||
}
|
||||
|
||||
fs.ViewMode = FVM_ICON;
|
||||
fs.fFlags = FWF_DESKTOP | FWF_NOCLIENTEDGE | FWF_NOSCROLL | FWF_TRANSPARENT;
|
||||
hRet = DesktopView->CreateViewWindow(NULL, &fs, (IShellBrowser *)this, &rcClient, &hWndShellView);
|
||||
fs.fFlags = FWF_DESKTOP | FWF_NOCLIENTEDGE | FWF_NOSCROLL | FWF_TRANSPARENT;
|
||||
hRet = DesktopView->CreateViewWindow(NULL, &fs, static_cast<IShellBrowser *>(this), &rcClient, &hWndShellView);
|
||||
if (!SUCCEEDED(hRet))
|
||||
return FALSE;
|
||||
|
||||
|
@ -265,7 +265,7 @@ HRESULT STDMETHODCALLTYPE CDesktopBrowser::TranslateAcceleratorSB(LPMSG lpmsg, W
|
|||
return S_FALSE;
|
||||
}
|
||||
|
||||
typedef HRESULT (WINAPI *SH_OPEN_NEW_FRAME)(LPITEMIDLIST pidl, IUnknown *paramC, long param10, long param14);
|
||||
typedef HRESULT(WINAPI *SH_OPEN_NEW_FRAME)(LPITEMIDLIST pidl, IUnknown *paramC, long param10, long param14);
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CDesktopBrowser::BrowseObject(LPCITEMIDLIST pidl, UINT wFlags)
|
||||
{
|
||||
|
@ -284,14 +284,14 @@ HWND CDesktopBrowser::DesktopGetWindowControl(IN UINT id)
|
|||
{
|
||||
switch (id)
|
||||
{
|
||||
case FCW_TOOLBAR:
|
||||
case FCW_STATUS:
|
||||
case FCW_TREE:
|
||||
case FCW_PROGRESS:
|
||||
return NULL;
|
||||
case FCW_TOOLBAR:
|
||||
case FCW_STATUS:
|
||||
case FCW_TREE:
|
||||
case FCW_PROGRESS:
|
||||
return NULL;
|
||||
|
||||
default:
|
||||
return NULL;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -321,10 +321,7 @@ HRESULT STDMETHODCALLTYPE CDesktopBrowser::SendControlMsg(UINT id, UINT uMsg, WP
|
|||
hWnd = DesktopGetWindowControl(id);
|
||||
if (hWnd != NULL)
|
||||
{
|
||||
*pret = SendMessageW(hWnd,
|
||||
uMsg,
|
||||
wParam,
|
||||
lParam);
|
||||
*pret = SendMessageW(hWnd, uMsg, wParam, lParam);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
@ -395,8 +392,7 @@ LRESULT CALLBACK CDesktopBrowser::ProgmanWindowProc(IN HWND hwnd, IN UINT uMsg,
|
|||
|
||||
if (uMsg != WM_NCCREATE)
|
||||
{
|
||||
pThis = (CDesktopBrowser*)GetWindowLongPtrW(hwnd,
|
||||
0);
|
||||
pThis = reinterpret_cast<CDesktopBrowser*>(GetWindowLongPtrW(hwnd, 0));
|
||||
if (pThis == NULL)
|
||||
goto DefMsgHandler;
|
||||
}
|
||||
|
@ -405,86 +401,86 @@ LRESULT CALLBACK CDesktopBrowser::ProgmanWindowProc(IN HWND hwnd, IN UINT uMsg,
|
|||
{
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_ERASEBKGND:
|
||||
return (LRESULT)PaintDesktop((HDC)wParam);
|
||||
case WM_ERASEBKGND:
|
||||
return (LRESULT) PaintDesktop((HDC) wParam);
|
||||
|
||||
case WM_GETISHELLBROWSER:
|
||||
Ret = (LRESULT)((IShellBrowser *)pThis);
|
||||
break;
|
||||
case WM_GETISHELLBROWSER:
|
||||
Ret = reinterpret_cast<LRESULT>(static_cast<IShellBrowser *>(pThis));
|
||||
break;
|
||||
|
||||
case WM_SIZE:
|
||||
if (wParam == SIZE_MINIMIZED)
|
||||
{
|
||||
/* Hey, we're the desktop!!! */
|
||||
ShowWindow(hwnd,
|
||||
SW_RESTORE);
|
||||
}
|
||||
else
|
||||
{
|
||||
RECT rcDesktop;
|
||||
|
||||
rcDesktop.left = GetSystemMetrics(SM_XVIRTUALSCREEN);
|
||||
rcDesktop.top = GetSystemMetrics(SM_YVIRTUALSCREEN);
|
||||
rcDesktop.right = GetSystemMetrics(SM_CXVIRTUALSCREEN);
|
||||
rcDesktop.bottom = GetSystemMetrics(SM_CYVIRTUALSCREEN);
|
||||
|
||||
/* FIXME: Update work area */
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_SYSCOLORCHANGE:
|
||||
case WM_SETTINGCHANGE:
|
||||
case WM_SIZE:
|
||||
if (wParam == SIZE_MINIMIZED)
|
||||
{
|
||||
if (uMsg == WM_SYSCOLORCHANGE || wParam == SPI_SETDESKWALLPAPER || wParam == 0)
|
||||
/* Hey, we're the desktop!!! */
|
||||
ShowWindow(hwnd,
|
||||
SW_RESTORE);
|
||||
}
|
||||
else
|
||||
{
|
||||
RECT rcDesktop;
|
||||
|
||||
rcDesktop.left = GetSystemMetrics(SM_XVIRTUALSCREEN);
|
||||
rcDesktop.top = GetSystemMetrics(SM_YVIRTUALSCREEN);
|
||||
rcDesktop.right = GetSystemMetrics(SM_CXVIRTUALSCREEN);
|
||||
rcDesktop.bottom = GetSystemMetrics(SM_CYVIRTUALSCREEN);
|
||||
|
||||
/* FIXME: Update work area */
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_SYSCOLORCHANGE:
|
||||
case WM_SETTINGCHANGE:
|
||||
{
|
||||
if (uMsg == WM_SYSCOLORCHANGE || wParam == SPI_SETDESKWALLPAPER || wParam == 0)
|
||||
{
|
||||
if (pThis->hWndShellView != NULL)
|
||||
{
|
||||
if (pThis->hWndShellView != NULL)
|
||||
{
|
||||
/* Forward the message */
|
||||
SendMessageW(pThis->hWndShellView,
|
||||
uMsg,
|
||||
wParam,
|
||||
lParam);
|
||||
}
|
||||
/* Forward the message */
|
||||
SendMessageW(pThis->hWndShellView,
|
||||
uMsg,
|
||||
wParam,
|
||||
lParam);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_CREATE:
|
||||
{
|
||||
pThis->ShellDesk->RegisterDesktopWindow(pThis->hWnd);
|
||||
|
||||
if (!pThis->CreateDeskWnd())
|
||||
WARN("Could not create the desktop view control!\n");
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_NCCREATE:
|
||||
{
|
||||
LPCREATESTRUCT CreateStruct = (LPCREATESTRUCT) lParam;
|
||||
pThis = SHDESK_Create(hwnd, CreateStruct);
|
||||
if (pThis == NULL)
|
||||
{
|
||||
WARN("Failed to create desktop structure\n");
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_CREATE:
|
||||
{
|
||||
pThis->ShellDesk->RegisterDesktopWindow(pThis->hWnd);
|
||||
SetWindowLongPtrW(hwnd,
|
||||
0,
|
||||
(LONG_PTR) pThis);
|
||||
Ret = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!pThis->CreateDeskWnd())
|
||||
WARN("Could not create the desktop view control!\n");
|
||||
break;
|
||||
}
|
||||
case WM_NCDESTROY:
|
||||
{
|
||||
pThis->Release();
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_NCCREATE:
|
||||
{
|
||||
LPCREATESTRUCT CreateStruct = (LPCREATESTRUCT)lParam;
|
||||
pThis = SHDESK_Create(hwnd, CreateStruct);
|
||||
if (pThis == NULL)
|
||||
{
|
||||
WARN("Failed to create desktop structure\n");
|
||||
break;
|
||||
}
|
||||
|
||||
SetWindowLongPtrW(hwnd,
|
||||
0,
|
||||
(LONG_PTR)pThis);
|
||||
Ret = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_NCDESTROY:
|
||||
{
|
||||
pThis->Release();
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
DefMsgHandler:
|
||||
Ret = DefWindowProcW(hwnd, uMsg, wParam, lParam);
|
||||
break;
|
||||
default:
|
||||
DefMsgHandler :
|
||||
Ret = DefWindowProcW(hwnd, uMsg, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -503,7 +499,7 @@ RegisterProgmanWindowClass(VOID)
|
|||
wcProgman.hInstance = shell32_hInstance;
|
||||
wcProgman.hIcon = NULL;
|
||||
wcProgman.hCursor = LoadCursorW(NULL, IDC_ARROW);
|
||||
wcProgman.hbrBackground = (HBRUSH)(COLOR_BACKGROUND + 1);
|
||||
wcProgman.hbrBackground = (HBRUSH) (COLOR_BACKGROUND + 1);
|
||||
wcProgman.lpszMenuName = NULL;
|
||||
wcProgman.lpszClassName = szProgmanClassName;
|
||||
|
||||
|
@ -547,9 +543,9 @@ HANDLE WINAPI SHCreateDesktop(IShellDesktopTray *ShellDesk)
|
|||
hWndDesk = CreateWindowExW(0, szProgmanClassName, szProgmanWindowName,
|
||||
WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
|
||||
rcDesk.left, rcDesk.top, rcDesk.right, rcDesk.bottom,
|
||||
NULL, NULL, shell32_hInstance, (LPVOID)ShellDesk);
|
||||
NULL, NULL, shell32_hInstance, (LPVOID) ShellDesk);
|
||||
if (hWndDesk != NULL)
|
||||
return (HANDLE)GetWindowLongPtrW(hWndDesk, 0);
|
||||
return (HANDLE) GetWindowLongPtrW(hWndDesk, 0);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
@ -560,7 +556,7 @@ HANDLE WINAPI SHCreateDesktop(IShellDesktopTray *ShellDesk)
|
|||
*/
|
||||
BOOL WINAPI SHDesktopMessageLoop(HANDLE hDesktop)
|
||||
{
|
||||
CDesktopBrowser *Desk = (CDesktopBrowser *)hDesktop;
|
||||
CDesktopBrowser *Desk = reinterpret_cast<CDesktopBrowser *>(hDesktop);
|
||||
|
||||
if (Desk == NULL || Desk->Tag != SHDESK_TAG)
|
||||
{
|
||||
|
|
|
@ -56,6 +56,7 @@ public:
|
|||
HRESULT OnHotItemChange(const NMTBHOTITEM * hot);
|
||||
|
||||
HRESULT PopupSubMenu(UINT index, IShellMenu* childShellMenu);
|
||||
HRESULT DoContextMenu(IContextMenu* contextMenu);
|
||||
|
||||
static LRESULT CALLBACK s_SubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
protected:
|
||||
|
@ -281,7 +282,7 @@ public:
|
|||
END_COM_MAP()
|
||||
|
||||
private:
|
||||
HRESULT _CallCB(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
HRESULT _CallCB(UINT uMsg, WPARAM wParam, LPARAM lParam, UINT id = 0, LPITEMIDLIST pidl = NULL);
|
||||
};
|
||||
|
||||
extern "C"
|
||||
|
@ -850,14 +851,14 @@ HRESULT CMenuToolbarBase::Close()
|
|||
HRESULT CMenuToolbarBase::CreateToolbar(HWND hwndParent, DWORD dwFlags)
|
||||
{
|
||||
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 | TBSTYLE_CUSTOMERASE |
|
||||
CCS_NODIVIDER | CCS_NOPARENTALIGN | CCS_NORESIZE | CCS_TOP;
|
||||
LONG tbExStyles = TBSTYLE_EX_DOUBLEBUFFER;
|
||||
|
||||
if (dwFlags & SMINIT_VERTICAL)
|
||||
{
|
||||
tbStyles |= CCS_VERT;
|
||||
tbExStyles |= TBSTYLE_EX_VERTICAL;
|
||||
tbExStyles |= TBSTYLE_EX_VERTICAL | WS_EX_TOOLWINDOW;
|
||||
}
|
||||
|
||||
RECT rc;
|
||||
|
@ -921,7 +922,7 @@ HRESULT CMenuToolbarBase::GetWindow(HWND *phwnd)
|
|||
|
||||
LRESULT CALLBACK CMenuToolbarBase::s_SubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
CMenuToolbarBase * pthis = (CMenuToolbarBase *) GetWindowLongPtr(hWnd, GWLP_USERDATA);
|
||||
CMenuToolbarBase * pthis = reinterpret_cast<CMenuToolbarBase *>(GetWindowLongPtr(hWnd, GWLP_USERDATA));
|
||||
return pthis->SubclassProc(hWnd, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
|
@ -1023,6 +1024,36 @@ HRESULT CMenuToolbarBase::PopupSubMenu(UINT index, IShellMenu* childShellMenu)
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT CMenuToolbarBase::DoContextMenu(IContextMenu* contextMenu)
|
||||
{
|
||||
HRESULT hr;
|
||||
HMENU hPopup = CreatePopupMenu();
|
||||
|
||||
if (hPopup == NULL)
|
||||
return E_FAIL;
|
||||
|
||||
hr = contextMenu->QueryContextMenu(hPopup, 0, 0, UINT_MAX, CMF_NORMAL);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
DestroyMenu(hPopup);
|
||||
return hr;
|
||||
}
|
||||
|
||||
DWORD dwPos = GetMessagePos();
|
||||
UINT uCommand = ::TrackPopupMenu(hPopup, TPM_RETURNCMD, GET_X_LPARAM(dwPos), GET_Y_LPARAM(dwPos), 0, m_hwnd, NULL);
|
||||
if (uCommand == 0)
|
||||
return S_FALSE;
|
||||
|
||||
CMINVOKECOMMANDINFO cmi = { 0 };
|
||||
cmi.cbSize = sizeof(cmi);
|
||||
cmi.lpVerb = MAKEINTRESOURCEA(uCommand);
|
||||
cmi.hwnd = m_hwnd;
|
||||
hr = contextMenu->InvokeCommand(&cmi);
|
||||
|
||||
DestroyMenu(hPopup);
|
||||
return hr;
|
||||
}
|
||||
|
||||
BOOL
|
||||
AllocAndGetMenuString(HMENU hMenu, UINT ItemIDByPosition, WCHAR** String)
|
||||
{
|
||||
|
@ -1095,7 +1126,7 @@ HRESULT CMenuStaticToolbar::FillToolbar()
|
|||
if (!AllocAndGetMenuString(m_hmenu, i, &MenuString))
|
||||
return E_OUTOFMEMORY;
|
||||
if (::GetSubMenu(m_hmenu, i) != NULL)
|
||||
tbb.fsStyle |= BTNS_WHOLEDROPDOWN;
|
||||
tbb.fsStyle |= BTNS_DROPDOWN;
|
||||
tbb.iString = (INT_PTR) MenuString;
|
||||
tbb.idCommand = info.wID;
|
||||
|
||||
|
@ -1126,47 +1157,7 @@ HRESULT CMenuStaticToolbar::OnContextMenu(NMMOUSE * rclick)
|
|||
if (hr != S_OK)
|
||||
return hr;
|
||||
|
||||
HMENU hPopup = CreatePopupMenu();
|
||||
|
||||
if (hPopup == NULL)
|
||||
return E_FAIL;
|
||||
|
||||
int ID_SHELL_CMD_FIRST = 0xF;
|
||||
int ID_SHELL_CMD_LAST = 0x7fef;
|
||||
hr = contextMenu->QueryContextMenu(hPopup, 0, ID_SHELL_CMD_FIRST, ID_SHELL_CMD_LAST, CMF_VERBSONLY);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
DestroyMenu(hPopup);
|
||||
return hr;
|
||||
}
|
||||
|
||||
POINT pt = rclick->pt;
|
||||
if (!ClientToScreen(m_hwnd, &pt))
|
||||
{
|
||||
DestroyMenu(hPopup);
|
||||
return HRESULT_FROM_WIN32(GetLastError());
|
||||
}
|
||||
|
||||
CComPtr<IOleWindow> site;
|
||||
hr = m_menuBand->GetSite(IID_PPV_ARG(IOleWindow, &site));
|
||||
if (FAILED(hr))
|
||||
{
|
||||
DestroyMenu(hPopup);
|
||||
return hr;
|
||||
}
|
||||
|
||||
HWND hwndSite;
|
||||
hr = site->GetWindow(&hwndSite);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
DestroyMenu(hPopup);
|
||||
return hr;
|
||||
}
|
||||
|
||||
::TrackPopupMenu(hPopup, 0, pt.x, pt.y, 0, hwndSite, NULL);
|
||||
|
||||
DestroyMenu(hPopup);
|
||||
return S_OK;
|
||||
return DoContextMenu(contextMenu);
|
||||
}
|
||||
|
||||
HRESULT CMenuStaticToolbar::OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResult)
|
||||
|
@ -1246,7 +1237,7 @@ HRESULT CMenuSFToolbar::FillToolbar()
|
|||
|
||||
if (attrs != 0)
|
||||
{
|
||||
tbb.fsStyle |= BTNS_WHOLEDROPDOWN;
|
||||
tbb.fsStyle |= BTNS_DROPDOWN;
|
||||
}
|
||||
|
||||
tbb.idCommand = i++;
|
||||
|
@ -1319,59 +1310,20 @@ LPITEMIDLIST CMenuSFToolbar::GetPidlFromId(UINT uItem, INT* pIndex)
|
|||
if (!SendMessage(m_hwnd, TB_GETBUTTON, index, (LPARAM) &btn))
|
||||
return NULL;
|
||||
|
||||
return (LPITEMIDLIST)btn.dwData;
|
||||
return (LPITEMIDLIST) btn.dwData;
|
||||
}
|
||||
|
||||
HRESULT CMenuSFToolbar::OnContextMenu(NMMOUSE * rclick)
|
||||
{
|
||||
HRESULT hr;
|
||||
CComPtr<IOleWindow> site;
|
||||
CComPtr<IContextMenu> contextMenu;
|
||||
LPCITEMIDLIST pidl = reinterpret_cast<LPCITEMIDLIST>(rclick->dwItemData);
|
||||
|
||||
hr = m_menuBand->GetSite(IID_PPV_ARG(IOleWindow, &site));
|
||||
if (FAILED(hr))
|
||||
{
|
||||
return hr;
|
||||
}
|
||||
|
||||
HWND hwndSite;
|
||||
hr = site->GetWindow(&hwndSite);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
return hr;
|
||||
}
|
||||
|
||||
LPITEMIDLIST pidl = GetPidlFromId(rclick->dwItemData, NULL);
|
||||
|
||||
hr = m_shellFolder->GetUIObjectOf(hwndSite, 1, (LPCITEMIDLIST *) &pidl, IID_IContextMenu, NULL, (PVOID *) &contextMenu);
|
||||
hr = m_shellFolder->GetUIObjectOf(m_hwnd, 1, &pidl, IID_IContextMenu, NULL, reinterpret_cast<VOID **>(&contextMenu));
|
||||
if (hr != S_OK)
|
||||
return hr;
|
||||
|
||||
HMENU hPopup = CreatePopupMenu();
|
||||
|
||||
if (hPopup == NULL)
|
||||
return E_FAIL;
|
||||
|
||||
int ID_SHELL_CMD_FIRST = 0xF;
|
||||
int ID_SHELL_CMD_LAST = 0x7fef;
|
||||
hr = contextMenu->QueryContextMenu(hPopup, 0, ID_SHELL_CMD_FIRST, ID_SHELL_CMD_LAST, CMF_VERBSONLY);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
DestroyMenu(hPopup);
|
||||
return hr;
|
||||
}
|
||||
|
||||
POINT pt = rclick->pt;
|
||||
if (!ClientToScreen(m_hwnd, &pt))
|
||||
{
|
||||
DestroyMenu(hPopup);
|
||||
return HRESULT_FROM_WIN32(GetLastError());
|
||||
}
|
||||
|
||||
::TrackPopupMenu(hPopup, 0, pt.x, pt.y, 0, hwndSite, NULL);
|
||||
|
||||
DestroyMenu(hPopup);
|
||||
return S_OK;
|
||||
return DoContextMenu(contextMenu);
|
||||
}
|
||||
|
||||
HRESULT CMenuSFToolbar::OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResult)
|
||||
|
@ -1381,7 +1333,7 @@ HRESULT CMenuSFToolbar::OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResu
|
|||
|
||||
HRESULT CMenuSFToolbar::PopupItem(UINT uItem)
|
||||
{
|
||||
int index;
|
||||
int index;
|
||||
CComPtr<IShellMenu> shellMenu;
|
||||
HRESULT hr = m_menuBand->CallCBWithPidl(GetPidlFromId(uItem, &index), SMC_GETOBJECT, (WPARAM) &IID_IShellMenu, (LPARAM) &shellMenu);
|
||||
if (FAILED(hr))
|
||||
|
@ -1581,8 +1533,6 @@ HRESULT STDMETHODCALLTYPE CMenuBand::GetWindow(
|
|||
|
||||
HRESULT STDMETHODCALLTYPE CMenuBand::OnPosRectChangeDB(RECT *prc)
|
||||
{
|
||||
SIZE sizeStaticX = { 0 };
|
||||
SIZE sizeShlFldX = { 0 };
|
||||
SIZE sizeStaticY = { 0 };
|
||||
SIZE sizeShlFldY = { 0 };
|
||||
HWND hwndStatic = NULL;
|
||||
|
@ -1604,8 +1554,6 @@ HRESULT STDMETHODCALLTYPE CMenuBand::OnPosRectChangeDB(RECT *prc)
|
|||
|
||||
if (hwndStatic) SendMessageW(hwndStatic, TB_GETIDEALSIZE, TRUE, (LPARAM) &sizeStaticY);
|
||||
if (hwndShlFld) SendMessageW(hwndShlFld, TB_GETIDEALSIZE, TRUE, (LPARAM) &sizeShlFldY);
|
||||
if (hwndStatic) SendMessageW(hwndStatic, TB_GETIDEALSIZE, FALSE, (LPARAM) &sizeStaticX);
|
||||
if (hwndShlFld) SendMessageW(hwndShlFld, TB_GETIDEALSIZE, FALSE, (LPARAM) &sizeShlFldX);
|
||||
|
||||
int sy = max(prc->bottom - prc->top, sizeStaticY.cy + sizeShlFldY.cy);
|
||||
|
||||
|
@ -1958,14 +1906,14 @@ HRESULT STDMETHODCALLTYPE CMenuBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wPa
|
|||
return S_OK;
|
||||
|
||||
case WM_NOTIFY:
|
||||
NMHDR * hdr = (LPNMHDR) lParam;
|
||||
NMHDR * hdr = reinterpret_cast<LPNMHDR>(lParam);
|
||||
NMTBCUSTOMDRAW * cdraw;
|
||||
NMTBHOTITEM * hot;
|
||||
NMMOUSE * rclick;
|
||||
switch (hdr->code)
|
||||
{
|
||||
case TBN_HOTITEMCHANGE:
|
||||
hot = (NMTBHOTITEM*) hdr;
|
||||
hot = reinterpret_cast<LPNMTBHOTITEM>(hdr);
|
||||
|
||||
if (m_staticToolbar && m_staticToolbar->IsWindowOwner(hWnd))
|
||||
{
|
||||
|
@ -1980,7 +1928,7 @@ HRESULT STDMETHODCALLTYPE CMenuBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wPa
|
|||
return S_OK;
|
||||
|
||||
case NM_RCLICK:
|
||||
rclick = (LPNMMOUSE) hdr;
|
||||
rclick = reinterpret_cast<LPNMMOUSE>(hdr);
|
||||
|
||||
if (m_staticToolbar && m_staticToolbar->IsWindowOwner(hWnd))
|
||||
{
|
||||
|
@ -1994,7 +1942,7 @@ HRESULT STDMETHODCALLTYPE CMenuBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wPa
|
|||
|
||||
return S_OK;
|
||||
case NM_CUSTOMDRAW:
|
||||
cdraw = (LPNMTBCUSTOMDRAW) hdr;
|
||||
cdraw = reinterpret_cast<LPNMTBCUSTOMDRAW>(hdr);
|
||||
switch (cdraw->nmcd.dwDrawStage)
|
||||
{
|
||||
case CDDS_PREPAINT:
|
||||
|
@ -2121,35 +2069,17 @@ HRESULT STDMETHODCALLTYPE CMenuBand::IsEmpty(THIS)
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT CMenuBand::CallCBWithId(UINT Id, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
HRESULT CMenuBand::CallCBWithId(UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (!m_psmc)
|
||||
return S_FALSE;
|
||||
|
||||
HWND hwnd;
|
||||
GetWindow(&hwnd);
|
||||
|
||||
SMDATA smData = { 0 };
|
||||
smData.punk = (IShellMenu2*)this;
|
||||
smData.uId = Id;
|
||||
smData.uIdParent = m_uId;
|
||||
smData.uIdAncestor = m_uIdAncestor;
|
||||
smData.hwnd = hwnd;
|
||||
if (m_staticToolbar)
|
||||
{
|
||||
smData.hmenu = m_hmenu;
|
||||
}
|
||||
smData.pvUserData = NULL;
|
||||
if (m_SFToolbar)
|
||||
m_SFToolbar->GetShellFolder(NULL, &smData.pidlFolder, IID_PPV_ARG(IShellFolder, &smData.psf));
|
||||
HRESULT hr = m_psmc->CallbackSM(&smData, uMsg, wParam, lParam);
|
||||
ILFree(smData.pidlFolder);
|
||||
if (smData.psf)
|
||||
smData.psf->Release();
|
||||
return hr;
|
||||
return _CallCB(uMsg, wParam, lParam, id);
|
||||
}
|
||||
|
||||
HRESULT CMenuBand::CallCBWithPidl(LPITEMIDLIST pidl, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
return _CallCB(uMsg, wParam, lParam, 0, pidl);
|
||||
}
|
||||
|
||||
HRESULT CMenuBand::_CallCB(UINT uMsg, WPARAM wParam, LPARAM lParam, UINT id, LPITEMIDLIST pidl)
|
||||
{
|
||||
if (!m_psmc)
|
||||
return S_FALSE;
|
||||
|
@ -2158,7 +2088,8 @@ HRESULT CMenuBand::CallCBWithPidl(LPITEMIDLIST pidl, UINT uMsg, WPARAM wParam, L
|
|||
GetWindow(&hwnd);
|
||||
|
||||
SMDATA smData = { 0 };
|
||||
smData.punk = (IShellMenu2*)this;
|
||||
smData.punk = static_cast<IShellMenu2*>(this);
|
||||
smData.uId = id;
|
||||
smData.uIdParent = m_uId;
|
||||
smData.uIdAncestor = m_uIdAncestor;
|
||||
smData.hwnd = hwnd;
|
||||
|
@ -2176,31 +2107,4 @@ HRESULT CMenuBand::CallCBWithPidl(LPITEMIDLIST pidl, UINT uMsg, WPARAM wParam, L
|
|||
smData.psf->Release();
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT CMenuBand::_CallCB(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (!m_psmc)
|
||||
return S_FALSE;
|
||||
|
||||
HWND hwnd;
|
||||
GetWindow(&hwnd);
|
||||
|
||||
SMDATA smData = { 0 };
|
||||
smData.punk = (IShellMenu2*)this;
|
||||
smData.uIdParent = m_uId;
|
||||
smData.uIdAncestor = m_uIdAncestor;
|
||||
smData.hwnd = hwnd;
|
||||
if (m_staticToolbar)
|
||||
{
|
||||
smData.hmenu = m_hmenu;
|
||||
}
|
||||
smData.pvUserData = NULL;
|
||||
if (m_SFToolbar)
|
||||
m_SFToolbar->GetShellFolder(NULL, &smData.pidlFolder, IID_PPV_ARG(IShellFolder, &smData.psf));
|
||||
HRESULT hr = m_psmc->CallbackSM(&smData, uMsg, wParam, lParam);
|
||||
ILFree(smData.pidlFolder);
|
||||
if (smData.psf)
|
||||
smData.psf->Release();
|
||||
return hr;
|
||||
}
|
||||
#endif
|
|
@ -480,7 +480,7 @@ HRESULT STDMETHODCALLTYPE CMenuDeskBar::OnFocusChangeIS(IUnknown *punkObj, BOOL
|
|||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CMenuDeskBar::QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds,
|
||||
OLECMD prgCmds[], OLECMDTEXT *pCmdText)
|
||||
OLECMD prgCmds [], OLECMDTEXT *pCmdText)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
@ -512,7 +512,7 @@ HRESULT STDMETHODCALLTYPE CMenuDeskBar::QueryService(REFGUID guidService, REFIID
|
|||
if (m_Site == NULL)
|
||||
return E_FAIL;
|
||||
|
||||
if (IsEqualGUID(guidService,SID_SMenuPopup))
|
||||
if (IsEqualGUID(guidService, SID_SMenuPopup))
|
||||
{
|
||||
return this->QueryInterface(riid, ppvObject);
|
||||
}
|
||||
|
@ -633,7 +633,7 @@ LRESULT CMenuDeskBar::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHan
|
|||
::GetObject(m_Banner, sizeof(bm), &bm);
|
||||
rc.left += bm.bmWidth;
|
||||
}
|
||||
|
||||
|
||||
::SetWindowPos(clientWnd, NULL, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, 0);
|
||||
}
|
||||
|
||||
|
@ -703,10 +703,10 @@ LRESULT CMenuDeskBar::OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHa
|
|||
|
||||
TRACE("Painting banner: %d by %d\n", bm.bmWidth, bm.bmHeight);
|
||||
|
||||
if (!::StretchBlt(hdc, 0, 0, bx, cy-by, hdcMem, 0, 0, bx, 1, SRCCOPY))
|
||||
if (!::StretchBlt(hdc, 0, 0, bx, cy - by, hdcMem, 0, 0, bx, 1, SRCCOPY))
|
||||
WARN("StretchBlt failed\n");
|
||||
|
||||
if (!::BitBlt(hdc, 0, cy-by, bx, by, hdcMem, 0, 0, SRCCOPY))
|
||||
if (!::BitBlt(hdc, 0, cy - by, bx, by, hdcMem, 0, 0, SRCCOPY))
|
||||
WARN("BitBlt failed\n");
|
||||
|
||||
::SelectObject(hdcMem, hbmOld);
|
||||
|
@ -754,7 +754,7 @@ HRESULT STDMETHODCALLTYPE CMenuDeskBar::Popup(POINTL *ppt, RECTL *prcExclude, MP
|
|||
hr = IUnknown_QueryServiceExec(m_Client, SID_SMenuBandChild, &CLSID_MenuBand, CMD, CMD_EXEC_OPT, NULL, NULL);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
|
||||
::AdjustWindowRect(&rc, ::GetWindowLong(m_hWnd, GWL_STYLE), FALSE);
|
||||
rc.right -= rc.left;
|
||||
rc.bottom -= rc.top;
|
||||
|
@ -812,7 +812,7 @@ HRESULT STDMETHODCALLTYPE CMenuDeskBar::GetIconSize(THIS_ DWORD* piIcon)
|
|||
HRESULT STDMETHODCALLTYPE CMenuDeskBar::SetBitmap(THIS_ HBITMAP hBitmap)
|
||||
{
|
||||
m_Banner = hBitmap;
|
||||
|
||||
|
||||
BOOL bHandled;
|
||||
OnSize(WM_SIZE, 0, 0, bHandled);
|
||||
|
||||
|
@ -841,7 +841,7 @@ HRESULT STDMETHODCALLTYPE CMenuDeskBar::OnSelect(
|
|||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
SetWindowPos(m_hWnd, 0,0,0,0, SWP_HIDEWINDOW | SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER);
|
||||
SetWindowPos(m_hWnd, 0, 0, 0, 0, SWP_HIDEWINDOW | SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER);
|
||||
|
||||
UIActivateIO(FALSE, NULL);
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@ public:
|
|||
CMenuSite();
|
||||
~CMenuSite() {}
|
||||
|
||||
DECLARE_WND_CLASS_EX(_T("MenuSite"), 0, COLOR_WINDOW)
|
||||
DECLARE_WND_CLASS_EX(_T("MenuSite"), 0, COLOR_MENU)
|
||||
|
||||
DECLARE_NOT_AGGREGATABLE(CMenuSite)
|
||||
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
||||
|
@ -88,7 +88,7 @@ public:
|
|||
virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *phwnd);
|
||||
|
||||
// IOleCommandTarget
|
||||
virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID * pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText);
|
||||
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
|
||||
|
@ -119,7 +119,7 @@ public:
|
|||
virtual HRESULT STDMETHODCALLTYPE SetModeDBC(DWORD dwMode);
|
||||
|
||||
private:
|
||||
IUnknown * ToIUnknown() { return (IDeskBarClient*)this; }
|
||||
IUnknown * ToIUnknown() { return static_cast<IDeskBarClient*>(this); }
|
||||
};
|
||||
|
||||
extern "C"
|
||||
|
@ -421,6 +421,7 @@ BOOL CMenuSite::ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
|
|||
{
|
||||
RECT Rect = { 0 };
|
||||
GetClientRect(&Rect);
|
||||
Rect.right = Rect.right;
|
||||
pMenuPopup->OnPosRectChangeDB(&Rect);
|
||||
}
|
||||
}
|
||||
|
@ -428,7 +429,7 @@ BOOL CMenuSite::ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
|
|||
lResult = 1;
|
||||
break;
|
||||
case WM_NOTIFY:
|
||||
hWndTarget = ((NMHDR *)lParam)->hwndFrom;
|
||||
hWndTarget = reinterpret_cast<LPNMHDR>(lParam)->hwndFrom;
|
||||
break;
|
||||
case WM_COMMAND:
|
||||
hWndTarget = (HWND) lParam;
|
||||
|
|
|
@ -52,12 +52,12 @@
|
|||
* 4. showing the programs start menu is SLOW compared to windows. this needs some investigation
|
||||
*/
|
||||
|
||||
class CShellMenuCallback :
|
||||
class CShellMenuCallback :
|
||||
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
||||
public IShellMenuCallback
|
||||
public IShellMenuCallback
|
||||
{
|
||||
private:
|
||||
|
||||
|
||||
HWND m_hwndTray;
|
||||
CComPtr<IShellMenu> m_pShellMenu;
|
||||
CComPtr<IBandSite> m_pBandSite;
|
||||
|
@ -87,7 +87,7 @@ private:
|
|||
HRESULT OnGetInfo(LPSMDATA psmd, SMINFO *psminfo)
|
||||
{
|
||||
int iconIndex = 0;
|
||||
|
||||
|
||||
switch (psmd->uId)
|
||||
{
|
||||
case IDM_PROGRAMS: iconIndex = -20; break;
|
||||
|
@ -114,7 +114,7 @@ private:
|
|||
if (iconIndex)
|
||||
{
|
||||
if ((psminfo->dwMask & SMIM_ICON) != 0)
|
||||
psminfo->iIcon = Shell_GetCachedImageIndex(L"shell32.dll", iconIndex, FALSE);
|
||||
psminfo->iIcon = Shell_GetCachedImageIndex(L"shell32.dll", iconIndex, FALSE);
|
||||
#ifdef TEST_TRACKPOPUPMENU_SUBMENUS
|
||||
if ((psminfo->dwMask & SMIM_FLAGS) != 0)
|
||||
psminfo->dwFlags |= SMIF_TRACKPOPUP;
|
||||
|
@ -128,7 +128,7 @@ private:
|
|||
HRESULT hr;
|
||||
int csidl = 0;
|
||||
IShellMenu *pShellMenu;
|
||||
|
||||
|
||||
switch (psmd->uId)
|
||||
{
|
||||
case IDM_PROGRAMS: csidl = CSIDL_PROGRAMS; break;
|
||||
|
@ -163,7 +163,7 @@ private:
|
|||
MENUITEMINFO mii;
|
||||
mii.cbSize = sizeof(mii);
|
||||
mii.fMask = MIIM_SUBMENU;
|
||||
if (GetMenuItemInfoW( psmd->hmenu, psmd->uId, FALSE, &mii))
|
||||
if (GetMenuItemInfoW(psmd->hmenu, psmd->uId, FALSE, &mii))
|
||||
{
|
||||
hr = pShellMenu->SetMenu(mii.hSubMenu, NULL, SMSET_BOTTOM);
|
||||
}
|
||||
|
@ -174,7 +174,7 @@ private:
|
|||
HRESULT OnGetContextMenu(LPSMDATA psmd, REFIID iid, void ** pv)
|
||||
{
|
||||
if (psmd->uId == IDM_PROGRAMS ||
|
||||
psmd->uId == IDM_CONTROLPANEL ||
|
||||
psmd->uId == IDM_CONTROLPANEL ||
|
||||
psmd->uId == IDM_NETWORKCONNECTIONS ||
|
||||
psmd->uId == IDM_PRINTERSANDFAXES)
|
||||
{
|
||||
|
@ -186,9 +186,9 @@ private:
|
|||
|
||||
HRESULT OnGetObject(LPSMDATA psmd, REFIID iid, void ** pv)
|
||||
{
|
||||
if (IsEqualIID(iid , IID_IShellMenu))
|
||||
if (IsEqualIID(iid, IID_IShellMenu))
|
||||
return OnGetSubMenu(psmd, iid, pv);
|
||||
else if (IsEqualIID( iid, IID_IContextMenu))
|
||||
else if (IsEqualIID(iid, IID_IContextMenu))
|
||||
return OnGetContextMenu(psmd, iid, pv);
|
||||
|
||||
return S_FALSE;
|
||||
|
@ -196,14 +196,14 @@ private:
|
|||
|
||||
HRESULT OnExec(LPSMDATA psmd)
|
||||
{
|
||||
if(psmd->uId == IDM_CONTROLPANEL)
|
||||
ShellExecuteW(NULL, L"open", L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}", NULL,NULL, 1);
|
||||
else if(psmd->uId == IDM_NETWORKCONNECTIONS)
|
||||
ShellExecuteW(NULL, L"open", L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{7007ACC7-3202-11D1-AAD2-00805FC1270E}", NULL,NULL, 1);
|
||||
else if(psmd->uId == IDM_PRINTERSANDFAXES)
|
||||
ShellExecuteW(NULL, L"open", L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{2227A280-3AEA-1069-A2DE-08002B30309D}", NULL,NULL, 1);
|
||||
if (psmd->uId == IDM_CONTROLPANEL)
|
||||
ShellExecuteW(NULL, L"open", L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}", NULL, NULL, 1);
|
||||
else if (psmd->uId == IDM_NETWORKCONNECTIONS)
|
||||
ShellExecuteW(NULL, L"open", L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{7007ACC7-3202-11D1-AAD2-00805FC1270E}", NULL, NULL, 1);
|
||||
else if (psmd->uId == IDM_PRINTERSANDFAXES)
|
||||
ShellExecuteW(NULL, L"open", L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{2227A280-3AEA-1069-A2DE-08002B30309D}", NULL, NULL, 1);
|
||||
else
|
||||
PostMessageW( m_hwndTray, WM_COMMAND, psmd->uId, 0);
|
||||
PostMessageW(m_hwndTray, WM_COMMAND, psmd->uId, 0);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
@ -216,7 +216,7 @@ public:
|
|||
COM_INTERFACE_ENTRY_IID(IID_IShellMenuCallback, IShellMenuCallback)
|
||||
END_COM_MAP()
|
||||
|
||||
void Initialize(
|
||||
void Initialize(
|
||||
IShellMenu* pShellMenu,
|
||||
IBandSite* pBandSite,
|
||||
IDeskBar* pDeskBar)
|
||||
|
@ -242,27 +242,25 @@ public:
|
|||
switch (uMsg)
|
||||
{
|
||||
case SMC_INITMENU:
|
||||
return OnInitMenu();
|
||||
return OnInitMenu();
|
||||
case SMC_GETINFO:
|
||||
return OnGetInfo(psmd, reinterpret_cast<SMINFO*>(lParam));
|
||||
return OnGetInfo(psmd, reinterpret_cast<SMINFO*>(lParam));
|
||||
case SMC_GETOBJECT:
|
||||
return OnGetObject(psmd, *reinterpret_cast<IID *>(wParam), reinterpret_cast<void **>(lParam));
|
||||
return OnGetObject(psmd, *reinterpret_cast<IID *>(wParam), reinterpret_cast<void **>(lParam));
|
||||
case SMC_EXEC:
|
||||
return OnExec(psmd);
|
||||
return OnExec(psmd);
|
||||
case SMC_SFEXEC:
|
||||
m_pTrayPriv->Execute(psmd->psf, psmd->pidlItem);
|
||||
break;
|
||||
m_pTrayPriv->Execute(psmd->psf, psmd->pidlItem);
|
||||
break;
|
||||
}
|
||||
|
||||
return S_FALSE;
|
||||
return S_FALSE;
|
||||
}
|
||||
};
|
||||
|
||||
extern "C"
|
||||
extern "C"
|
||||
HRESULT
|
||||
CStartMenu_Constructor(
|
||||
REFIID riid,
|
||||
void **ppv)
|
||||
CStartMenu_Constructor(REFIID riid, void **ppv)
|
||||
{
|
||||
IShellMenu* pShellMenu;
|
||||
IBandSite* pBandSite;
|
||||
|
@ -305,7 +303,7 @@ CStartMenu_Constructor(
|
|||
#endif
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
|
||||
CComObject<CShellMenuCallback> *pCallback;
|
||||
hr = CComObject<CShellMenuCallback>::CreateInstance(&pCallback);
|
||||
if (FAILED(hr))
|
||||
|
@ -322,15 +320,15 @@ CStartMenu_Constructor(
|
|||
/* IID_IAugmentedShellFolder2 8db3b3f4-6cfe-11d1-8ae9-00c04fd918d0 */
|
||||
hr = SHGetFolderLocation(NULL, CSIDL_STARTMENU, 0, 0, &pidlStartMenu);
|
||||
hr = SHGetDesktopFolder(&shellFolder);
|
||||
hr = shellFolder->BindToObject(pidlStartMenu, NULL, IID_IShellFolder, (void**)&psfStartMenu);
|
||||
hr = shellFolder->BindToObject(pidlStartMenu, NULL, IID_IShellFolder, (void**) &psfStartMenu);
|
||||
|
||||
hr = pShellMenu->SetShellFolder(psfStartMenu, NULL, NULL, 0);
|
||||
|
||||
hr = pDeskBar->SetClient(pBandSite);
|
||||
|
||||
hr = pDeskBar->SetClient(pBandSite);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
hr = pBandSite->AddBand(pShellMenu);
|
||||
hr = pBandSite->AddBand(pShellMenu);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue