Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118/* * PROJECT: ReactOS Explorer * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) * PURPOSE: AppBar implementation * COPYRIGHT: Copyright 2025 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) */
#pragma once
typedef struct tagAPPBAR{ HWND hWnd; UINT uCallbackMessage; UINT uEdge; RECT rc;} APPBAR, *PAPPBAR;
static inline PAPPBARDATAINTEROPAppBar_LockOutput(_In_ PAPPBAR_COMMAND pData){ return (PAPPBARDATAINTEROP)SHLockShared((HANDLE)pData->hOutput, pData->dwProcessId);}
static inline VOIDAppBar_UnLockOutput(_Out_ PAPPBARDATAINTEROP pOutput){ SHUnlockShared(pOutput);}
static inline BOOLEdge_IsVertical(_In_ UINT uEdge){ return uEdge == ABE_TOP || uEdge == ABE_BOTTOM;}
// Return value of CAppBarManager::RecomputeWorkAreaenum WORKAREA_TYPE{ WORKAREA_NO_TRAY_AREA = 0, WORKAREA_IS_NOT_MONITOR = 1, WORKAREA_SAME_AS_MONITOR = 2,};
class CAppBarManager{public: CAppBarManager(); virtual ~CAppBarManager();
LRESULT OnAppBarMessage(_Inout_ PCOPYDATASTRUCT pCopyData);
protected: HDPA m_hAppBarDPA; // DPA (Dynamic Pointer Array) HWND m_ahwndAutoHideBars[4]; // The side --> auto-hide window
PAPPBAR FindAppBar(_In_ HWND hwndAppBar) const; void EliminateAppBar(_In_ INT iItem); void DestroyAppBarDPA(); void AppBarSubtractRect(_In_ PAPPBAR pAppBar, _Inout_ PRECT prc); BOOL AppBarOutsideOf(_In_ const APPBAR *pAppBar1, _In_ const APPBAR *pAppBar2); void ComputeHiddenRect(_Inout_ PRECT prc, _In_ UINT uSide); PAPPBAR_COMMAND GetAppBarMessage(_Inout_ PCOPYDATASTRUCT pCopyData); void GetDockedRect(_Out_ PRECT prcDocked); BOOL SetAutoHideBar(_In_ HWND hwndTarget, _In_ BOOL bSetOrReset, _In_ UINT uSide); void OnAppBarActivationChange2(_In_ HWND hwndNewAutoHide, _In_ UINT uSide);
BOOL OnAppBarNew(_In_ const APPBAR_COMMAND *pData); void OnAppBarRemove(_In_ const APPBAR_COMMAND *pData); void OnAppBarQueryPos(_Inout_ PAPPBAR_COMMAND pData); void OnAppBarSetPos(_Inout_ PAPPBAR_COMMAND pData); UINT OnAppBarGetState(); BOOL OnAppBarGetTaskbarPos(_Inout_ PAPPBAR_COMMAND pData); void OnAppBarActivationChange(_In_ const APPBAR_COMMAND *pData); HWND OnAppBarGetAutoHideBar(_In_ UINT uSide); BOOL OnAppBarSetAutoHideBar(_In_ const APPBAR_COMMAND *pData); void OnAppBarSetState(_In_ UINT uState);
void OnAppBarNotifyAll( _In_opt_ HMONITOR hMon, _In_opt_ HWND hwndIgnore, _In_ DWORD dwNotify, _In_opt_ LPARAM lParam);
WORKAREA_TYPE RecomputeWorkArea( _In_ const RECT *prcTray, _In_ HMONITOR hMonitor, _Out_ PRECT prcWorkArea); void RecomputeAllWorkareas();
void StuckAppChange( _In_opt_ HWND hwndTarget, _In_opt_ const RECT *prcOld, _In_opt_ const RECT *prcNew, _In_ BOOL bTray);
void RedrawDesktop(_In_ HWND hwndDesktop, _Inout_ PRECT prc);
virtual BOOL IsAutoHideState() const = 0; virtual BOOL IsHidingState() const = 0; virtual BOOL IsAlwaysOnTop() const = 0; virtual HMONITOR& GetMonitor() = 0; virtual HMONITOR& GetPreviousMonitor() = 0; virtual INT GetPosition() const = 0; virtual const RECT* GetTrayRect() = 0; virtual HWND GetTrayWnd() const = 0; virtual HWND GetDesktopWnd() const = 0; virtual void SetAutoHideState(_In_ BOOL bAutoHide) = 0; virtual void UpdateAlwaysOnTop(_In_ BOOL bAlwaysOnTop) = 0;
static BOOL CALLBACK MonitorEnumProc( _In_ HMONITOR hMonitor, _In_ HDC hDC, _In_ LPRECT prc, _Inout_ LPARAM lParam);};