1 /* 2 * PROJECT: ReactOS Explorer 3 * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) 4 * PURPOSE: Show Desktop tray button header file 5 * COPYRIGHT: Copyright 2006-2007 Thomas Weidenmueller <w3seek@reactos.org> 6 * Copyright 2018-2022 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com> 7 * Copyright 2023 Ethan Rodensky <splitwirez@gmail.com> 8 */ 9 10 #pragma once 11 12 // This window class name is CONFIRMED on Win10 by WinHier. 13 static const WCHAR szTrayShowDesktopButton[] = L"TrayShowDesktopButtonWClass"; 14 #define TSDB_CLICK (WM_USER + 100) 15 16 // The 'Show Desktop' button at the end of the taskbar 17 class CTrayShowDesktopButton : 18 public CWindowImpl<CTrayShowDesktopButton, CWindow, CControlWinTraits> 19 { 20 LONG m_nClickedTime; 21 HTHEME m_hTheme; 22 HTHEME m_hFallbackTheme; 23 MARGINS m_ContentMargins; 24 SIZE m_inset; 25 HICON m_icon; 26 SIZE m_szIcon; 27 BOOL m_highContrastMode; 28 BOOL m_drawWithDedicatedBackground; 29 BOOL m_bHovering; 30 HWND m_hWndTaskbar; 31 32 public: 33 BOOL m_bPressed; 34 BOOL m_bHorizontal; 35 36 DECLARE_WND_CLASS_EX(szTrayShowDesktopButton, CS_HREDRAW | CS_VREDRAW, COLOR_3DFACE) 37 38 BEGIN_MSG_MAP(CTrayShowDesktopButton) 39 MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown) 40 MESSAGE_HANDLER(WM_NCLBUTTONDOWN, OnLButtonDown) 41 MESSAGE_HANDLER(WM_LBUTTONUP, OnLButtonUp) 42 MESSAGE_HANDLER(WM_NCLBUTTONUP, OnLButtonUp) 43 MESSAGE_HANDLER(WM_SETTINGCHANGE, OnSettingChanged) 44 MESSAGE_HANDLER(WM_THEMECHANGED, OnThemeChanged) 45 MESSAGE_HANDLER(WM_WINDOWPOSCHANGED, OnWindowPosChanged) 46 MESSAGE_HANDLER(WM_PAINT, OnPaint) 47 MESSAGE_HANDLER(WM_PRINTCLIENT, OnPrintClient) 48 MESSAGE_HANDLER(WM_TIMER, OnTimer) 49 MESSAGE_HANDLER(WM_MOUSEMOVE, OnMouseMove) 50 MESSAGE_HANDLER(WM_DESTROY, OnDestroy) 51 MESSAGE_HANDLER(TSDB_CLICK, OnClick) 52 END_MSG_MAP() 53 54 CTrayShowDesktopButton(); 55 INT WidthOrHeight() const; 56 HRESULT DoCreate(HWND hwndParent); 57 VOID Click(); 58 BOOL PtInButton(LPPOINT pt) const; 59 VOID StartHovering(); 60 LRESULT OnLButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 61 LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 62 63 private: 64 // This function is called from OnPaint and parent. 65 VOID OnDraw(HDC hdc, LPRECT prc); 66 LRESULT OnClick(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 67 LRESULT OnSettingChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 68 LRESULT OnThemeChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 69 LRESULT OnWindowPosChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 70 VOID EnsureWindowTheme(BOOL setTheme); 71 LRESULT OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 72 LRESULT OnPrintClient(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 73 LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 74 LRESULT OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 75 LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 76 }; 77