Files
095860df57 [SDK][SHELL32] A big bundle of NT6+ shell32 implementations and stubs (#8834)
Split off CShellitemArray
stub out CShellLibrary
stub out CUserEventTimer
rewrite some vista shellitem APIs
Misc stubs for vista
AddITaskbarList3/ITaskbarList4

---------

Co-authored-by: Oleb Dubinskiy <[email protected]>
Co-authored-by: Mikhail Tyukin <[email protected]>
2026-07-21 12:11:29 -07:00

186 lines
3.9 KiB
C++

/*
* PROJECT: browseui
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: ITaskbarList implementation
* COPYRIGHT: Copyright 2018 Mark Jansen ([email protected])
*/
#include "precomp.h"
/***********************************************************************
* ITaskbarList2 implementation
*/
#define TWM_GETTASKSWITCH (WM_USER + 236)
CTaskbarList::CTaskbarList()
: m_hTaskWnd(NULL)
{
m_ShellHookMsg = RegisterWindowMessageW(L"SHELLHOOK");
}
CTaskbarList::~CTaskbarList()
{
}
HWND CTaskbarList::TaskWnd()
{
HWND hTrayWnd;
if (m_hTaskWnd && ::IsWindow(m_hTaskWnd))
return m_hTaskWnd;
hTrayWnd = FindWindowW(L"Shell_TrayWnd", NULL);
if (hTrayWnd)
{
m_hTaskWnd = (HWND)SendMessageW(hTrayWnd, TWM_GETTASKSWITCH, 0L, 0L);
}
return m_hTaskWnd;
}
void CTaskbarList::SendTaskWndShellHook(WPARAM wParam, HWND hWnd)
{
HWND hTaskWnd = TaskWnd();
if (hTaskWnd && m_ShellHookMsg)
::SendMessageW(hTaskWnd, m_ShellHookMsg, wParam, (LPARAM)hWnd);
}
/***********************************************************************
* ITaskbarList4 implementation
*/
HRESULT WINAPI CTaskbarList::SetTabProperties(HWND hwnd, STPFLAG stpFlags)
{
UNIMPLEMENTED;
return E_NOTIMPL;
}
/***********************************************************************
* ITaskbarList3 implementation
*/
HRESULT WINAPI CTaskbarList::SetProgressValue(HWND hwnd, ULONGLONG ullCompleted, ULONGLONG ullTotal)
{
UNIMPLEMENTED;
return E_NOTIMPL;
}
HRESULT WINAPI CTaskbarList::SetProgressState(HWND hwnd, TBPFLAG tbpFlags)
{
UNIMPLEMENTED;
return E_NOTIMPL;
}
HRESULT WINAPI CTaskbarList::RegisterTab(HWND hwnd, HWND hwndMDI)
{
UNIMPLEMENTED;
return E_NOTIMPL;
}
HRESULT WINAPI CTaskbarList::UnregisterTab(HWND hwndTab)
{
UNIMPLEMENTED;
return E_NOTIMPL;
}
HRESULT WINAPI CTaskbarList::SetTabOrder(HWND hwndTab, HWND hwndInsertBefore)
{
UNIMPLEMENTED;
return E_NOTIMPL;
}
HRESULT WINAPI CTaskbarList::SetTabActive(HWND hwndTab, HWND hwndMDI, DWORD dwReserved)
{
UNIMPLEMENTED;
return E_NOTIMPL;
}
HRESULT WINAPI CTaskbarList::ThumbBarAddButtons(HWND hwnd, UINT cButtons, LPTHUMBBUTTON pButton)
{
UNIMPLEMENTED;
return E_NOTIMPL;
}
HRESULT WINAPI CTaskbarList::ThumbBarUpdateButtons(HWND hwnd, UINT cButtons, LPTHUMBBUTTON pButton)
{
UNIMPLEMENTED;
return E_NOTIMPL;
}
HRESULT WINAPI CTaskbarList::ThumbBarSetImageList(HWND hwnd, HIMAGELIST himl)
{
UNIMPLEMENTED;
return E_NOTIMPL;
}
HRESULT WINAPI CTaskbarList::SetOverlayIcon(HWND hwnd, HICON hIcon, LPCWSTR pszDescription)
{
UNIMPLEMENTED;
return E_NOTIMPL;
}
HRESULT WINAPI CTaskbarList::SetThumbnailTooltip(HWND hwnd, LPCWSTR pszTip)
{
UNIMPLEMENTED;
return E_NOTIMPL;
}
HRESULT WINAPI CTaskbarList::SetThumbnailClip(HWND hwnd, RECT* prcClip)
{
UNIMPLEMENTED;
return E_NOTIMPL;
}
/***********************************************************************
* ITaskbarList2 implementation
*/
HRESULT WINAPI CTaskbarList::MarkFullscreenWindow(HWND hwnd, BOOL fFullscreen)
{
UNIMPLEMENTED;
return E_NOTIMPL;
}
/***********************************************************************
* ITaskbarList implementation
*/
HRESULT WINAPI CTaskbarList::HrInit()
{
if (m_ShellHookMsg == NULL)
return E_OUTOFMEMORY;
if (!TaskWnd())
return E_HANDLE;
return S_OK;
}
HRESULT WINAPI CTaskbarList::AddTab(HWND hwnd)
{
SendTaskWndShellHook(HSHELL_WINDOWCREATED, hwnd);
return S_OK;
}
HRESULT WINAPI CTaskbarList::DeleteTab(HWND hwnd)
{
SendTaskWndShellHook(HSHELL_WINDOWDESTROYED, hwnd);
return S_OK;
}
HRESULT WINAPI CTaskbarList::ActivateTab(HWND hwnd)
{
SendTaskWndShellHook(HSHELL_WINDOWACTIVATED, hwnd);
return S_OK;
}
HRESULT WINAPI CTaskbarList::SetActiveAlt(HWND hwnd)
{
UNIMPLEMENTED;
return E_NOTIMPL;
}