ReactOS 0.4.16-dev-1288-g7ec3a7e
appbar.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Explorer
3 * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
4 * PURPOSE: AppBar implementation
5 * COPYRIGHT: Copyright 2025 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
6 */
7
8#pragma once
9
10typedef struct tagAPPBAR
11{
17
18static inline PAPPBARDATAINTEROP
20{
21 return (PAPPBARDATAINTEROP)SHLockShared((HANDLE)pData->hOutput, pData->dwProcessId);
22}
23
24static inline VOID
26{
27 SHUnlockShared(pOutput);
28}
29
30static inline BOOL
32{
33 return uEdge == ABE_TOP || uEdge == ABE_BOTTOM;
34}
35
36// Return value of CAppBarManager::RecomputeWorkArea
38{
42};
43
45{
46public:
48 virtual ~CAppBarManager();
49
51
52protected:
53 HDPA m_hAppBarDPA; // DPA (Dynamic Pointer Array)
54 HWND m_ahwndAutoHideBars[4]; // The side --> auto-hide window
55
56 PAPPBAR FindAppBar(_In_ HWND hwndAppBar) const;
57 void EliminateAppBar(_In_ INT iItem);
58 void DestroyAppBarDPA();
60 BOOL AppBarOutsideOf(_In_ const APPBAR *pAppBar1, _In_ const APPBAR *pAppBar2);
63 void GetDockedRect(_Out_ PRECT prcDocked);
64 BOOL SetAutoHideBar(_In_ HWND hwndTarget, _In_ BOOL bSetOrReset, _In_ UINT uSide);
65 void OnAppBarActivationChange2(_In_ HWND hwndNewAutoHide, _In_ UINT uSide);
66
76 void OnAppBarSetState(_In_ UINT uState);
77
79 _In_opt_ HMONITOR hMon,
80 _In_opt_ HWND hwndIgnore,
81 _In_ DWORD dwNotify,
83
86 _In_ const RECT *prcTray,
87 _In_ HMONITOR hMonitor,
88 _Out_ PRECT prcWorkArea);
90
91 void StuckAppChange(
92 _In_opt_ HWND hwndTarget,
93 _In_opt_ const RECT *prcOld,
94 _In_opt_ const RECT *prcNew,
95 _In_ BOOL bTray);
96
97 void RedrawDesktop(_In_ HWND hwndDesktop, _Inout_ PRECT prc);
98
99 virtual BOOL IsAutoHideState() const = 0;
100 virtual BOOL IsHidingState() const = 0;
101 virtual BOOL IsAlwaysOnTop() const = 0;
102 virtual HMONITOR& GetMonitor() = 0;
104 virtual INT GetPosition() const = 0;
105 virtual const RECT* GetTrayRect() = 0;
106 virtual HWND GetTrayWnd() const = 0;
107 virtual HWND GetDesktopWnd() const = 0;
108 virtual void SetAutoHideState(_In_ BOOL bAutoHide) = 0;
109 virtual void UpdateAlwaysOnTop(_In_ BOOL bAlwaysOnTop) = 0;
110
111 static BOOL CALLBACK
113 _In_ HMONITOR hMonitor,
114 _In_ HDC hDC,
117};
static HDC hDC
Definition: 3dtext.c:33
static BOOL Edge_IsVertical(_In_ UINT uEdge)
Definition: appbar.h:31
static PAPPBARDATAINTEROP AppBar_LockOutput(_In_ PAPPBAR_COMMAND pData)
Definition: appbar.h:19
WORKAREA_TYPE
Definition: appbar.h:38
@ WORKAREA_IS_NOT_MONITOR
Definition: appbar.h:40
@ WORKAREA_SAME_AS_MONITOR
Definition: appbar.h:41
@ WORKAREA_NO_TRAY_AREA
Definition: appbar.h:39
struct tagAPPBAR APPBAR
static VOID AppBar_UnLockOutput(_Out_ PAPPBARDATAINTEROP pOutput)
Definition: appbar.h:25
struct tagAPPBAR * PAPPBAR
BOOL OnAppBarGetTaskbarPos(_Inout_ PAPPBAR_COMMAND pData)
Definition: appbar.cpp:503
void AppBarSubtractRect(_In_ PAPPBAR pAppBar, _Inout_ PRECT prc)
Definition: appbar.cpp:239
virtual HWND GetTrayWnd() const =0
void EliminateAppBar(_In_ INT iItem)
Definition: appbar.cpp:39
HDPA m_hAppBarDPA
Definition: appbar.h:53
void ComputeHiddenRect(_Inout_ PRECT prc, _In_ UINT uSide)
Definition: appbar.cpp:285
void OnAppBarRemove(_In_ const APPBAR_COMMAND *pData)
Definition: appbar.cpp:101
virtual void UpdateAlwaysOnTop(_In_ BOOL bAlwaysOnTop)=0
void OnAppBarSetState(_In_ UINT uState)
Definition: appbar.cpp:561
HWND OnAppBarGetAutoHideBar(_In_ UINT uSide)
Definition: appbar.cpp:541
HWND m_ahwndAutoHideBars[4]
Definition: appbar.h:54
void OnAppBarActivationChange(_In_ const APPBAR_COMMAND *pData)
Definition: appbar.cpp:520
static BOOL CALLBACK MonitorEnumProc(_In_ HMONITOR hMonitor, _In_ HDC hDC, _In_ LPRECT prc, _Inout_ LPARAM lParam)
Definition: appbar.cpp:430
virtual BOOL IsAutoHideState() const =0
virtual BOOL IsAlwaysOnTop() const =0
void DestroyAppBarDPA()
Definition: appbar.cpp:45
void StuckAppChange(_In_opt_ HWND hwndTarget, _In_opt_ const RECT *prcOld, _In_opt_ const RECT *prcNew, _In_ BOOL bTray)
Definition: appbar.cpp:324
void OnAppBarSetPos(_Inout_ PAPPBAR_COMMAND pData)
Definition: appbar.cpp:182
PAPPBAR FindAppBar(_In_ HWND hwndAppBar) const
Definition: appbar.cpp:23
BOOL OnAppBarSetAutoHideBar(_In_ const APPBAR_COMMAND *pData)
Definition: appbar.cpp:552
virtual void SetAutoHideState(_In_ BOOL bAutoHide)=0
void OnAppBarActivationChange2(_In_ HWND hwndNewAutoHide, _In_ UINT uSide)
Definition: appbar.cpp:475
BOOL AppBarOutsideOf(_In_ const APPBAR *pAppBar1, _In_ const APPBAR *pAppBar2)
Definition: appbar.cpp:254
void GetDockedRect(_Out_ PRECT prcDocked)
Definition: appbar.cpp:275
BOOL SetAutoHideBar(_In_ HWND hwndTarget, _In_ BOOL bSetOrReset, _In_ UINT uSide)
Definition: appbar.cpp:454
virtual const RECT * GetTrayRect()=0
void OnAppBarNotifyAll(_In_opt_ HMONITOR hMon, _In_opt_ HWND hwndIgnore, _In_ DWORD dwNotify, _In_opt_ LPARAM lParam)
Definition: appbar.cpp:207
void RecomputeAllWorkareas()
Definition: appbar.cpp:449
virtual INT GetPosition() const =0
virtual HMONITOR & GetMonitor()=0
virtual BOOL IsHidingState() const =0
virtual ~CAppBarManager()
Definition: appbar.cpp:18
PAPPBAR_COMMAND GetAppBarMessage(_Inout_ PCOPYDATASTRUCT pCopyData)
Definition: appbar.cpp:483
virtual HWND GetDesktopWnd() const =0
void OnAppBarQueryPos(_Inout_ PAPPBAR_COMMAND pData)
Definition: appbar.cpp:124
WORKAREA_TYPE RecomputeWorkArea(_In_ const RECT *prcTray, _In_ HMONITOR hMonitor, _Out_ PRECT prcWorkArea)
Definition: appbar.cpp:395
virtual HMONITOR & GetPreviousMonitor()=0
void RedrawDesktop(_In_ HWND hwndDesktop, _Inout_ PRECT prc)
Definition: appbar.cpp:382
LRESULT OnAppBarMessage(_Inout_ PCOPYDATASTRUCT pCopyData)
Definition: appbar.cpp:571
BOOL OnAppBarNew(_In_ const APPBAR_COMMAND *pData)
Definition: appbar.cpp:61
UINT OnAppBarGetState()
Definition: appbar.cpp:497
LPARAM lParam
Definition: combotst.c:139
#define CALLBACK
Definition: compat.h:35
PVOID WINAPI SHLockShared(HANDLE hShared, DWORD dwProcId)
Definition: ordinal.c:259
BOOL WINAPI SHUnlockShared(LPVOID lpView)
Definition: ordinal.c:295
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
static HDC
Definition: imagelist.c:88
unsigned int UINT
Definition: ndis.h:50
#define _Inout_
Definition: no_sal2.h:162
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
_Out_ LPRECT prc
Definition: ntgdi.h:1658
#define ABE_BOTTOM
Definition: shellapi.h:20
#define ABE_TOP
Definition: shellapi.h:18
Definition: dpa.c:49
UINT uEdge
Definition: appbar.h:14
RECT rc
Definition: appbar.h:15
HWND hWnd
Definition: appbar.h:12
UINT uCallbackMessage
Definition: appbar.h:13
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830
int32_t INT
Definition: typedefs.h:58
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209