diff --git a/base/shell/rshell/CDesktopBrowser.cpp b/base/shell/rshell/CDesktopBrowser.cpp index e43e61779d0..85b9a696015 100644 --- a/base/shell/rshell/CDesktopBrowser.cpp +++ b/base/shell/rshell/CDesktopBrowser.cpp @@ -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 *pThis; HRESULT hRet; - ShellDesk = (IShellDesktopTray *)lpCreateStruct->lpCreateParams; + ShellDesk = static_cast(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(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(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(static_cast(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(hDesktop); if (Desk == NULL || Desk->Tag != SHDESK_TAG) { diff --git a/base/shell/rshell/CMenuBand.cpp b/base/shell/rshell/CMenuBand.cpp index e5046beeda2..b8183171c01 100644 --- a/base/shell/rshell/CMenuBand.cpp +++ b/base/shell/rshell/CMenuBand.cpp @@ -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(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 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 site; CComPtr contextMenu; + LPCITEMIDLIST pidl = reinterpret_cast(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(&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 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(lParam); NMTBCUSTOMDRAW * cdraw; NMTBHOTITEM * hot; NMMOUSE * rclick; switch (hdr->code) { case TBN_HOTITEMCHANGE: - hot = (NMTBHOTITEM*) hdr; + hot = reinterpret_cast(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(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(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(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 \ No newline at end of file diff --git a/base/shell/rshell/CMenuDeskBar.cpp b/base/shell/rshell/CMenuDeskBar.cpp index 3f19753eb23..7de8cceb582 100644 --- a/base/shell/rshell/CMenuDeskBar.cpp +++ b/base/shell/rshell/CMenuDeskBar.cpp @@ -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); } diff --git a/base/shell/rshell/CMenuSite.cpp b/base/shell/rshell/CMenuSite.cpp index 4e901b8fc7c..ad5abffe904 100644 --- a/base/shell/rshell/CMenuSite.cpp +++ b/base/shell/rshell/CMenuSite.cpp @@ -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(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(lParam)->hwndFrom; break; case WM_COMMAND: hWndTarget = (HWND) lParam; diff --git a/base/shell/rshell/CStartMenu.cpp b/base/shell/rshell/CStartMenu.cpp index d6b67a4bbc1..14388bb1f8f 100644 --- a/base/shell/rshell/CStartMenu.cpp +++ b/base/shell/rshell/CStartMenu.cpp @@ -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, - public IShellMenuCallback + public IShellMenuCallback { private: - + HWND m_hwndTray; CComPtr m_pShellMenu; CComPtr 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(lParam)); + return OnGetInfo(psmd, reinterpret_cast(lParam)); case SMC_GETOBJECT: - return OnGetObject(psmd, *reinterpret_cast(wParam), reinterpret_cast(lParam)); + return OnGetObject(psmd, *reinterpret_cast(wParam), reinterpret_cast(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 *pCallback; hr = CComObject::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;