* 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:
David Quintana 2014-02-18 10:26:50 +00:00
parent 46e9b4d1e3
commit 2b63295fea
5 changed files with 202 additions and 303 deletions

View file

@ -26,9 +26,9 @@ BOOL WINAPI SetShellWindowEx(HWND, HWND);
#define SHDESK_TAG 0x4b534544 #define SHDESK_TAG 0x4b534544
static const WCHAR szProgmanClassName[] = {'P','r','o','g','m','a','n'}; static const WCHAR szProgmanClassName [] = { 'P', 'r', 'o', 'g', 'm', 'a', 'n' };
static const WCHAR szProgmanWindowName[] = { static const WCHAR szProgmanWindowName [] = {
'P','r','o','g','r','a','m',' ','M','a','n','a','g','e','r' 'P', 'r', 'o', 'g', 'r', 'a', 'm', ' ', 'M', 'a', 'n', 'a', 'g', 'e', 'r'
}; };
class CDesktopBrowser : class CDesktopBrowser :
@ -52,7 +52,7 @@ public:
CDesktopBrowser(); CDesktopBrowser();
~CDesktopBrowser(); ~CDesktopBrowser();
HRESULT Initialize(HWND hWndx, IShellDesktopTray *ShellDeskx); HRESULT Initialize(HWND hWndx, IShellDesktopTray *ShellDeskx);
HWND FindDesktopListView (); HWND FindDesktopListView();
BOOL CreateDeskWnd(); BOOL CreateDeskWnd();
HWND DesktopGetWindowControl(IN UINT id); HWND DesktopGetWindowControl(IN UINT id);
static LRESULT CALLBACK ProgmanWindowProc(IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam); 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); virtual HRESULT STDMETHODCALLTYPE SetToolbarItems(LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags);
// *** ICommDlgBrowser methods *** // *** ICommDlgBrowser methods ***
virtual HRESULT STDMETHODCALLTYPE OnDefaultCommand (struct IShellView *ppshv); virtual HRESULT STDMETHODCALLTYPE OnDefaultCommand(struct IShellView *ppshv);
virtual HRESULT STDMETHODCALLTYPE OnStateChange (struct IShellView *ppshv, ULONG uChange); virtual HRESULT STDMETHODCALLTYPE OnStateChange(struct IShellView *ppshv, ULONG uChange);
virtual HRESULT STDMETHODCALLTYPE IncludeObject (struct IShellView *ppshv, LPCITEMIDLIST pidl); virtual HRESULT STDMETHODCALLTYPE IncludeObject(struct IShellView *ppshv, LPCITEMIDLIST pidl);
// *** IServiceProvider methods *** // *** IServiceProvider methods ***
virtual HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid, void **ppvObject); virtual HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid, void **ppvObject);
BEGIN_COM_MAP(CDesktopBrowser) BEGIN_COM_MAP(CDesktopBrowser)
COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleWindow) COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleWindow)
COM_INTERFACE_ENTRY_IID(IID_IShellBrowser, IShellBrowser) COM_INTERFACE_ENTRY_IID(IID_IShellBrowser, IShellBrowser)
COM_INTERFACE_ENTRY_IID(IID_ICommDlgBrowser, ICommDlgBrowser) COM_INTERFACE_ENTRY_IID(IID_ICommDlgBrowser, ICommDlgBrowser)
COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider) COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
END_COM_MAP() END_COM_MAP()
}; };
CDesktopBrowser::CDesktopBrowser() CDesktopBrowser::CDesktopBrowser()
@ -163,7 +163,7 @@ static CDesktopBrowser *SHDESK_Create(HWND hWnd, LPCREATESTRUCT lpCreateStruct)
CComObject<CDesktopBrowser> *pThis; CComObject<CDesktopBrowser> *pThis;
HRESULT hRet; HRESULT hRet;
ShellDesk = (IShellDesktopTray *)lpCreateStruct->lpCreateParams; ShellDesk = static_cast<IShellDesktopTray *>(lpCreateStruct->lpCreateParams);
if (ShellDesk == NULL) if (ShellDesk == NULL)
{ {
WARN("No IShellDesk interface provided!"); WARN("No IShellDesk interface provided!");
@ -185,7 +185,7 @@ static CDesktopBrowser *SHDESK_Create(HWND hWnd, LPCREATESTRUCT lpCreateStruct)
return pThis; return pThis;
} }
HWND CDesktopBrowser::FindDesktopListView () HWND CDesktopBrowser::FindDesktopListView()
{ {
return FindWindowExW(hWndShellView, NULL, WC_LISTVIEW, NULL); return FindWindowExW(hWndShellView, NULL, WC_LISTVIEW, NULL);
} }
@ -203,7 +203,7 @@ BOOL CDesktopBrowser::CreateDeskWnd()
fs.ViewMode = FVM_ICON; fs.ViewMode = FVM_ICON;
fs.fFlags = FWF_DESKTOP | FWF_NOCLIENTEDGE | FWF_NOSCROLL | FWF_TRANSPARENT; fs.fFlags = FWF_DESKTOP | FWF_NOCLIENTEDGE | FWF_NOSCROLL | FWF_TRANSPARENT;
hRet = DesktopView->CreateViewWindow(NULL, &fs, (IShellBrowser *)this, &rcClient, &hWndShellView); hRet = DesktopView->CreateViewWindow(NULL, &fs, static_cast<IShellBrowser *>(this), &rcClient, &hWndShellView);
if (!SUCCEEDED(hRet)) if (!SUCCEEDED(hRet))
return FALSE; return FALSE;
@ -265,7 +265,7 @@ HRESULT STDMETHODCALLTYPE CDesktopBrowser::TranslateAcceleratorSB(LPMSG lpmsg, W
return S_FALSE; 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) HRESULT STDMETHODCALLTYPE CDesktopBrowser::BrowseObject(LPCITEMIDLIST pidl, UINT wFlags)
{ {
@ -321,10 +321,7 @@ HRESULT STDMETHODCALLTYPE CDesktopBrowser::SendControlMsg(UINT id, UINT uMsg, WP
hWnd = DesktopGetWindowControl(id); hWnd = DesktopGetWindowControl(id);
if (hWnd != NULL) if (hWnd != NULL)
{ {
*pret = SendMessageW(hWnd, *pret = SendMessageW(hWnd, uMsg, wParam, lParam);
uMsg,
wParam,
lParam);
return S_OK; return S_OK;
} }
@ -395,8 +392,7 @@ LRESULT CALLBACK CDesktopBrowser::ProgmanWindowProc(IN HWND hwnd, IN UINT uMsg,
if (uMsg != WM_NCCREATE) if (uMsg != WM_NCCREATE)
{ {
pThis = (CDesktopBrowser*)GetWindowLongPtrW(hwnd, pThis = reinterpret_cast<CDesktopBrowser*>(GetWindowLongPtrW(hwnd, 0));
0);
if (pThis == NULL) if (pThis == NULL)
goto DefMsgHandler; goto DefMsgHandler;
} }
@ -406,10 +402,10 @@ LRESULT CALLBACK CDesktopBrowser::ProgmanWindowProc(IN HWND hwnd, IN UINT uMsg,
switch (uMsg) switch (uMsg)
{ {
case WM_ERASEBKGND: case WM_ERASEBKGND:
return (LRESULT)PaintDesktop((HDC)wParam); return (LRESULT) PaintDesktop((HDC) wParam);
case WM_GETISHELLBROWSER: case WM_GETISHELLBROWSER:
Ret = (LRESULT)((IShellBrowser *)pThis); Ret = reinterpret_cast<LRESULT>(static_cast<IShellBrowser *>(pThis));
break; break;
case WM_SIZE: case WM_SIZE:
@ -460,7 +456,7 @@ LRESULT CALLBACK CDesktopBrowser::ProgmanWindowProc(IN HWND hwnd, IN UINT uMsg,
case WM_NCCREATE: case WM_NCCREATE:
{ {
LPCREATESTRUCT CreateStruct = (LPCREATESTRUCT)lParam; LPCREATESTRUCT CreateStruct = (LPCREATESTRUCT) lParam;
pThis = SHDESK_Create(hwnd, CreateStruct); pThis = SHDESK_Create(hwnd, CreateStruct);
if (pThis == NULL) if (pThis == NULL)
{ {
@ -470,7 +466,7 @@ LRESULT CALLBACK CDesktopBrowser::ProgmanWindowProc(IN HWND hwnd, IN UINT uMsg,
SetWindowLongPtrW(hwnd, SetWindowLongPtrW(hwnd,
0, 0,
(LONG_PTR)pThis); (LONG_PTR) pThis);
Ret = TRUE; Ret = TRUE;
break; break;
} }
@ -482,7 +478,7 @@ LRESULT CALLBACK CDesktopBrowser::ProgmanWindowProc(IN HWND hwnd, IN UINT uMsg,
} }
default: default:
DefMsgHandler: DefMsgHandler :
Ret = DefWindowProcW(hwnd, uMsg, wParam, lParam); Ret = DefWindowProcW(hwnd, uMsg, wParam, lParam);
break; break;
} }
@ -503,7 +499,7 @@ RegisterProgmanWindowClass(VOID)
wcProgman.hInstance = shell32_hInstance; wcProgman.hInstance = shell32_hInstance;
wcProgman.hIcon = NULL; wcProgman.hIcon = NULL;
wcProgman.hCursor = LoadCursorW(NULL, IDC_ARROW); wcProgman.hCursor = LoadCursorW(NULL, IDC_ARROW);
wcProgman.hbrBackground = (HBRUSH)(COLOR_BACKGROUND + 1); wcProgman.hbrBackground = (HBRUSH) (COLOR_BACKGROUND + 1);
wcProgman.lpszMenuName = NULL; wcProgman.lpszMenuName = NULL;
wcProgman.lpszClassName = szProgmanClassName; wcProgman.lpszClassName = szProgmanClassName;
@ -547,9 +543,9 @@ HANDLE WINAPI SHCreateDesktop(IShellDesktopTray *ShellDesk)
hWndDesk = CreateWindowExW(0, szProgmanClassName, szProgmanWindowName, hWndDesk = CreateWindowExW(0, szProgmanClassName, szProgmanWindowName,
WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
rcDesk.left, rcDesk.top, rcDesk.right, rcDesk.bottom, rcDesk.left, rcDesk.top, rcDesk.right, rcDesk.bottom,
NULL, NULL, shell32_hInstance, (LPVOID)ShellDesk); NULL, NULL, shell32_hInstance, (LPVOID) ShellDesk);
if (hWndDesk != NULL) if (hWndDesk != NULL)
return (HANDLE)GetWindowLongPtrW(hWndDesk, 0); return (HANDLE) GetWindowLongPtrW(hWndDesk, 0);
return NULL; return NULL;
} }
@ -560,7 +556,7 @@ HANDLE WINAPI SHCreateDesktop(IShellDesktopTray *ShellDesk)
*/ */
BOOL WINAPI SHDesktopMessageLoop(HANDLE hDesktop) BOOL WINAPI SHDesktopMessageLoop(HANDLE hDesktop)
{ {
CDesktopBrowser *Desk = (CDesktopBrowser *)hDesktop; CDesktopBrowser *Desk = reinterpret_cast<CDesktopBrowser *>(hDesktop);
if (Desk == NULL || Desk->Tag != SHDESK_TAG) if (Desk == NULL || Desk->Tag != SHDESK_TAG)
{ {

View file

@ -56,6 +56,7 @@ public:
HRESULT OnHotItemChange(const NMTBHOTITEM * hot); HRESULT OnHotItemChange(const NMTBHOTITEM * hot);
HRESULT PopupSubMenu(UINT index, IShellMenu* childShellMenu); HRESULT PopupSubMenu(UINT index, IShellMenu* childShellMenu);
HRESULT DoContextMenu(IContextMenu* contextMenu);
static LRESULT CALLBACK s_SubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK s_SubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
protected: protected:
@ -281,7 +282,7 @@ public:
END_COM_MAP() END_COM_MAP()
private: 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" extern "C"
@ -850,14 +851,14 @@ HRESULT CMenuToolbarBase::Close()
HRESULT CMenuToolbarBase::CreateToolbar(HWND hwndParent, DWORD dwFlags) 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 | TBSTYLE_CUSTOMERASE |
CCS_NODIVIDER | CCS_NOPARENTALIGN | CCS_NORESIZE | CCS_TOP; CCS_NODIVIDER | CCS_NOPARENTALIGN | CCS_NORESIZE | CCS_TOP;
LONG tbExStyles = TBSTYLE_EX_DOUBLEBUFFER; LONG tbExStyles = TBSTYLE_EX_DOUBLEBUFFER;
if (dwFlags & SMINIT_VERTICAL) if (dwFlags & SMINIT_VERTICAL)
{ {
tbStyles |= CCS_VERT; tbStyles |= CCS_VERT;
tbExStyles |= TBSTYLE_EX_VERTICAL; tbExStyles |= TBSTYLE_EX_VERTICAL | WS_EX_TOOLWINDOW;
} }
RECT rc; RECT rc;
@ -921,7 +922,7 @@ HRESULT CMenuToolbarBase::GetWindow(HWND *phwnd)
LRESULT CALLBACK CMenuToolbarBase::s_SubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 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); return pthis->SubclassProc(hWnd, uMsg, wParam, lParam);
} }
@ -1023,6 +1024,36 @@ HRESULT CMenuToolbarBase::PopupSubMenu(UINT index, IShellMenu* childShellMenu)
return S_OK; 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 BOOL
AllocAndGetMenuString(HMENU hMenu, UINT ItemIDByPosition, WCHAR** String) AllocAndGetMenuString(HMENU hMenu, UINT ItemIDByPosition, WCHAR** String)
{ {
@ -1095,7 +1126,7 @@ HRESULT CMenuStaticToolbar::FillToolbar()
if (!AllocAndGetMenuString(m_hmenu, i, &MenuString)) if (!AllocAndGetMenuString(m_hmenu, i, &MenuString))
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
if (::GetSubMenu(m_hmenu, i) != NULL) if (::GetSubMenu(m_hmenu, i) != NULL)
tbb.fsStyle |= BTNS_WHOLEDROPDOWN; tbb.fsStyle |= BTNS_DROPDOWN;
tbb.iString = (INT_PTR) MenuString; tbb.iString = (INT_PTR) MenuString;
tbb.idCommand = info.wID; tbb.idCommand = info.wID;
@ -1126,47 +1157,7 @@ HRESULT CMenuStaticToolbar::OnContextMenu(NMMOUSE * rclick)
if (hr != S_OK) if (hr != S_OK)
return hr; return hr;
HMENU hPopup = CreatePopupMenu(); return DoContextMenu(contextMenu);
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;
} }
HRESULT CMenuStaticToolbar::OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResult) HRESULT CMenuStaticToolbar::OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResult)
@ -1246,7 +1237,7 @@ HRESULT CMenuSFToolbar::FillToolbar()
if (attrs != 0) if (attrs != 0)
{ {
tbb.fsStyle |= BTNS_WHOLEDROPDOWN; tbb.fsStyle |= BTNS_DROPDOWN;
} }
tbb.idCommand = i++; tbb.idCommand = i++;
@ -1319,59 +1310,20 @@ LPITEMIDLIST CMenuSFToolbar::GetPidlFromId(UINT uItem, INT* pIndex)
if (!SendMessage(m_hwnd, TB_GETBUTTON, index, (LPARAM) &btn)) if (!SendMessage(m_hwnd, TB_GETBUTTON, index, (LPARAM) &btn))
return NULL; return NULL;
return (LPITEMIDLIST)btn.dwData; return (LPITEMIDLIST) btn.dwData;
} }
HRESULT CMenuSFToolbar::OnContextMenu(NMMOUSE * rclick) HRESULT CMenuSFToolbar::OnContextMenu(NMMOUSE * rclick)
{ {
HRESULT hr; HRESULT hr;
CComPtr<IOleWindow> site;
CComPtr<IContextMenu> contextMenu; CComPtr<IContextMenu> contextMenu;
LPCITEMIDLIST pidl = reinterpret_cast<LPCITEMIDLIST>(rclick->dwItemData);
hr = m_menuBand->GetSite(IID_PPV_ARG(IOleWindow, &site)); hr = m_shellFolder->GetUIObjectOf(m_hwnd, 1, &pidl, IID_IContextMenu, NULL, reinterpret_cast<VOID **>(&contextMenu));
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);
if (hr != S_OK) if (hr != S_OK)
return hr; return hr;
HMENU hPopup = CreatePopupMenu(); return DoContextMenu(contextMenu);
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;
} }
HRESULT CMenuSFToolbar::OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResult) HRESULT CMenuSFToolbar::OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResult)
@ -1581,8 +1533,6 @@ HRESULT STDMETHODCALLTYPE CMenuBand::GetWindow(
HRESULT STDMETHODCALLTYPE CMenuBand::OnPosRectChangeDB(RECT *prc) HRESULT STDMETHODCALLTYPE CMenuBand::OnPosRectChangeDB(RECT *prc)
{ {
SIZE sizeStaticX = { 0 };
SIZE sizeShlFldX = { 0 };
SIZE sizeStaticY = { 0 }; SIZE sizeStaticY = { 0 };
SIZE sizeShlFldY = { 0 }; SIZE sizeShlFldY = { 0 };
HWND hwndStatic = NULL; HWND hwndStatic = NULL;
@ -1604,8 +1554,6 @@ HRESULT STDMETHODCALLTYPE CMenuBand::OnPosRectChangeDB(RECT *prc)
if (hwndStatic) SendMessageW(hwndStatic, TB_GETIDEALSIZE, TRUE, (LPARAM) &sizeStaticY); if (hwndStatic) SendMessageW(hwndStatic, TB_GETIDEALSIZE, TRUE, (LPARAM) &sizeStaticY);
if (hwndShlFld) SendMessageW(hwndShlFld, TB_GETIDEALSIZE, TRUE, (LPARAM) &sizeShlFldY); 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); 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; return S_OK;
case WM_NOTIFY: case WM_NOTIFY:
NMHDR * hdr = (LPNMHDR) lParam; NMHDR * hdr = reinterpret_cast<LPNMHDR>(lParam);
NMTBCUSTOMDRAW * cdraw; NMTBCUSTOMDRAW * cdraw;
NMTBHOTITEM * hot; NMTBHOTITEM * hot;
NMMOUSE * rclick; NMMOUSE * rclick;
switch (hdr->code) switch (hdr->code)
{ {
case TBN_HOTITEMCHANGE: case TBN_HOTITEMCHANGE:
hot = (NMTBHOTITEM*) hdr; hot = reinterpret_cast<LPNMTBHOTITEM>(hdr);
if (m_staticToolbar && m_staticToolbar->IsWindowOwner(hWnd)) if (m_staticToolbar && m_staticToolbar->IsWindowOwner(hWnd))
{ {
@ -1980,7 +1928,7 @@ HRESULT STDMETHODCALLTYPE CMenuBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wPa
return S_OK; return S_OK;
case NM_RCLICK: case NM_RCLICK:
rclick = (LPNMMOUSE) hdr; rclick = reinterpret_cast<LPNMMOUSE>(hdr);
if (m_staticToolbar && m_staticToolbar->IsWindowOwner(hWnd)) if (m_staticToolbar && m_staticToolbar->IsWindowOwner(hWnd))
{ {
@ -1994,7 +1942,7 @@ HRESULT STDMETHODCALLTYPE CMenuBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wPa
return S_OK; return S_OK;
case NM_CUSTOMDRAW: case NM_CUSTOMDRAW:
cdraw = (LPNMTBCUSTOMDRAW) hdr; cdraw = reinterpret_cast<LPNMTBCUSTOMDRAW>(hdr);
switch (cdraw->nmcd.dwDrawStage) switch (cdraw->nmcd.dwDrawStage)
{ {
case CDDS_PREPAINT: case CDDS_PREPAINT:
@ -2121,35 +2069,17 @@ HRESULT STDMETHODCALLTYPE CMenuBand::IsEmpty(THIS)
return S_OK; 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 _CallCB(uMsg, wParam, lParam, id);
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;
} }
HRESULT CMenuBand::CallCBWithPidl(LPITEMIDLIST pidl, UINT uMsg, WPARAM wParam, LPARAM lParam) 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) if (!m_psmc)
return S_FALSE; return S_FALSE;
@ -2158,7 +2088,8 @@ HRESULT CMenuBand::CallCBWithPidl(LPITEMIDLIST pidl, UINT uMsg, WPARAM wParam, L
GetWindow(&hwnd); GetWindow(&hwnd);
SMDATA smData = { 0 }; SMDATA smData = { 0 };
smData.punk = (IShellMenu2*)this; smData.punk = static_cast<IShellMenu2*>(this);
smData.uId = id;
smData.uIdParent = m_uId; smData.uIdParent = m_uId;
smData.uIdAncestor = m_uIdAncestor; smData.uIdAncestor = m_uIdAncestor;
smData.hwnd = hwnd; smData.hwnd = hwnd;
@ -2176,31 +2107,4 @@ HRESULT CMenuBand::CallCBWithPidl(LPITEMIDLIST pidl, UINT uMsg, WPARAM wParam, L
smData.psf->Release(); smData.psf->Release();
return hr; 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 #endif

View file

@ -480,7 +480,7 @@ HRESULT STDMETHODCALLTYPE CMenuDeskBar::OnFocusChangeIS(IUnknown *punkObj, BOOL
} }
HRESULT STDMETHODCALLTYPE CMenuDeskBar::QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, HRESULT STDMETHODCALLTYPE CMenuDeskBar::QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds,
OLECMD prgCmds[], OLECMDTEXT *pCmdText) OLECMD prgCmds [], OLECMDTEXT *pCmdText)
{ {
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -512,7 +512,7 @@ HRESULT STDMETHODCALLTYPE CMenuDeskBar::QueryService(REFGUID guidService, REFIID
if (m_Site == NULL) if (m_Site == NULL)
return E_FAIL; return E_FAIL;
if (IsEqualGUID(guidService,SID_SMenuPopup)) if (IsEqualGUID(guidService, SID_SMenuPopup))
{ {
return this->QueryInterface(riid, ppvObject); return this->QueryInterface(riid, ppvObject);
} }
@ -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); 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"); 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"); WARN("BitBlt failed\n");
::SelectObject(hdcMem, hbmOld); ::SelectObject(hdcMem, hbmOld);
@ -841,7 +841,7 @@ HRESULT STDMETHODCALLTYPE CMenuDeskBar::OnSelect(
if (FAILED(hr)) if (FAILED(hr))
return 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); UIActivateIO(FALSE, NULL);
} }

View file

@ -58,7 +58,7 @@ public:
CMenuSite(); CMenuSite();
~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_NOT_AGGREGATABLE(CMenuSite)
DECLARE_PROTECT_FINAL_CONSTRUCT() DECLARE_PROTECT_FINAL_CONSTRUCT()
@ -88,7 +88,7 @@ public:
virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *phwnd); virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *phwnd);
// IOleCommandTarget // 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); virtual HRESULT STDMETHODCALLTYPE Exec(const GUID * pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut);
// IInputObject // IInputObject
@ -119,7 +119,7 @@ public:
virtual HRESULT STDMETHODCALLTYPE SetModeDBC(DWORD dwMode); virtual HRESULT STDMETHODCALLTYPE SetModeDBC(DWORD dwMode);
private: private:
IUnknown * ToIUnknown() { return (IDeskBarClient*)this; } IUnknown * ToIUnknown() { return static_cast<IDeskBarClient*>(this); }
}; };
extern "C" extern "C"
@ -421,6 +421,7 @@ BOOL CMenuSite::ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
{ {
RECT Rect = { 0 }; RECT Rect = { 0 };
GetClientRect(&Rect); GetClientRect(&Rect);
Rect.right = Rect.right;
pMenuPopup->OnPosRectChangeDB(&Rect); pMenuPopup->OnPosRectChangeDB(&Rect);
} }
} }
@ -428,7 +429,7 @@ BOOL CMenuSite::ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
lResult = 1; lResult = 1;
break; break;
case WM_NOTIFY: case WM_NOTIFY:
hWndTarget = ((NMHDR *)lParam)->hwndFrom; hWndTarget = reinterpret_cast<LPNMHDR>(lParam)->hwndFrom;
break; break;
case WM_COMMAND: case WM_COMMAND:
hWndTarget = (HWND) lParam; hWndTarget = (HWND) lParam;

View file

@ -163,7 +163,7 @@ private:
MENUITEMINFO mii; MENUITEMINFO mii;
mii.cbSize = sizeof(mii); mii.cbSize = sizeof(mii);
mii.fMask = MIIM_SUBMENU; 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); hr = pShellMenu->SetMenu(mii.hSubMenu, NULL, SMSET_BOTTOM);
} }
@ -186,9 +186,9 @@ private:
HRESULT OnGetObject(LPSMDATA psmd, REFIID iid, void ** pv) HRESULT OnGetObject(LPSMDATA psmd, REFIID iid, void ** pv)
{ {
if (IsEqualIID(iid , IID_IShellMenu)) if (IsEqualIID(iid, IID_IShellMenu))
return OnGetSubMenu(psmd, iid, pv); return OnGetSubMenu(psmd, iid, pv);
else if (IsEqualIID( iid, IID_IContextMenu)) else if (IsEqualIID(iid, IID_IContextMenu))
return OnGetContextMenu(psmd, iid, pv); return OnGetContextMenu(psmd, iid, pv);
return S_FALSE; return S_FALSE;
@ -196,14 +196,14 @@ private:
HRESULT OnExec(LPSMDATA psmd) HRESULT OnExec(LPSMDATA psmd)
{ {
if(psmd->uId == IDM_CONTROLPANEL) if (psmd->uId == IDM_CONTROLPANEL)
ShellExecuteW(NULL, L"open", L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}", NULL,NULL, 1); ShellExecuteW(NULL, L"open", L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}", NULL, NULL, 1);
else if(psmd->uId == IDM_NETWORKCONNECTIONS) 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); 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) 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); ShellExecuteW(NULL, L"open", L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{2227A280-3AEA-1069-A2DE-08002B30309D}", NULL, NULL, 1);
else else
PostMessageW( m_hwndTray, WM_COMMAND, psmd->uId, 0); PostMessageW(m_hwndTray, WM_COMMAND, psmd->uId, 0);
return S_OK; return S_OK;
} }
@ -260,9 +260,7 @@ public:
extern "C" extern "C"
HRESULT HRESULT
CStartMenu_Constructor( CStartMenu_Constructor(REFIID riid, void **ppv)
REFIID riid,
void **ppv)
{ {
IShellMenu* pShellMenu; IShellMenu* pShellMenu;
IBandSite* pBandSite; IBandSite* pBandSite;
@ -322,7 +320,7 @@ CStartMenu_Constructor(
/* IID_IAugmentedShellFolder2 8db3b3f4-6cfe-11d1-8ae9-00c04fd918d0 */ /* IID_IAugmentedShellFolder2 8db3b3f4-6cfe-11d1-8ae9-00c04fd918d0 */
hr = SHGetFolderLocation(NULL, CSIDL_STARTMENU, 0, 0, &pidlStartMenu); hr = SHGetFolderLocation(NULL, CSIDL_STARTMENU, 0, 0, &pidlStartMenu);
hr = SHGetDesktopFolder(&shellFolder); 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 = pShellMenu->SetShellFolder(psfStartMenu, NULL, NULL, 0);