diff --git a/reactos/dll/shellext/qcklnch/CQuickLaunchBand.cpp b/reactos/dll/shellext/qcklnch/CQuickLaunchBand.cpp index b335da3991b..46c8e9c705f 100644 --- a/reactos/dll/shellext/qcklnch/CQuickLaunchBand.cpp +++ b/reactos/dll/shellext/qcklnch/CQuickLaunchBand.cpp @@ -67,26 +67,39 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0, //ATL Construct HRESULT CQuickLaunchBand::FinalConstruct() - { + { + //MessageBox(0, L"CQuickLaunchBand::FinalConstruct Begin!", L"Testing", MB_OK | MB_ICONINFORMATION); + HRESULT hr = CoCreateInstance(CLSID_ISFBand, NULL, CLSCTX_INPROC_SERVER, IID_IUnknown, (void**) &m_punkISFB); if (SUCCEEDED(hr)) - { + { + //MessageBox(0, L"CoCreateInstance success!", L"Testing", MB_OK | MB_ICONINFORMATION); + CComPtr pISFB; hr = m_punkISFB->QueryInterface(IID_IShellFolderBand, (void**) &pISFB); if (SUCCEEDED(hr)) { - MessageBox(0, L"CISFBand Init success!!", L"Testing", MB_OK | MB_ICONINFORMATION); + // MessageBox(0, L"IID_ISFBand query success!", L"Testing", MB_OK | MB_ICONINFORMATION); + CComPtr pISF; hr = SHGetDesktopFolder(&pISF); if (SUCCEEDED(hr)) { - pISFB->InitializeSFB(pISF, 0); - MessageBox(0, L"CISFBand Init success!!", L"Testing", MB_OK | MB_ICONINFORMATION); - } + //MessageBox(0, L"pisf success!", L"Testing", MB_OK | MB_ICONINFORMATION); + + //LPITEMIDLIST pidl; + //hr = SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &pidl); + if (SUCCEEDED(hr)) + { + //MessageBox(0, L"pidl success!", L"Testing", MB_OK | MB_ICONINFORMATION); + + pISFB->InitializeSFB(pISF, 0); + } + } } } - - MessageBox(0, L"CISFBand Init success!!", L"Testing", MB_OK | MB_ICONINFORMATION); + + // MessageBox(0, L"CQuickLaunchBand::FinalConstruct End!", L"Testing", MB_OK | MB_ICONINFORMATION); return hr; } @@ -95,7 +108,7 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0, { MessageBox(0, L"CQuickLaunchBand::SetSite called!", L"Testing", MB_OK | MB_ICONINFORMATION); - HRESULT hRet; + /* HRESULT hRet; HWND hwndParent; TRACE("CQuickLaunchBand::SetSite(0x%p)\n", pUnkSite); @@ -109,8 +122,13 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0, m_Site = pUnkSite; m_hWnd = CreateWindowEx(0, L"BUTTON", L">>", WS_CHILD, CW_USEDEFAULT, CW_USEDEFAULT, 50, 50, hwndParent, 0, m_hInstance, 0); SetWindowSubclass(hwndParent, MyWndProc, 0, 0); //when button is clicked, parent receives WM_COMMAND, and thus subclassed to show a test message box + */ + //Internal CISFBand Calls + CComPtr pIOWS; + HRESULT hr = m_punkISFB->QueryInterface(IID_IObjectWithSite, (void**)&pIOWS); + if (FAILED(hr)) return hr; - return S_OK; + return pIOWS->SetSite(pUnkSite); } HRESULT STDMETHODCALLTYPE CQuickLaunchBand::GetSite( @@ -120,14 +138,19 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0, //MessageBox(0, L"GetSite called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); TRACE("CQuickLaunchBand::GetSite(0x%p,0x%p)\n", riid, ppvSite); + /* HRESULT hr; if (m_Site != NULL) { - return m_Site->QueryInterface(riid, ppvSite); - } + hr = m_Site->QueryInterface(riid, ppvSite); + if (FAILED(hr)) return hr; + }*/ - *ppvSite = NULL; - - return E_FAIL; + //Internal CISFBand Calls + CComPtr pIOWS; + HRESULT hr = m_punkISFB->QueryInterface(IID_IObjectWithSite, (void**)&pIOWS); + if (FAILED(hr)) return hr; + + return pIOWS->GetSite(riid, ppvSite); } /*****************************************************************************/ @@ -136,13 +159,18 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0, { //MessageBox(0, L"GetWindow called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); - if (!m_hWnd) + /*if (!m_hWnd) return E_FAIL; if (!phwnd) return E_INVALIDARG; - *phwnd = m_hWnd; - - return S_OK; + *phwnd = m_hWnd;*/ + + //Internal CISFBand Calls + CComPtr pIDB; + HRESULT hr = m_punkISFB->QueryInterface(IID_IDeskBand, (void**)&pIDB); + if (FAILED(hr)) return hr; + + return pIDB->GetWindow(phwnd); } HRESULT STDMETHODCALLTYPE CQuickLaunchBand::ContextSensitiveHelp( @@ -151,7 +179,13 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0, /* FIXME: Implement */ //MessageBox(0, L"ContextSensitiveHelp called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); - return E_NOTIMPL; + + //Internal CISFBand Calls + CComPtr pIDB; + HRESULT hr = m_punkISFB->QueryInterface(IID_IDeskBand, (void**)&pIDB); + if (FAILED(hr)) return hr; + + return pIDB->ContextSensitiveHelp(fEnterMode); } HRESULT STDMETHODCALLTYPE CQuickLaunchBand::ShowDW( @@ -159,12 +193,17 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0, { //MessageBox(0, L"ShowDW called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); - if (m_hWnd) + /*if (m_hWnd) { ShowWindow(m_hWnd, bShow ? SW_SHOW : SW_HIDE); - } - - return S_OK; + }*/ + + //Internal CISFBand Calls + CComPtr pIDB; + HRESULT hr = m_punkISFB->QueryInterface(IID_IDeskBand, (void**)&pIDB); + if (FAILED(hr)) return hr; + + return pIDB->ShowDW(bShow); } HRESULT STDMETHODCALLTYPE CQuickLaunchBand::CloseDW( @@ -172,14 +211,19 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0, { //MessageBox(0, L"CloseDW called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); - if (m_hWnd) + /*if (m_hWnd) { ShowWindow(m_hWnd, SW_HIDE); DestroyWindow(m_hWnd); m_hWnd = NULL; - } - - return S_OK; + }*/ + + //Internal CISFBand Calls + CComPtr pIDB; + HRESULT hr = m_punkISFB->QueryInterface(IID_IDeskBand, (void**)&pIDB); + if (FAILED(hr)) return hr; + + return pIDB->CloseDW(dwReserved); } HRESULT STDMETHODCALLTYPE CQuickLaunchBand::ResizeBorderDW( @@ -190,7 +234,13 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0, /* No need to implement this method */ //MessageBox(0, L"ResizeBorderDW called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); - return E_NOTIMPL; + + //Internal CISFBand Calls + CComPtr pIDB; + HRESULT hr = m_punkISFB->QueryInterface(IID_IDeskBand, (void**)&pIDB); + if (FAILED(hr)) return hr; + + return pIDB->ResizeBorderDW(prcBorder, punkToolbarSite, fReserved); } HRESULT STDMETHODCALLTYPE CQuickLaunchBand::GetBandInfo( //Need a check @@ -201,68 +251,13 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0, //MessageBox(0, L"GetBandInfo called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); TRACE("CTaskBand::GetBandInfo(0x%x,0x%x,0x%p) hWnd=0x%p\n", dwBandID, dwViewMode, pdbi, m_hWnd); - HRESULT hr = E_INVALIDARG; - if (m_hWnd && pdbi) - { - m_BandID = dwBandID; - pdbi->dwModeFlags = DBIMF_VARIABLEHEIGHT; + //Internal CISFBand Calls + CComPtr pIDB; + HRESULT hr = m_punkISFB->QueryInterface(IID_IDeskBand, (void**)&pIDB); + if (FAILED(hr)) return hr; - if (dwViewMode & DBIF_VIEWMODE_VERTICAL) - { - pdbi->ptIntegral.y = 1; - pdbi->ptMinSize.y = 20; - /* FIXME: Get the button metrics from the task bar object!!! */ - pdbi->ptMinSize.x = (3 * GetSystemMetrics(SM_CXEDGE) / 2) + /* FIXME: Might be wrong if only one column! */ - GetSystemMetrics(SM_CXSIZE) + (2 * GetSystemMetrics(SM_CXEDGE)); /* FIXME: Min button size, query!!! */ - } - else - { - /* When the band is horizontal its minimum height is the height of the start button */ - RECT rcButton; - GetWindowRect(m_hWndStartButton, &rcButton); - pdbi->ptMinSize.y = rcButton.bottom - rcButton.top; - pdbi->ptIntegral.y = pdbi->ptMinSize.y + (3 * GetSystemMetrics(SM_CYEDGE) / 2); /* FIXME: Query metrics */ - /* We're not going to allow task bands where not even the minimum button size fits into the band */ - pdbi->ptMinSize.x = pdbi->ptIntegral.y; - } - - if (pdbi->dwMask & DBIM_MAXSIZE) - { - pdbi->ptMaxSize.y = -1; - } - - if (pdbi->dwMask & DBIM_ACTUAL) - { - pdbi->ptActual.x = 35; - pdbi->ptActual.y = 30; - } - - if (pdbi->dwMask & DBIM_TITLE) - { - // Don't show title by removing this flag. - pdbi->dwMask &= ~DBIM_TITLE; - } - - if (pdbi->dwMask & DBIM_MODEFLAGS) - { - pdbi->dwModeFlags = DBIMF_NORMAL | DBIMF_VARIABLEHEIGHT; - } - - if (pdbi->dwMask & DBIM_BKCOLOR) - { - // Use the default background color by removing this flag. - pdbi->dwMask &= ~DBIM_BKCOLOR; - } - - TRACE("H: %d, Min: %d,%d, Integral.y: %d Actual: %d,%d\n", (dwViewMode & DBIF_VIEWMODE_VERTICAL) == 0, - pdbi->ptMinSize.x, pdbi->ptMinSize.y, pdbi->ptIntegral.y, - pdbi->ptActual.x, pdbi->ptActual.y); - - hr = S_OK; - } - - return hr; + return pIDB->GetBandInfo(dwBandID, dwViewMode, pdbi); } /*****************************************************************************/ @@ -273,7 +268,13 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0, TRACE("IDeskBar::SetClient(0x%p)\n", punkClient); //MessageBox(0, L"SetClient called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); - return E_NOTIMPL; + + //Internal CISFBand Calls + CComPtr pIDB; + HRESULT hr = m_punkISFB->QueryInterface(IID_IDeskBar, (void**)&pIDB); + if (FAILED(hr)) return hr; + + return pIDB->SetClient(punkClient); } HRESULT STDMETHODCALLTYPE CQuickLaunchBand::GetClient( @@ -282,18 +283,28 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0, TRACE("IDeskBar::GetClient(0x%p)\n", ppunkClient); //MessageBox(0, L"GetClient called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); - return E_NOTIMPL; + + //Internal CISFBand Calls + CComPtr pIDB; + HRESULT hr = m_punkISFB->QueryInterface(IID_IDeskBar, (void**)&pIDB); + if (FAILED(hr)) return hr; + + return pIDB->GetClient(ppunkClient); } HRESULT STDMETHODCALLTYPE CQuickLaunchBand::OnPosRectChangeDB( IN RECT *prc) { - TRACE("IDeskBar::OnPosRectChangeDB(0x%p=(%d,%d,%d,%d))\n", prc, prc->left, prc->top, prc->right, prc->bottom); - if (prc->bottom - prc->top == 0) - return S_OK; + TRACE("IDeskBar::OnPosRectChangeDB(0x%p=(%d,%d,%d,%d))\n", prc, prc->left, prc->top, prc->right, prc->bottom); //MessageBox(0, L"OnPosRectChangeDB called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); - return S_FALSE; + + //Internal CISFBand Calls + CComPtr pIDB; + HRESULT hr = m_punkISFB->QueryInterface(IID_IDeskBar, (void**)&pIDB); + if (FAILED(hr)) return hr; + + return pIDB->OnPosRectChangeDB(prc); } /*****************************************************************************/ @@ -304,9 +315,14 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0, //MessageBox(0, L"GetClassID called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); TRACE("CQuickLaunchBand::GetClassID(0x%p)\n", pClassID); /* We're going to return the (internal!) CLSID of the quick launch band */ - *pClassID = CLSID_QuickLaunchBand; + /* *pClassID = CLSID_QuickLaunchBand; */ - return S_OK; + //Internal CISFBand Calls + CComPtr pIPS; + HRESULT hr = m_punkISFB->QueryInterface(IID_IPersistStream, (void**)&pIPS); + if (FAILED(hr)) return hr; + + return pIPS->GetClassID(pClassID); } HRESULT STDMETHODCALLTYPE CQuickLaunchBand::IsDirty() @@ -314,7 +330,13 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0, /* The object hasn't changed since the last save! */ //MessageBox(0, L"IsDirty called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); - return S_FALSE; + + //Internal CISFBand Calls + CComPtr pIPS; + HRESULT hr = m_punkISFB->QueryInterface(IID_IPersistStream, (void**)&pIPS); + if (FAILED(hr)) return hr; + + return pIPS->IsDirty(); } HRESULT STDMETHODCALLTYPE CQuickLaunchBand::Load( @@ -324,7 +346,13 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0, /* Nothing to do */ //MessageBox(0, L"Load called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); - return S_OK; + + //Internal CISFBand Calls + CComPtr pIPS; + HRESULT hr = m_punkISFB->QueryInterface(IID_IPersistStream, (void**)&pIPS); + if (FAILED(hr)) return hr; + + return pIPS->Load(pStm); } HRESULT STDMETHODCALLTYPE CQuickLaunchBand::Save( @@ -334,17 +362,29 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0, /* Nothing to do */ //MessageBox(0, L"Save called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); - return S_OK; + + //Internal CISFBand Calls + CComPtr pIPS; + HRESULT hr = m_punkISFB->QueryInterface(IID_IPersistStream, (void**)&pIPS); + if (FAILED(hr)) return hr; + + return pIPS->Save(pStm, fClearDirty); } HRESULT STDMETHODCALLTYPE CQuickLaunchBand::GetSizeMax( OUT ULARGE_INTEGER *pcbSize) { TRACE("CQuickLaunchBand::GetSizeMax called\n"); - pcbSize->QuadPart = 0; + //pcbSize->QuadPart = 0; //MessageBox(0, L"GetSizeMax called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); - return S_OK; + + //Internal CISFBand Calls + CComPtr pIPS; + HRESULT hr = m_punkISFB->QueryInterface(IID_IPersistStream, (void**)&pIPS); + if (FAILED(hr)) return hr; + + return pIPS->GetSizeMax(pcbSize); } @@ -368,27 +408,40 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0, { //MessageBox(0, L"ContainsWindow called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); - if (hWnd == m_hWnd || + /*if (hWnd == m_hWnd || IsChild(m_hWnd, hWnd)) { TRACE("CQuickLaunchBand::ContainsWindow(0x%p) returns S_OK\n", hWnd); return S_OK; - } + }*/ - return S_FALSE; + return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CQuickLaunchBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult) { //MessageBox(0, L"OnWinEvent called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); - UNIMPLEMENTED; - return E_NOTIMPL; + //UNIMPLEMENTED; + + //Internal CISFBand Calls + CComPtr pWEH; + HRESULT hr = m_punkISFB->QueryInterface(IID_IWinEventHandler, (void**)&pWEH); + if (FAILED(hr)) return hr; + + return pWEH->OnWinEvent(hWnd, uMsg, wParam, lParam, theResult); } HRESULT STDMETHODCALLTYPE CQuickLaunchBand::IsWindowOwner(HWND hWnd) { //MessageBox(0, L"IsWindowOwner called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); - return (hWnd == m_hWnd) ? S_OK : S_FALSE; + //return (hWnd == m_hWnd) ? S_OK : S_FALSE; + + //Internal CISFBand Calls + CComPtr pWEH; + HRESULT hr = m_punkISFB->QueryInterface(IID_IWinEventHandler, (void**)&pWEH); + if (FAILED(hr)) return hr; + + return pWEH->IsWindowOwner(hWnd); } /*****************************************************************************/ @@ -396,13 +449,19 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0, HRESULT STDMETHODCALLTYPE CQuickLaunchBand::QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds [], OLECMDTEXT *pCmdText) { //MessageBox(0, L"QueryStatus called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); - UNIMPLEMENTED; - return E_NOTIMPL; + //UNIMPLEMENTED; + + //Internal CISFBand Calls + CComPtr pOCT; + HRESULT hr = m_punkISFB->QueryInterface(IID_IOleCommandTarget, (void**)&pOCT); + if (FAILED(hr)) return hr; + + return pOCT->QueryStatus(pguidCmdGroup, cCmds, prgCmds, pCmdText); } HRESULT STDMETHODCALLTYPE CQuickLaunchBand::Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) { - if (IsEqualIID(*pguidCmdGroup, IID_IBandSite)) + /*if (IsEqualIID(*pguidCmdGroup, IID_IBandSite)) { return S_OK; } @@ -410,11 +469,15 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0, if (IsEqualIID(*pguidCmdGroup, IID_IDeskBand)) { return S_OK; - } + }*/ //MessageBox(0, L"Exec called!", L"Test Caption", MB_OK | MB_ICONINFORMATION); - UNIMPLEMENTED; - return E_NOTIMPL; + //Internal CISFBand Calls + CComPtr pOCT; + HRESULT hr = m_punkISFB->QueryInterface(IID_IOleCommandTarget, (void**)&pOCT); + if (FAILED(hr)) return hr; + + return pOCT->Exec(pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut); }