static HRESULT STDMETHODCALLTYPE ITaskBandImpl_SetSite(IN OUT IObjectWithSite *iface, IN IUnknown* pUnkSite) { ITaskBandImpl *This = ITaskBandImpl_from_IObjectWithSite(iface); HRESULT hRet = E_FAIL; DbgPrint("ITaskBand::SetSite(0x%p)\n", pUnkSite); /* Release the current site */ if (This->punkSite != NULL) { IUnknown_Release(This->punkSite); } This->punkSite = NULL; This->hWnd = NULL; if (pUnkSite != NULL) { IOleWindow *OleWindow; /* Check if the site supports IOleWindow */ hRet = IUnknown_QueryInterface(pUnkSite, &IID_IOleWindow, (PVOID *)&OleWindow); if (SUCCEEDED(hRet)) { HWND hWndParent = NULL; hRet = IOleWindow_GetWindow(OleWindow, &hWndParent); if (SUCCEEDED(hRet)) { /* Attempt to create the task switch window */ DbgPrint("CreateTaskSwitchWnd(Parent: 0x%p)\n", hWndParent); This->hWnd = CreateTaskSwitchWnd(hWndParent, This->Tray); if (This->hWnd != NULL) { This->punkSite = pUnkSite; hRet = S_OK; } else { DbgPrint("CreateTaskSwitchWnd() failed!\n"); IUnknown_Release(OleWindow); hRet = E_FAIL; } } else IUnknown_Release(OleWindow); } else DbgPrint("Querying IOleWindow failed: 0x%x\n", hRet); } return hRet; }
virtual HRESULT STDMETHODCALLTYPE SetSite(IUnknown *pUnkSite) { HRESULT hRet; HWND hwndSite; TRACE("ITaskBand::SetSite(0x%p)\n", pUnkSite); hRet = IUnknown_GetWindow(pUnkSite, &hwndSite); if (FAILED(hRet)) { TRACE("Querying site window failed: 0x%x\n", hRet); return hRet; } TRACE("CreateTaskSwitchWnd(Parent: 0x%p)\n", hwndSite); HWND hwndTaskSwitch = CreateTaskSwitchWnd(hwndSite, m_Tray); if (!hwndTaskSwitch) { ERR("CreateTaskSwitchWnd failed"); return E_FAIL; } m_Site = pUnkSite; m_hWnd = hwndTaskSwitch; return S_OK; }