ReactOS 0.4.16-dev-1059-gb1cf981
CTrayWindow Class Reference
Inheritance diagram for CTrayWindow:
Collaboration diagram for CTrayWindow:

Classes

struct  MINIMIZE_INFO
 

Public Member Functions

 CTrayWindow ()
 
virtual ~CTrayWindow ()
 
HRESULT ExecResourceCmd (int id)
 
void SaveState ()
 
LRESULT DoExitWindows ()
 
DWORD WINAPI RunFileDlgThread ()
 
void DisplayRunFileDlg ()
 
DWORD WINAPI TrayPropertiesThread ()
 
HWND STDMETHODCALLTYPE DisplayProperties ()
 
VOID OpenCommonStartMenuDirectory (IN HWND hWndOwner, IN LPCTSTR lpOperation)
 
VOID OpenTaskManager (IN HWND hWndOwner)
 
VOID ToggleDesktop ()
 
BOOL STDMETHODCALLTYPE ExecContextMenuCmd (IN UINT uiCmd)
 
VOID HideStartMenu ()
 
LRESULT HandleHotKey (DWORD id)
 
LRESULT HandleCommand (UINT uCommand)
 
UINT TrackMenu (IN HMENU hMenu, IN POINT *ppt OPTIONAL, IN HWND hwndExclude OPTIONAL, IN BOOL TrackUp, IN BOOL IsContextMenu)
 
HRESULT TrackCtxMenu (IN IContextMenu *contextMenu, IN POINT *ppt OPTIONAL, IN HWND hwndExclude OPTIONAL, IN BOOL TrackUp, IN PVOID Context OPTIONAL)
 
void UpdateFonts ()
 
HMONITOR GetScreenRectFromRect (IN OUT RECT *pRect, IN DWORD dwFlags)
 
HMONITOR GetMonitorFromRect (IN const RECT *pRect)
 
HMONITOR GetScreenRect (IN HMONITOR hMonitor, IN OUT RECT *pRect)
 
VOID AdjustSizerRect (RECT *rc, DWORD pos)
 
VOID MakeTrayRectWithSize (IN DWORD Position, IN const SIZE *pTraySize, IN OUT RECT *pRect)
 
VOID GetTrayRectFromScreenRect (IN DWORD Position, IN const RECT *pScreen, IN const SIZE *pTraySize OPTIONAL, OUT RECT *pRect)
 
BOOL IsPosHorizontal ()
 
HMONITOR CalculateValidSize (IN DWORD Position, IN OUT RECT *pRect)
 
DWORD GetDraggingRectFromPt (IN POINT pt, OUT RECT *pRect, OUT HMONITOR *phMonitor)
 
DWORD GetDraggingRectFromRect (IN OUT RECT *pRect, OUT HMONITOR *phMonitor)
 
VOID ChangingWinPos (IN OUT LPWINDOWPOS pwp)
 
VOID ApplyClipping (IN BOOL Clip)
 
VOID ResizeWorkArea ()
 
VOID CheckTrayWndPosition ()
 
VOID RegLoadSettings ()
 
VOID AlignControls (IN PRECT prcClient OPTIONAL)
 
void FitToRebar (PRECT pRect)
 
void PopupStartMenu ()
 
void ProcessMouseTracking ()
 
void ProcessAutoHide ()
 
LRESULT EraseBackgroundWithTheme (HDC hdc)
 
int DrawSizerWithTheme (IN HRGN hRgn)
 
HRESULT STDMETHODCALLTYPE Open ()
 
HRESULT STDMETHODCALLTYPE Close ()
 
HWND STDMETHODCALLTYPE GetHWND ()
 
BOOL STDMETHODCALLTYPE IsSpecialHWND (IN HWND hWnd)
 
BOOL STDMETHODCALLTYPE IsHorizontal ()
 
BOOL STDMETHODCALLTYPE Lock (IN BOOL bLock)
 
BOOL STDMETHODCALLTYPE IsTaskWnd (HWND hWnd)
 
HRESULT STDMETHODCALLTYPE QueryContextMenu (HMENU hPopup, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
 
HRESULT STDMETHODCALLTYPE InvokeCommand (LPCMINVOKECOMMANDINFO lpici)
 
HRESULT STDMETHODCALLTYPE GetCommandString (UINT_PTR idCmd, UINT uType, UINT *pwReserved, LPSTR pszName, UINT cchMax)
 
LRESULT OnCreate (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnDestroy (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnEndSession (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnThemeChanged (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnSettingChanged (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnEraseBackground (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnDisplayChange (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnCopyData (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
void DrawShowDesktopButton ()
 
LRESULT OnNcPaint (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnCtlColorBtn (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnSysColorChange (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnNcHitTest (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnMoving (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnSizing (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnWindowPosChanging (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnSize (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnEnterSizeMove (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnExitSizeMove (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnSysChar (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
BOOL IsPointWithinStartButton (LPPOINT ppt, LPRECT prcStartBtn, PWINDOWINFO pwi)
 
BOOL IsPointWithinShowDesktopButton (LPPOINT ppt, LPRECT prcShowDesktopBtn, PWINDOWINFO pwi)
 
LRESULT OnNcLButtonDown (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnNcRButtonUp (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnContextMenu (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnNotify (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnNcLButtonDblClick (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnNcLButtonUp (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnLButtonUp (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnAppTrayDestroy (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnOpenStartMenu (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnDoExitWindows (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnSysCommand (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnGetTaskSwitch (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
void RestoreMinimizedNonTaskWnds (BOOL bDestroyed, HWND hwndActive)
 
LRESULT OnPulse (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnHotkey (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
VOID MinimizeAll (BOOL bShowDesktop=FALSE)
 
VOID ShowDesktop ()
 
VOID RestoreAll ()
 
LRESULT OnCommand (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnMouseMove (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnTimer (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnNcActivate (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnNcCalcSize (INT code, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnInitMenuPopup (INT code, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnRebarAutoSize (INT code, LPNMHDR nmhdr, BOOL &bHandled)
 
LRESULT OnTaskbarSettingsChanged (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
 if (m_StartMenuBand !=NULL)
 
VOID TrayProcessMessages ()
 
VOID TrayMessageLoop ()
 
 GetState () override
 
STDMETHODIMP GetTrayWindow (OUT HWND *phWndTray) override
 
STDMETHODIMP RegisterDesktopWindow (IN HWND hWndDesktop) override
 
STDMETHODIMP Unknown (IN DWORD dwUnknown1, IN DWORD dwUnknown2) override
 
virtual HRESULT RaiseStartButton ()
 
STDMETHODIMP GetWindow (HWND *phwnd) override
 
STDMETHODIMP ContextSensitiveHelp (BOOL fEnterMode) override
 
void _Init ()
 
- Public Member Functions inherited from ATL::CComObjectRootEx< CComMultiThreadModelNoCS >
 ~CComObjectRootEx ()
 
ULONG InternalAddRef ()
 
ULONG InternalRelease ()
 
void Lock ()
 
void Unlock ()
 
HRESULT _AtlInitialConstruct ()
 
- Public Member Functions inherited from ATL::CComObjectRootBase
 CComObjectRootBase ()
 
 ~CComObjectRootBase ()
 
void SetVoid (void *)
 
HRESULT _AtlFinalConstruct ()
 
HRESULT FinalConstruct ()
 
void InternalFinalConstructAddRef ()
 
void InternalFinalConstructRelease ()
 
void FinalRelease ()
 
- Public Member Functions inherited from ATL::CWindowImpl< CTrayWindow, CWindow, CControlWinTraits >
HWND Create (HWND hWndParent, _U_RECT rect=NULL, LPCTSTR szWindowName=NULL, DWORD dwStyle=0, DWORD dwExStyle=0, _U_MENUorID MenuOrID=0U, LPVOID lpCreateParam=NULL)
 
- Public Member Functions inherited from ATL::CWindowImplBaseT< TBase, TWinTraits >
 CWindowImplBaseT ()
 
virtual void OnFinalMessage (HWND)
 
BOOL SubclassWindow (HWND hWnd)
 
HWND UnsubclassWindow (BOOL bForce=FALSE)
 
virtual WNDPROC GetWindowProc ()
 
LRESULT DefWindowProc (UINT uMsg, WPARAM wParam, LPARAM lParam)
 
HWND Create (HWND hWndParent, _U_RECT rect, LPCTSTR szWindowName, DWORD dwStyle, DWORD dwExStyle, _U_MENUorID MenuOrID, ATOM atom, LPVOID lpCreateParam)
 
- Public Member Functions inherited from ATL::CWindowImplRoot< TBase >
 CWindowImplRoot ()
 
virtual ~CWindowImplRoot ()
 
- Public Member Functions inherited from ATL::CWindow
 CWindow (HWND hWnd=NULL)
 
 operator HWND () const
 
UINT ArrangeIconicWindows ()
 
void Attach (HWND hWndNew)
 
HDC BeginPaint (LPPAINTSTRUCT lpPaint)
 
BOOL BringWindowToTop ()
 
BOOL CenterWindow (HWND hWndCenter=NULL)
 
BOOL ChangeClipboardChain (HWND hWndNewNext)
 
BOOL CheckDlgButton (int nIDButton, UINT nCheck)
 
BOOL CheckRadioButton (int nIDFirstButton, int nIDLastButton, int nIDCheckButton)
 
HWND ChildWindowFromPoint (POINT point) const
 
HWND ChildWindowFromPointEx (POINT point, UINT uFlags) const
 
BOOL ClientToScreen (LPPOINT lpPoint) const
 
BOOL ClientToScreen (LPRECT lpRect) const
 
HWND Create (LPCTSTR lpstrWndClass, HWND hWndParent, _U_RECT rect=NULL, LPCTSTR szWindowName=NULL, DWORD dwStyle=0, DWORD dwExStyle=0, _U_MENUorID MenuOrID=0U, LPVOID lpCreateParam=NULL)
 
BOOL CreateCaret (HBITMAP pBitmap)
 
BOOL CreateGrayCaret (int nWidth, int nHeight)
 
BOOL CreateSolidCaret (int nWidth, int nHeight)
 
HDWP DeferWindowPos (HDWP hWinPosInfo, HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags)
 
BOOL DestroyWindow ()
 
HWND Detach ()
 
int DlgDirList (LPTSTR lpPathSpec, int nIDListBox, int nIDStaticPath, UINT nFileType)
 
int DlgDirListComboBox (LPTSTR lpPathSpec, int nIDComboBox, int nIDStaticPath, UINT nFileType)
 
BOOL DlgDirSelect (LPTSTR lpString, int nCount, int nIDListBox)
 
BOOL DlgDirSelectComboBox (LPTSTR lpString, int nCount, int nIDComboBox)
 
void DragAcceptFiles (BOOL bAccept=TRUE)
 
BOOL DrawMenuBar ()
 
BOOL EnableScrollBar (UINT uSBFlags, UINT uArrowFlags=ESB_ENABLE_BOTH)
 
BOOL EnableWindow (BOOL bEnable=TRUE)
 
void EndPaint (LPPAINTSTRUCT lpPaint)
 
BOOL FlashWindow (BOOL bInvert)
 
BOOL GetClientRect (LPRECT lpRect) const
 
HDC GetDC ()
 
HDC GetDCEx (HRGN hRgnClip, DWORD flags)
 
HWND GetDescendantWindow (int nID) const
 
HRESULT GetDlgControl (int nID, REFIID iid, void **ppCtrl)
 
int GetDlgCtrlID () const
 
HRESULT GetDlgHost (int nID, REFIID iid, void **ppHost)
 
HWND GetDlgItem (_In_ int nID) const
 
UINT GetDlgItemInt (_In_ int nID, _Out_opt_ BOOL *lpTrans=NULL, _In_ BOOL bSigned=TRUE) const
 
UINT GetDlgItemText (_In_ int nID, _Out_writes_to_(nMaxCount, return+1) LPTSTR lpStr, _In_ int nMaxCount) const
 
BOOL GetDlgItemText (_In_ int nID, _Inout_ _Outref_result_maybenull_ _Post_z_ BSTR &bstrText) const
 
DWORD GetExStyle () const
 
HFONT GetFont () const
 
DWORD GetHotKey () const
 
HICON GetIcon (BOOL bBigIcon=TRUE) const
 
HWND GetLastActivePopup () const
 
HMENU GetMenu () const
 
HWND GetNextDlgGroupItem (HWND hWndCtl, BOOL bPrevious=FALSE) const
 
HWND GetNextDlgTabItem (HWND hWndCtl, BOOL bPrevious=FALSE) const
 
CWindow GetParent () const
 
BOOL GetScrollInfo (int nBar, LPSCROLLINFO lpScrollInfo)
 
BOOL GetScrollPos (int nBar)
 
BOOL GetScrollRange (int nBar, LPINT lpMinPos, LPINT lpMaxPos) const
 
DWORD GetStyle () const
 
HMENU GetSystemMenu (BOOL bRevert)
 
HWND GetTopLevelParent () const
 
HWND GetTopLevelWindow () const
 
HWND GetTopWindow () const
 
BOOL GetUpdateRect (LPRECT lpRect, BOOL bErase=FALSE)
 
int GetUpdateRgn (HRGN hRgn, BOOL bErase=FALSE)
 
HWND GetWindow (UINT nCmd) const
 
DWORD GetWindowContextHelpId () const
 
HDC GetWindowDC ()
 
LONG GetWindowLong (int nIndex) const
 
LONG_PTR GetWindowLongPtr (int nIndex) const
 
BOOL GetWindowPlacement (WINDOWPLACEMENT *lpwndpl) const
 
DWORD GetWindowProcessID ()
 
BOOL GetWindowRect (LPRECT lpRect) const
 
int GetWindowRgn (HRGN hRgn)
 
int GetWindowText (_Out_writes_to_(nMaxCount, return+1) LPTSTR lpszStringBuf, _In_ int nMaxCount) const
 
BOOL GetWindowText (_Inout_ _Outref_result_maybenull_ _Post_z_ BSTR &bstrText) const
 
int GetWindowTextLength () const
 
DWORD GetWindowThreadID ()
 
WORD GetWindowWord (int nIndex) const
 
void GotoDlgCtrl (HWND hWndCtrl) const
 
BOOL HideCaret ()
 
BOOL HiliteMenuItem (HMENU hMenu, UINT uHiliteItem, UINT uHilite)
 
BOOL Invalidate (BOOL bErase=TRUE)
 
BOOL InvalidateRect (LPCRECT lpRect, BOOL bErase=TRUE)
 
void InvalidateRgn (HRGN hRgn, BOOL bErase=TRUE)
 
BOOL IsChild (const HWND hWnd) const
 
BOOL IsDialogMessage (LPMSG lpMsg)
 
UINT IsDlgButtonChecked (int nIDButton) const
 
BOOL IsIconic () const
 
BOOL IsParentDialog ()
 
BOOL IsWindow () const
 
BOOL IsWindowEnabled () const
 
BOOL IsWindowVisible () const
 
BOOL IsWindowUnicode ()
 
BOOL IsZoomed () const
 
BOOL KillTimer (UINT_PTR nIDEvent)
 
BOOL LockWindowUpdate (BOOL bLock=TRUE)
 
int MapWindowPoints (HWND hWndTo, LPPOINT lpPoint, UINT nCount) const
 
int MapWindowPoints (HWND hWndTo, LPRECT lpRect) const
 
int MessageBox (LPCTSTR lpszText, LPCTSTR lpszCaption=NULL, UINT nType=MB_OK)
 
BOOL ModifyStyle (DWORD dwRemove, DWORD dwAdd, UINT nFlags=0)
 
BOOL ModifyStyleEx (DWORD dwRemove, DWORD dwAdd, UINT nFlags=0)
 
BOOL MoveWindow (int x, int y, int nWidth, int nHeight, BOOL bRepaint=TRUE)
 
void NextDlgCtrl () const
 
BOOL OpenClipboard ()
 
BOOL PostMessage (UINT message, WPARAM wParam=0, LPARAM lParam=0)
 
void PrevDlgCtrl () const
 
void Print (HDC hDC, DWORD dwFlags) const
 
void PrintClient (HDC hDC, DWORD dwFlags) const
 
BOOL RedrawWindow (LPCRECT lpRectUpdate=NULL, HRGN hRgnUpdate=NULL, UINT flags=RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE)
 
int ReleaseDC (HDC hDC)
 
BOOL ResizeClient (int nWidth, int nHeight, BOOL bRedraw=FALSE)
 
BOOL ScreenToClient (LPPOINT lpPoint) const
 
BOOL ScrollWindow (int xAmount, int yAmount, LPCRECT lpRect=NULL, LPCRECT lpClipRect=NULL)
 
int ScrollWindowEx (int dx, int dy, LPCRECT lpRectScroll, LPCRECT lpRectClip, HRGN hRgnUpdate, LPRECT lpRectUpdate, UINT flags)
 
LRESULT SendDlgItemMessage (int nID, UINT message, WPARAM wParam=0, LPARAM lParam=0)
 
LRESULT SendMessage (UINT message, WPARAM wParam=0, LPARAM lParam=0)
 
void SendMessageToDescendants (UINT message, WPARAM wParam=0, LPARAM lParam=0, BOOL bDeep=TRUE)
 
BOOL SendNotifyMessage (UINT message, WPARAM wParam=0, LPARAM lParam=0)
 
HWND SetActiveWindow ()
 
HWND SetCapture ()
 
HWND SetClipboardViewer ()
 
int SetDlgCtrlID (int nID)
 
BOOL SetDlgItemInt (int nID, UINT nValue, BOOL bSigned=TRUE)
 
BOOL SetDlgItemText (int nID, LPCTSTR lpszString)
 
HWND SetFocus ()
 
void SetFont (HFONT hFont, BOOL bRedraw=TRUE)
 
int SetHotKey (WORD wVirtualKeyCode, WORD wModifiers)
 
HICON SetIcon (HICON hIcon, BOOL bBigIcon=TRUE)
 
BOOL SetMenu (HMENU hMenu)
 
HWND SetParent (HWND hWndNewParent)
 
void SetRedraw (BOOL bRedraw=TRUE)
 
int SetScrollInfo (int nBar, LPSCROLLINFO lpScrollInfo, BOOL bRedraw=TRUE)
 
int SetScrollPos (int nBar, int nPos, BOOL bRedraw=TRUE)
 
BOOL SetScrollRange (int nBar, int nMinPos, int nMaxPos, BOOL bRedraw=TRUE)
 
UINT_PTR SetTimer (UINT_PTR nIDEvent, UINT nElapse, void(CALLBACK *lpfnTimer)(HWND, UINT, UINT_PTR, DWORD)=NULL)
 
BOOL SetWindowContextHelpId (DWORD dwContextHelpId)
 
LONG SetWindowLong (int nIndex, LONG dwNewLong)
 
LONG_PTR SetWindowLongPtr (int nIndex, LONG_PTR dwNewLong)
 
BOOL SetWindowPlacement (const WINDOWPLACEMENT *lpwndpl)
 
BOOL SetWindowPos (HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags)
 
int SetWindowRgn (HRGN hRgn, BOOL bRedraw=FALSE)
 
BOOL SetWindowText (LPCTSTR lpszString)
 
WORD SetWindowWord (int nIndex, WORD wNewWord)
 
BOOL ShowCaret ()
 
BOOL ShowOwnedPopups (BOOL bShow=TRUE)
 
BOOL ShowScrollBar (UINT nBar, BOOL bShow=TRUE)
 
BOOL ShowWindow (int nCmdShow)
 
BOOL ShowWindowAsync (int nCmdShow)
 
BOOL UpdateWindow ()
 
BOOL ValidateRect (LPCRECT lpRect)
 
BOOL ValidateRgn (HRGN hRgn)
 
BOOL WinHelp (LPCTSTR lpszHelp, UINT nCmd=HELP_CONTEXT, DWORD dwData=0)
 
- Public Member Functions inherited from ATL::CMessageMap
virtual BOOL ProcessWindowMessage (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult, DWORD dwMsgMapID)=0
 
- Public Member Functions inherited from CAppBarManager
 CAppBarManager ()
 
virtual ~CAppBarManager ()
 
LRESULT OnAppBarMessage (_Inout_ PCOPYDATASTRUCT pCopyData)
 
HRESULT GetWindow ([out] HWND *phwnd)
 
HRESULT ContextSensitiveHelp ([in] BOOL fEnterMode)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 
HRESULT QueryContextMenu ([in] HMENU hmenu, [in] UINT indexMenu, [in] UINT idCmdFirst, [in] UINT idCmdLast, [in] UINT uFlags)
 
HRESULT InvokeCommand ([in] LPCMINVOKECOMMANDINFO lpici)
 
HRESULT GetCommandString ([in] UINT_PTR idCmd, [in] UINT uType, [out] UINT *pwReserved, [out, size_is(cchMax)] LPSTR pszName, [in] UINT cchMax)
 

Static Public Member Functions

static DWORD WINAPI s_RunFileDlgThread (IN OUT PVOID pParam)
 
static DWORD WINAPI s_TrayPropertiesThread (IN OUT PVOID pParam)
 
static BOOL IsDialog (HWND hwnd)
 
static BOOL CALLBACK MinimizeWindowsProc (HWND hwnd, LPARAM lParam)
 
- Static Public Member Functions inherited from ATL::CComCoClass< CTrayWindow >
static LPCTSTR WINAPI GetObjectDescription ()
 
- Static Public Member Functions inherited from ATL::CComObjectRootBase
static void WINAPI ObjectMain (bool)
 
static const struct _ATL_CATMAP_ENTRYGetCategoryMap ()
 
static HRESULT WINAPI InternalQueryInterface (void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject)
 
- Static Public Member Functions inherited from ATL::CWindowImpl< CTrayWindow, CWindow, CControlWinTraits >
static LPCTSTR GetWndCaption ()
 
- Static Public Member Functions inherited from ATL::CWindowImplBaseT< TBase, TWinTraits >
static DWORD GetWndStyle (DWORD dwStyle)
 
static DWORD GetWndExStyle (DWORD dwExStyle)
 
static LRESULT CALLBACK StartWindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
static LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
- Static Public Member Functions inherited from ATL::CWindow
static LPCTSTR GetWndClassName ()
 
static LRESULT SendMessage (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 

Public Attributes

CComPtr< ITrayBandSite > m_TrayBandSite
 
union {
   DWORD   Flags
 
   struct {
      DWORD   InSizeMove: 1
 
      DWORD   IsDragging: 1
 
      DWORD   NewPosSize: 1
 
      DWORD   IgnorePulse: 1
 
   } 
 
}; 
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 
- Public Attributes inherited from ATL::CWindowImplBaseT< TBase, TWinTraits >
WNDPROC m_pfnSuperWindowProc
 
- Public Attributes inherited from ATL::CWindowImplRoot< TBase >
CWndProcThunk m_thunk
 
const _ATL_MSGm_pCurrentMsg
 
DWORD m_dwState
 
- Public Attributes inherited from ATL::CWindow
HWND m_hWnd
 

Protected Member Functions

BOOL IsAutoHideState () const override
 
BOOL IsHidingState () const override
 
HMONITOR GetMonitor () const override
 
HMONITOR GetPreviousMonitor () const override
 
INT GetPosition () const override
 
const RECTGetTrayRect () override
 
HWND GetDesktopWnd () const override
 
- Protected Member Functions inherited from CAppBarManager
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 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)
 
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 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 HMONITOR GetMonitor () const =0
 
virtual HMONITOR GetPreviousMonitor () const =0
 
virtual INT GetPosition () const =0
 
virtual const RECTGetTrayRect ()=0
 
virtual HWND GetDesktopWnd () const =0
 

Private Attributes

CStartButton m_StartButton
 
CTrayShowDesktopButtonm_pShowDesktopButton
 
CComPtr< IMenuBandm_StartMenuBand
 
CComPtr< IMenuPopupm_StartMenuPopup
 
CComPtr< IDeskBandm_TaskBand
 
CComPtr< IContextMenum_ContextMenu
 
HTHEME m_Theme
 
HFONT m_Font
 
HWND m_DesktopWnd
 
HWND m_Rebar
 
HWND m_TaskSwitch
 
HWND m_TrayNotify
 
CComPtr< IUnknownm_TrayNotifyInstance
 
DWORD m_Position
 
HMONITOR m_Monitor
 
HMONITOR m_PreviousMonitor
 
DWORD m_DraggingPosition
 
HMONITOR m_DraggingMonitor
 
RECT m_TrayRects [4]
 
SIZE m_TraySize
 
HWND m_TrayPropertiesOwner
 
HWND m_RunFileDlgOwner
 
UINT m_AutoHideState
 
SIZE m_AutoHideOffset
 
TRACKMOUSEEVENT m_MouseTrackingInfo
 
HDPA m_ShellServices
 

Additional Inherited Members

- Public Types inherited from ATL::CWindowImplRoot< TBase >
enum  { WINSTATE_DESTROYED = 0x00000001 }
 
- Public Types inherited from IOleWindow
typedef IOleWindowLPOLEWINDOW
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- Public Types inherited from IContextMenu
typedef IContextMenuLPCONTEXTMENU
 
typedef struct IContextMenu::tagCMINVOKECOMMANDINFO CMINVOKECOMMANDINFO
 
typedef struct IContextMenu::tagCMINVOKECOMMANDINFOLPCMINVOKECOMMANDINFO
 
typedef struct IContextMenu::tagCMInvokeCommandInfoEx CMINVOKECOMMANDINFOEX
 
typedef struct IContextMenu::tagCMInvokeCommandInfoExLPCMINVOKECOMMANDINFOEX
 
- Static Public Attributes inherited from ATL::CWindow
static RECT rcDefault
 
- Static Public Attributes inherited from IContextMenu
static const WCHAR CMDSTR_NEWFOLDERW [] = {'N','e','w','F','o','l','d','e','r',0}
 
static const WCHAR CMDSTR_VIEWLISTW [] = {'V','i','e','w','L','i','s','t',0}
 
static const WCHAR CMDSTR_VIEWDETAILSW [] = {'V','i','e','w','D','e','t','a','i','l','s',0}
 
- Protected Attributes inherited from CAppBarManager
HDPA m_hAppBarDPA
 

Detailed Description

Definition at line 306 of file traywnd.cpp.

Constructor & Destructor Documentation

◆ CTrayWindow()

CTrayWindow::CTrayWindow ( )
inline

Definition at line 370 of file traywnd.cpp.

370 :
373 m_Theme(NULL),
374 m_Font(NULL),
376 m_Rebar(NULL),
379 m_Position(0),
388 Flags(0)
389 {
395 }
DWORD m_DraggingPosition
Definition: traywnd.cpp:338
HWND m_TaskSwitch
Definition: traywnd.cpp:330
DWORD Flags
Definition: traywnd.cpp:358
HWND m_Rebar
Definition: traywnd.cpp:329
HMONITOR m_Monitor
Definition: traywnd.cpp:336
DWORD IgnorePulse
Definition: traywnd.cpp:365
CStartButton m_StartButton
Definition: traywnd.cpp:316
DWORD m_Position
Definition: traywnd.cpp:335
HTHEME m_Theme
Definition: traywnd.cpp:324
TRACKMOUSEEVENT m_MouseTrackingInfo
Definition: traywnd.cpp:349
HMONITOR m_PreviousMonitor
Definition: traywnd.cpp:337
HDPA m_ShellServices
Definition: traywnd.cpp:351
SIZE m_TraySize
Definition: traywnd.cpp:342
RECT m_TrayRects[4]
Definition: traywnd.cpp:341
HMONITOR m_DraggingMonitor
Definition: traywnd.cpp:339
UINT m_AutoHideState
Definition: traywnd.cpp:347
CTrayShowDesktopButton * m_pShowDesktopButton
Definition: traywnd.cpp:317
HWND m_TrayPropertiesOwner
Definition: traywnd.cpp:344
SIZE m_AutoHideOffset
Definition: traywnd.cpp:348
HWND m_RunFileDlgOwner
Definition: traywnd.cpp:345
HFONT m_Font
Definition: traywnd.cpp:326
HWND m_DesktopWnd
Definition: traywnd.cpp:328
HWND m_TrayNotify
Definition: traywnd.cpp:331
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define ZeroMemory
Definition: winbase.h:1743

◆ ~CTrayWindow()

virtual CTrayWindow::~CTrayWindow ( )
inlinevirtual

Definition at line 397 of file traywnd.cpp.

398 {
399 if (m_ShellServices != NULL)
400 {
403 }
404
405 if (m_Font != NULL)
406 {
408 m_Font = NULL;
409 }
410
411 if (m_Theme)
412 {
414 m_Theme = NULL;
415 }
416
418 }
HRESULT ShutdownShellServices(HDPA hdpa)
HRESULT WINAPI CloseThemeData(HTHEME hTheme)
Definition: system.c:965
pKey DeleteObject()
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)

Member Function Documentation

◆ _Init()

void CTrayWindow::_Init ( )
inline

Definition at line 3554 of file traywnd.cpp.

3555 {
3556 m_Position = (DWORD) -1;
3557 }
#define DWORD
Definition: nt_native.h:44

◆ AdjustSizerRect()

VOID CTrayWindow::AdjustSizerRect ( RECT rc,
DWORD  pos 
)
inline

Definition at line 1136 of file traywnd.cpp.

1137 {
1139 SIZE size;
1140
1141 if (pos > ABE_BOTTOM)
1142 pos = ABE_BOTTOM;
1143
1144 HRESULT hr = GetThemePartSize(m_Theme, NULL, iSizerPart[pos], 0, NULL, TS_TRUE, &size);
1146 return;
1147
1148 switch (pos)
1149 {
1150 case ABE_TOP:
1151 rc->bottom -= size.cy;
1152 break;
1153 case ABE_BOTTOM:
1154 rc->top += size.cy;
1155 break;
1156 case ABE_LEFT:
1157 rc->right -= size.cx;
1158 break;
1159 case ABE_RIGHT:
1160 rc->left += size.cx;
1161 break;
1162 }
1163 }
@ TS_TRUE
#define FAILED_UNEXPECTEDLY(hr)
Definition: debug.h:83
HRESULT WINAPI GetThemePartSize(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, RECT *prc, THEMESIZE eSize, SIZE *psz)
Definition: draw.c:1821
GLsizeiptr size
Definition: glext.h:5919
#define ABE_BOTTOM
Definition: shellapi.h:20
#define ABE_RIGHT
Definition: shellapi.h:19
#define ABE_TOP
Definition: shellapi.h:18
#define ABE_LEFT
Definition: shellapi.h:17
HRESULT hr
Definition: shlfolder.c:183
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
@ TBP_SIZINGBARRIGHT
Definition: vssym32.h:562
@ TBP_SIZINGBARBOTTOM
Definition: vssym32.h:561
@ TBP_SIZINGBARLEFT
Definition: vssym32.h:564
@ TBP_SIZINGBARTOP
Definition: vssym32.h:563

Referenced by Lock(), and OnNcCalcSize().

◆ AlignControls()

VOID CTrayWindow::AlignControls ( IN PRECT prcClient  OPTIONAL)
inline

Definition at line 1676 of file traywnd.cpp.

1677 {
1678 RECT rcClient;
1679 SIZE TraySize, StartSize;
1680 POINT ptTrayNotify = { 0, 0 };
1681 BOOL Horizontal;
1682 HDWP dwp;
1683
1685 if (prcClient != NULL)
1686 {
1687 rcClient = *prcClient;
1688 }
1689 else
1690 {
1691 if (!GetClientRect(&rcClient))
1692 {
1693 ERR("Could not get client rect lastErr=%d\n", GetLastError());
1694 return;
1695 }
1696 }
1697
1698 Horizontal = IsPosHorizontal();
1699
1700 /* We're about to resize/move the start button, the rebar control and
1701 the tray notification control */
1702 dwp = BeginDeferWindowPos(4);
1703 if (dwp == NULL)
1704 {
1705 ERR("BeginDeferWindowPos failed. lastErr=%d\n", GetLastError());
1706 return;
1707 }
1708
1709 /* Limit the Start button width to the client width, if necessary */
1710 StartSize = m_StartButton.GetSize();
1711 if (StartSize.cx > rcClient.right)
1712 StartSize.cx = rcClient.right;
1713
1714 HWND hwndTaskToolbar = ::GetWindow(m_TaskSwitch, GW_CHILD);
1715 if (hwndTaskToolbar)
1716 {
1717 DWORD size = SendMessageW(hwndTaskToolbar, TB_GETBUTTONSIZE, 0, 0);
1718
1719 /* Themed button covers Edge area as well */
1720 StartSize.cy = HIWORD(size) + (m_Theme ? GetSystemMetrics(SM_CYEDGE) : 0);
1721 }
1722
1723 if (m_StartButton.m_hWnd != NULL)
1724 {
1725 /* Resize and reposition the button */
1726 dwp = m_StartButton.DeferWindowPos(dwp,
1727 NULL,
1728 0,
1729 0,
1730 StartSize.cx,
1731 StartSize.cy,
1733 if (dwp == NULL)
1734 {
1735 ERR("DeferWindowPos for start button failed. lastErr=%d\n", GetLastError());
1736 return;
1737 }
1738 }
1739
1740 /* Determine the size that the tray notification window needs */
1741 if (Horizontal)
1742 {
1743 TraySize.cx = 0;
1744 TraySize.cy = rcClient.bottom;
1745 }
1746 else
1747 {
1748 TraySize.cx = rcClient.right;
1749 TraySize.cy = 0;
1750 }
1751
1752 if (m_TrayNotify != NULL &&
1755 (WPARAM)Horizontal,
1756 (LPARAM)&TraySize))
1757 {
1758 /* Move the tray notification window to the desired location */
1759 if (Horizontal)
1760 ptTrayNotify.x = rcClient.right - TraySize.cx;
1761 else
1762 ptTrayNotify.y = rcClient.bottom - TraySize.cy;
1763
1764 dwp = ::DeferWindowPos(dwp,
1766 NULL,
1767 ptTrayNotify.x,
1768 ptTrayNotify.y,
1769 TraySize.cx,
1770 TraySize.cy,
1772 if (dwp == NULL)
1773 {
1774 ERR("DeferWindowPos for notification area failed. lastErr=%d\n", GetLastError());
1775 return;
1776 }
1777 }
1778
1779 /* Resize/Move the rebar control */
1780 if (m_Rebar != NULL)
1781 {
1782 POINT ptRebar = { 0, 0 };
1783 SIZE szRebar;
1784
1785 SetWindowStyle(m_Rebar, CCS_VERT, Horizontal ? 0 : CCS_VERT);
1786
1787 if (Horizontal)
1788 {
1789 ptRebar.x = StartSize.cx + GetSystemMetrics(SM_CXSIZEFRAME);
1790 szRebar.cx = ptTrayNotify.x - ptRebar.x;
1791 szRebar.cy = rcClient.bottom;
1792 }
1793 else
1794 {
1795 ptRebar.y = StartSize.cy + GetSystemMetrics(SM_CYSIZEFRAME);
1796 szRebar.cx = rcClient.right;
1797 szRebar.cy = ptTrayNotify.y - ptRebar.y;
1798 }
1799
1800 dwp = ::DeferWindowPos(dwp,
1801 m_Rebar,
1802 NULL,
1803 ptRebar.x,
1804 ptRebar.y,
1805 szRebar.cx,
1806 szRebar.cy,
1808 }
1809
1810 if (dwp != NULL)
1811 EndDeferWindowPos(dwp);
1812
1813 if (m_TaskSwitch != NULL)
1814 {
1815 /* Update the task switch window configuration */
1817 }
1818 }
#define ERR(fmt,...)
Definition: precomp.h:57
#define TSWM_UPDATETASKBARPOS
Definition: precomp.h:395
#define TNWM_GETMINIMUMSIZE
Definition: precomp.h:378
HDWP DeferWindowPos(HDWP hWinPosInfo, HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags)
Definition: atlwin.h:456
HWND m_hWnd
Definition: atlwin.h:273
SIZE GetSize()
Definition: traywnd.cpp:203
VOID UpdateSize()
Definition: traywnd.cpp:208
BOOL IsPosHorizontal()
Definition: traywnd.cpp:1211
STDMETHODIMP GetWindow(HWND *phwnd) override
Definition: traywnd.cpp:3540
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
#define SetWindowStyle(hwnd, val)
Definition: utility.h:153
#define TB_GETBUTTONSIZE
Definition: commctrl.h:1160
#define CCS_VERT
Definition: commctrl.h:2254
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
#define HIWORD(l)
Definition: typedefs.h:247
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
#define SWP_NOACTIVATE
Definition: winuser.h:1253
#define SM_CYEDGE
Definition: winuser.h:1020
BOOL WINAPI EndDeferWindowPos(_In_ HDWP)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define SendMessage
Definition: winuser.h:5863
#define SM_CXSIZEFRAME
Definition: winuser.h:1004
HDWP WINAPI DeferWindowPos(_In_ HDWP, _In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define GW_CHILD
Definition: winuser.h:774
#define SWP_NOZORDER
Definition: winuser.h:1258
#define SM_CYSIZEFRAME
Definition: winuser.h:1006
int WINAPI GetSystemMetrics(_In_ int)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HDWP WINAPI BeginDeferWindowPos(_In_ int)

Referenced by OnSettingChanged(), OnSize(), and Open().

◆ ApplyClipping()

VOID CTrayWindow::ApplyClipping ( IN BOOL  Clip)
inline

Definition at line 1487 of file traywnd.cpp.

1488 {
1489 RECT rcClip, rcWindow;
1490 HRGN hClipRgn;
1491
1492 if (GetWindowRect(&rcWindow))
1493 {
1494 /* Disable clipping on systems with only one monitor */
1496 Clip = FALSE;
1497
1498 if (Clip)
1499 {
1500 rcClip = rcWindow;
1501
1502 GetScreenRect(m_Monitor, &rcClip);
1503
1504 if (!IntersectRect(&rcClip, &rcClip, &rcWindow))
1505 {
1506 rcClip = rcWindow;
1507 }
1508
1509 OffsetRect(&rcClip,
1510 -rcWindow.left,
1511 -rcWindow.top);
1512
1513 hClipRgn = CreateRectRgnIndirect(&rcClip);
1514 }
1515 else
1516 hClipRgn = NULL;
1517
1518 /* Set the clipping region or make sure the window isn't clipped
1519 by disabling it explicitly. */
1520 SetWindowRgn(hClipRgn, TRUE);
1521 }
1522 }
HMONITOR GetScreenRect(IN HMONITOR hMonitor, IN OUT RECT *pRect)
Definition: traywnd.cpp:1098
#define FALSE
Definition: types.h:117
HRGN WINAPI CreateRectRgnIndirect(_In_ LPCRECT)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
int WINAPI SetWindowRgn(_In_ HWND, _In_opt_ HRGN, _In_ BOOL)
BOOL WINAPI IntersectRect(_Out_ LPRECT, _In_ LPCRECT, _In_ LPCRECT)
BOOL WINAPI OffsetRect(_Inout_ LPRECT, _In_ int, _In_ int)
#define SM_CMONITORS
Definition: winuser.h:1051

Referenced by CheckTrayWndPosition(), Lock(), OnEnterSizeMove(), and OnSize().

◆ CalculateValidSize()

HMONITOR CTrayWindow::CalculateValidSize ( IN DWORD  Position,
IN OUT RECT pRect 
)
inline

Definition at line 1216 of file traywnd.cpp.

1219 {
1220 RECT rcScreen;
1221 //BOOL Horizontal;
1222 HMONITOR hMon;
1223 SIZE szMax, szWnd;
1224
1225 //Horizontal = IsPosHorizontal();
1226
1227 szWnd.cx = pRect->right - pRect->left;
1228 szWnd.cy = pRect->bottom - pRect->top;
1229
1230 rcScreen = *pRect;
1231 hMon = GetScreenRectFromRect(
1232 &rcScreen,
1233 MONITOR_DEFAULTTONEAREST);
1234
1235 /* Calculate the maximum size of the tray window and limit the window
1236 size to half of the screen's size. */
1237 szMax.cx = (rcScreen.right - rcScreen.left) / 2;
1238 szMax.cy = (rcScreen.bottom - rcScreen.top) / 2;
1239 if (szWnd.cx > szMax.cx)
1240 szWnd.cx = szMax.cx;
1241 if (szWnd.cy > szMax.cy)
1242 szWnd.cy = szMax.cy;
1243
1244 /* FIXME - calculate */
1245
1247 &rcScreen,
1248 &szWnd,
1249 pRect);
1250
1251 return hMon;
1252 }
HMONITOR GetScreenRectFromRect(IN OUT RECT *pRect, IN DWORD dwFlags)
Definition: traywnd.cpp:1046
VOID GetTrayRectFromScreenRect(IN DWORD Position, IN const RECT *pScreen, IN const SIZE *pTraySize OPTIONAL, OUT RECT *pRect)
Definition: traywnd.cpp:1190
static COORD Position
Definition: mouse.c:34

Referenced by FitToRebar().

◆ ChangingWinPos()

VOID CTrayWindow::ChangingWinPos ( IN OUT LPWINDOWPOS  pwp)
inline

Definition at line 1393 of file traywnd.cpp.

1394 {
1395 RECT rcTray;
1396
1397 if (IsDragging)
1398 {
1399 rcTray.left = pwp->x;
1400 rcTray.top = pwp->y;
1401 rcTray.right = rcTray.left + pwp->cx;
1402 rcTray.bottom = rcTray.top + pwp->cy;
1403
1404 if (!EqualRect(&rcTray,
1406 {
1407 /* Recalculate the rectangle, the user dragged the tray
1408 window to another monitor or the window was somehow else
1409 moved or resized */
1411 &rcTray,
1413 //m_TrayRects[DraggingPosition] = rcTray;
1414 }
1415
1416 //Monitor = CalculateValidSize(DraggingPosition,
1417 // &rcTray);
1418
1423 IsDragging = FALSE;
1424
1425 m_TrayRects[m_Position] = rcTray;
1426 goto ChangePos;
1427 }
1428 else if (GetWindowRect(&rcTray))
1429 {
1430 if (InSizeMove)
1431 {
1432 if (!(pwp->flags & SWP_NOMOVE))
1433 {
1434 rcTray.left = pwp->x;
1435 rcTray.top = pwp->y;
1436 }
1437
1438 if (!(pwp->flags & SWP_NOSIZE))
1439 {
1440 rcTray.right = rcTray.left + pwp->cx;
1441 rcTray.bottom = rcTray.top + pwp->cy;
1442 }
1443
1445
1446 if (!(pwp->flags & (SWP_NOMOVE | SWP_NOSIZE)))
1447 {
1448 SIZE szWnd;
1449
1450 szWnd.cx = pwp->cx;
1451 szWnd.cy = pwp->cy;
1452
1453 MakeTrayRectWithSize(m_Position, &szWnd, &rcTray);
1454 }
1455
1456 m_TrayRects[m_Position] = rcTray;
1457 }
1458 else if (m_Position != (DWORD)-1)
1459 {
1460 /* If the user isn't resizing the tray window we need to make sure the
1461 new size or position is valid. this is to prevent changes to the window
1462 without user interaction. */
1463 rcTray = m_TrayRects[m_Position];
1464
1466 {
1467 rcTray.left += m_AutoHideOffset.cx;
1468 rcTray.right += m_AutoHideOffset.cx;
1469 rcTray.top += m_AutoHideOffset.cy;
1470 rcTray.bottom += m_AutoHideOffset.cy;
1471 }
1472
1473 }
1474
1475ChangePos:
1476 m_TraySize.cx = rcTray.right - rcTray.left;
1477 m_TraySize.cy = rcTray.bottom - rcTray.top;
1478
1479 pwp->flags &= ~(SWP_NOMOVE | SWP_NOSIZE);
1480 pwp->x = rcTray.left;
1481 pwp->y = rcTray.top;
1482 pwp->cx = m_TraySize.cx;
1483 pwp->cy = m_TraySize.cy;
1484 }
1485 }
TaskbarSettings g_TaskbarSettings
Definition: settings.cpp:23
DWORD InSizeMove
Definition: traywnd.cpp:362
DWORD IsDragging
Definition: traywnd.cpp:363
VOID MakeTrayRectWithSize(IN DWORD Position, IN const SIZE *pTraySize, IN OUT RECT *pRect)
Definition: traywnd.cpp:1165
DWORD GetDraggingRectFromRect(IN OUT RECT *pRect, OUT HMONITOR *phMonitor)
Definition: traywnd.cpp:1375
TW_STRUCKRECTS2 sr
Definition: precomp.h:226
DWORD AutoHide
Definition: precomp.h:205
DWORD Position
Definition: precomp.h:211
#define SWP_NOMOVE
Definition: winuser.h:1255
#define SWP_NOSIZE
Definition: winuser.h:1256
BOOL WINAPI EqualRect(_In_ LPCRECT, _In_ LPCRECT)

Referenced by OnWindowPosChanging().

◆ CheckTrayWndPosition()

VOID CTrayWindow::CheckTrayWndPosition ( )
inline

Definition at line 1576 of file traywnd.cpp.

1577 {
1578 /* Force the rebar bands to resize */
1580 IID_IDeskBand,
1582 0,
1583 NULL,
1584 NULL);
1585
1586 /* Calculate the size of the taskbar based on the rebar */
1588
1589 /* Move the tray window */
1590 /* The handler of WM_WINDOWPOSCHANGING will override whatever size
1591 * and position we use here with m_TrayRects */
1596 }
VOID ResizeWorkArea()
Definition: traywnd.cpp:1524
void FitToRebar(PRECT pRect)
Definition: traywnd.cpp:1820
CComPtr< ITrayBandSite > m_TrayBandSite
Definition: traywnd.cpp:354
VOID ApplyClipping(IN BOOL Clip)
Definition: traywnd.cpp:1487
HRESULT WINAPI IUnknown_Exec(IUnknown *lpUnknown, REFGUID pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
Definition: ordinal.c:1087
@ DBID_BANDINFOCHANGED
Definition: shobjidl.idl:2528
BOOL WINAPI RedrawWindow(_In_opt_ HWND, _In_opt_ LPCRECT, _In_opt_ HRGN, _In_ UINT)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define RDW_ERASE
Definition: winuser.h:1222
#define RDW_ALLCHILDREN
Definition: winuser.h:1232
#define RDW_FRAME
Definition: winuser.h:1223
#define RDW_INTERNALPAINT
Definition: winuser.h:1224
#define RDW_INVALIDATE
Definition: winuser.h:1225

Referenced by OnDisplayChange(), OnSettingChanged(), OnTaskbarSettingsChanged(), and Open().

◆ Close()

HRESULT STDMETHODCALLTYPE CTrayWindow::Close ( )
inline

Definition at line 2175 of file traywnd.cpp.

2176 {
2177 if (m_hWnd != NULL)
2178 {
2181 0,
2182 0);
2183 }
2184
2185 return S_OK;
2186 }
#define S_OK
Definition: intsafe.h:52
#define WM_APP_TRAYDESTROY
Definition: traywnd.cpp:15

◆ ContextSensitiveHelp()

STDMETHODIMP CTrayWindow::ContextSensitiveHelp ( BOOL  fEnterMode)
inlineoverride

Implements IOleWindow.

Definition at line 3549 of file traywnd.cpp.

3550 {
3551 return E_NOTIMPL;
3552 }
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DisplayProperties()

HWND STDMETHODCALLTYPE CTrayWindow::DisplayProperties ( )
inline

Definition at line 578 of file traywnd.cpp.

579 {
580 HWND hTrayProp;
581
583 {
585 if (hTrayProp != NULL &&
586 hTrayProp != m_TrayPropertiesOwner)
587 {
588 SetForegroundWindow(hTrayProp);
589 return NULL;
590 }
591 }
592
594 return NULL;
595 }
HWND GetLastActivePopup() const
Definition: atlwin.h:676
static DWORD WINAPI s_TrayPropertiesThread(IN OUT PVOID pParam)
Definition: traywnd.cpp:571
#define CloseHandle
Definition: compat.h:739
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:137
BOOL WINAPI SetForegroundWindow(_In_ HWND)

Referenced by ExecContextMenuCmd(), and HandleCommand().

◆ DisplayRunFileDlg()

void CTrayWindow::DisplayRunFileDlg ( )
inline

Definition at line 525 of file traywnd.cpp.

526 {
527 HWND hRunDlg;
529 {
531 if (hRunDlg != NULL &&
532 hRunDlg != m_RunFileDlgOwner)
533 {
534 SetForegroundWindow(hRunDlg);
535 return;
536 }
537 }
538
540 }
static DWORD WINAPI s_RunFileDlgThread(IN OUT PVOID pParam)
Definition: traywnd.cpp:519

Referenced by HandleCommand(), and HandleHotKey().

◆ DoExitWindows()

LRESULT CTrayWindow::DoExitWindows ( )
inline

Definition at line 463 of file traywnd.cpp.

464 {
465 SaveState();
466
467 /* Display the ReactOS Shutdown Dialog */
469
470 /*
471 * If the user presses CTRL+ALT+SHIFT while exiting
472 * the shutdown dialog, exit the shell cleanly.
473 */
474 if ((GetKeyState(VK_CONTROL) & 0x8000) &&
475 (GetKeyState(VK_SHIFT) & 0x8000) &&
476 (GetKeyState(VK_MENU) & 0x8000))
477 {
478 PostMessage(WM_QUIT, 0, 0);
479 }
480 return 0;
481 }
void SaveState()
Definition: traywnd.cpp:452
void WINAPI ExitWindowsDialog(HWND hWndOwner)
Definition: dialogs.cpp:1597
#define WM_QUIT
Definition: winuser.h:1634
#define VK_CONTROL
Definition: winuser.h:2214
#define PostMessage
Definition: winuser.h:5852
#define VK_SHIFT
Definition: winuser.h:2213
SHORT WINAPI GetKeyState(_In_ int)
#define VK_MENU
Definition: winuser.h:2215

Referenced by HandleCommand(), OnDoExitWindows(), and OnSysCommand().

◆ DrawShowDesktopButton()

void CTrayWindow::DrawShowDesktopButton ( )
inline

Definition at line 2522 of file traywnd.cpp.

2523 {
2524 if (!m_pShowDesktopButton || !m_pShowDesktopButton->IsWindow())
2525 return;
2527 }
#define RDW_UPDATENOW
Definition: winuser.h:1231
#define RDW_ERASENOW
Definition: winuser.h:1230

Referenced by OnNcActivate(), and OnNcPaint().

◆ DrawSizerWithTheme()

int CTrayWindow::DrawSizerWithTheme ( IN HRGN  hRgn)
inline

Definition at line 2090 of file traywnd.cpp.

2091 {
2092 HDC hdc;
2093 RECT rect;
2095 SIZE size;
2096
2098
2101 return 0;
2102
2104 OffsetRect(&rect, -rect.left, -rect.top);
2105
2106 hdc = GetWindowDC();
2107
2108 switch (m_Position)
2109 {
2110 case ABE_LEFT:
2111 rect.left = rect.right - size.cx;
2112 break;
2113 case ABE_TOP:
2114 rect.top = rect.bottom - size.cy;
2115 break;
2116 case ABE_RIGHT:
2117 rect.right = rect.left + size.cx;
2118 break;
2119 case ABE_BOTTOM:
2120 default:
2121 rect.bottom = rect.top + size.cy;
2122 break;
2123 }
2124
2125 DrawThemeBackground(m_Theme, hdc, iSizerPart[m_Position], 0, &rect, 0);
2126
2127 ReleaseDC(hdc);
2128 return 0;
2129 }
HDC GetWindowDC()
Definition: atlwin.h:784
HRESULT WINAPI DrawThemeBackground(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pRect, const RECT *pClipRect)
Definition: draw.c:128
#define ASSERT(a)
Definition: mode.c:44
HDC hdc
Definition: main.c:9
static HDC
Definition: imagelist.c:88
& rect
Definition: startmenu.cpp:1413
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)

Referenced by OnNcPaint().

◆ EraseBackgroundWithTheme()

LRESULT CTrayWindow::EraseBackgroundWithTheme ( HDC  hdc)
inline

Definition at line 2074 of file traywnd.cpp.

2075 {
2076 RECT rect;
2078
2080
2081 if (m_Theme)
2082 {
2084 DrawThemeBackground(m_Theme, hdc, iSBkgndPart[m_Position], 0, &rect, 0);
2085 }
2086
2087 return 0;
2088 }
@ TBP_BACKGROUNDLEFT
Definition: vssym32.h:560
@ TBP_BACKGROUNDRIGHT
Definition: vssym32.h:558
@ TBP_BACKGROUNDTOP
Definition: vssym32.h:559
@ TBP_BACKGROUNDBOTTOM
Definition: vssym32.h:557

Referenced by OnEraseBackground().

◆ ExecContextMenuCmd()

BOOL STDMETHODCALLTYPE CTrayWindow::ExecContextMenuCmd ( IN UINT  uiCmd)
inline

Definition at line 637 of file traywnd.cpp.

638 {
639 switch (uiCmd)
640 {
643 break;
644
647 TEXT("open"));
648 break;
649
652 TEXT("explore"));
653 break;
654
655 case ID_LOCKTASKBAR:
657 break;
658
661 break;
662
665 break;
666
668 ShowDesktop();
669 break;
670
673 if (g_Arrangement == NONE)
674 {
676 }
680 break;
681
684 if (g_Arrangement == NONE)
685 {
687 }
691 break;
692
695 if (g_Arrangement == NONE)
696 {
698 }
702 break;
703
706 break;
707
709 //FIXME: Use SHRunControlPanel
710 ShellExecuteW(m_hWnd, NULL, L"timedate.cpl", NULL, NULL, SW_NORMAL);
711 break;
712
714 RestoreAll();
715 break;
716
717 default:
718 TRACE("ITrayWindow::ExecContextMenuCmd(%u): Unhandled Command ID!\n", uiCmd);
719 return FALSE;
720 }
721
722 return TRUE;
723 }
HINSTANCE hExplorerInstance
Definition: explorer.cpp:24
#define ID_SHELL_CMD_OPEN_TASKMGR
Definition: resource.h:215
#define ID_SHELL_CMD_CUST_NOTIF
Definition: resource.h:221
#define ID_SHELL_CMD_UNDO_ACTION
Definition: resource.h:216
#define ID_SHELL_CMD_PROPERTIES
Definition: resource.h:211
#define ID_SHELL_CMD_TILE_WND_H
Definition: resource.h:219
#define ID_SHELL_CMD_CASCADE_WND
Definition: resource.h:220
#define ID_SHELL_CMD_RESTORE_ALL
Definition: resource.h:223
#define ID_SHELL_CMD_TILE_WND_V
Definition: resource.h:218
#define ID_LOCKTASKBAR
Definition: resource.h:214
#define ID_SHELL_CMD_SHOW_DESKTOP
Definition: resource.h:217
#define ID_SHELL_CMD_EXPLORE_ALL_USERS
Definition: resource.h:213
#define ID_SHELL_CMD_ADJUST_DAT
Definition: resource.h:222
#define ID_SHELL_CMD_OPEN_ALL_USERS
Definition: resource.h:212
void OnAppBarNotifyAll(_In_opt_ HMONITOR hMon, _In_opt_ HWND hwndIgnore, _In_ DWORD dwNotify, _In_opt_ LPARAM lParam)
Definition: appbar.cpp:206
VOID OpenTaskManager(IN HWND hWndOwner)
Definition: traywnd.cpp:615
VOID ShowDesktop()
Definition: traywnd.cpp:3148
LRESULT HandleCommand(UINT uCommand)
Definition: traywnd.cpp:776
VOID RestoreAll()
Definition: traywnd.cpp:3153
HWND STDMETHODCALLTYPE DisplayProperties()
Definition: traywnd.cpp:578
VOID OpenCommonStartMenuDirectory(IN HWND hWndOwner, IN LPCTSTR lpOperation)
Definition: traywnd.cpp:597
#define TEXT(s)
Definition: k32.h:26
VOID ShowCustomizeNotifyIcons(HINSTANCE hInst, HWND hExplorer)
#define L(x)
Definition: ntvdm.h:50
#define ABN_WINDOWARRANGE
Definition: shellapi.h:76
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
Definition: shlexec.cpp:2507
#define TRACE(s)
Definition: solgame.cpp:4
@ TILED
Definition: traywnd.cpp:45
@ NONE
Definition: traywnd.cpp:45
@ CASCADED
Definition: traywnd.cpp:45
VOID RestoreWindowPos()
Definition: traywnd.cpp:74
VOID BackupWindowPos()
Definition: traywnd.cpp:69
enum @108 g_Arrangement
#define TRAYCMD_LOCK_TASKBAR
Definition: undocshell.h:924
WORD WINAPI CascadeWindows(_In_opt_ HWND hwndParent, _In_ UINT wHow, _In_opt_ CONST RECT *lpRect, _In_ UINT cKids, _In_reads_opt_(cKids) const HWND FAR *lpKids)
WORD WINAPI TileWindows(_In_opt_ HWND hwndParent, _In_ UINT wHow, _In_opt_ CONST RECT *lpRect, _In_ UINT cKids, _In_reads_opt_(cKids) const HWND FAR *lpKids)
#define MDITILE_SKIPDISABLED
Definition: winuser.h:2198
#define MDITILE_HORIZONTAL
Definition: winuser.h:2199
#define MDITILE_VERTICAL
Definition: winuser.h:2200
#define SW_NORMAL
Definition: winuser.h:780

◆ ExecResourceCmd()

HRESULT CTrayWindow::ExecResourceCmd ( int  id)
inline

Definition at line 428 of file traywnd.cpp.

429 {
430 WCHAR szCommand[256];
431 WCHAR *pszParameters;
432
434 id,
435 szCommand,
436 _countof(szCommand)))
437 {
438 return E_FAIL;
439 }
440
441 pszParameters = wcschr(szCommand, L'>');
442 if (pszParameters)
443 {
444 *pszParameters = 0;
445 pszParameters++;
446 }
447
448 ShellExecuteW(m_hWnd, NULL, szCommand, pszParameters, NULL, SW_SHOWNORMAL);
449 return S_OK;
450 }
#define E_FAIL
Definition: ddrawi.h:102
#define wcschr
Definition: compat.h:17
#define _countof(array)
Definition: sndvol32.h:70
#define SW_SHOWNORMAL
Definition: winuser.h:781
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by HandleCommand(), and HandleHotKey().

◆ FitToRebar()

void CTrayWindow::FitToRebar ( PRECT  pRect)
inline

Definition at line 1820 of file traywnd.cpp.

1821 {
1822 /* Get the rect of the rebar */
1823 RECT rebarRect, taskbarRect, clientRect;
1824 ::GetWindowRect(m_Rebar, &rebarRect);
1825 ::GetWindowRect(m_hWnd, &taskbarRect);
1826 ::GetClientRect(m_hWnd, &clientRect);
1827 OffsetRect(&rebarRect, -taskbarRect.left, -taskbarRect.top);
1828
1829 /* Calculate the difference of size of the taskbar and the rebar */
1830 SIZE margins;
1831 margins.cx = taskbarRect.right - taskbarRect.left - clientRect.right + clientRect.left;
1832 margins.cy = taskbarRect.bottom - taskbarRect.top - clientRect.bottom + clientRect.top;
1833
1834 /* Calculate the new size of the rebar and make it resize, then change the new taskbar size */
1835 switch (m_Position)
1836 {
1837 case ABE_TOP:
1838 rebarRect.bottom = rebarRect.top + pRect->bottom - pRect->top - margins.cy;
1840 pRect->bottom = pRect->top + rebarRect.bottom - rebarRect.top + margins.cy;
1841 break;
1842 case ABE_BOTTOM:
1843 rebarRect.top = rebarRect.bottom - (pRect->bottom - pRect->top - margins.cy);
1845 pRect->top = pRect->bottom - (rebarRect.bottom - rebarRect.top + margins.cy);
1846 break;
1847 case ABE_LEFT:
1848 rebarRect.right = rebarRect.left + (pRect->right - pRect->left - margins.cx);
1850 pRect->right = pRect->left + (rebarRect.right - rebarRect.left + margins.cx);
1851 break;
1852 case ABE_RIGHT:
1853 rebarRect.left = rebarRect.right - (pRect->right - pRect->left - margins.cx);
1855 pRect->left = pRect->right - (rebarRect.right - rebarRect.left + margins.cx);
1856 break;
1857 }
1858
1860 }
static RECT margins
Definition: print.c:55
HMONITOR CalculateValidSize(IN DWORD Position, IN OUT RECT *pRect)
Definition: traywnd.cpp:1216
#define RBSTR_CHANGERECT
Definition: commctrl.h:1596
#define RB_SIZETORECT
Definition: commctrl.h:1598

Referenced by CheckTrayWndPosition(), OnExitSizeMove(), and OnSizing().

◆ GetCommandString()

HRESULT STDMETHODCALLTYPE CTrayWindow::GetCommandString ( UINT_PTR  idCmd,
UINT  uType,
UINT pwReserved,
LPSTR  pszName,
UINT  cchMax 
)
inline

Implements IContextMenu.

Definition at line 2298 of file traywnd.cpp.

2303 {
2304 if (!m_ContextMenu)
2305 return E_INVALIDARG;
2306
2307 return m_ContextMenu->GetCommandString(idCmd, uType, pwReserved, pszName, cchMax);
2308 }
UINT cchMax
CComPtr< IContextMenu > m_ContextMenu
Definition: traywnd.cpp:323
#define E_INVALIDARG
Definition: ddrawi.h:101

◆ GetDesktopWnd()

HWND CTrayWindow::GetDesktopWnd ( ) const
inlineoverrideprotectedvirtual

Implements CAppBarManager.

Definition at line 3585 of file traywnd.cpp.

3585{ return m_DesktopWnd; }

◆ GetDraggingRectFromPt()

DWORD CTrayWindow::GetDraggingRectFromPt ( IN POINT  pt,
OUT RECT pRect,
OUT HMONITOR phMonitor 
)
inline

Definition at line 1273 of file traywnd.cpp.

1277 {
1278 HMONITOR hMon, hMonNew;
1279 DWORD PosH, PosV, Pos;
1280 SIZE DeltaPt, ScreenOffset;
1281 RECT rcScreen;
1282
1283 rcScreen.left = 0;
1284 rcScreen.top = 0;
1285
1286 /* Determine the screen rectangle */
1287 hMon = MonitorFromPoint(pt, MONITOR_DEFAULTTONULL);
1288 if (hMon != NULL)
1289 {
1291
1292 mi.cbSize = sizeof(mi);
1293 if (!GetMonitorInfo(hMon, &mi))
1294 {
1295 hMon = NULL;
1296 goto GetPrimaryScreenRect;
1297 }
1298
1299 /* make left top corner of the screen zero based to
1300 make calculations easier */
1301 pt.x -= mi.rcMonitor.left;
1302 pt.y -= mi.rcMonitor.top;
1303
1304 ScreenOffset.cx = mi.rcMonitor.left;
1305 ScreenOffset.cy = mi.rcMonitor.top;
1306 rcScreen.right = mi.rcMonitor.right - mi.rcMonitor.left;
1307 rcScreen.bottom = mi.rcMonitor.bottom - mi.rcMonitor.top;
1308 }
1309 else
1310 {
1311GetPrimaryScreenRect:
1312 ScreenOffset.cx = 0;
1313 ScreenOffset.cy = 0;
1316 }
1317
1318 /* Calculate the nearest screen border */
1319 if (pt.x < rcScreen.right / 2)
1320 {
1321 DeltaPt.cx = pt.x;
1322 PosH = ABE_LEFT;
1323 }
1324 else
1325 {
1326 DeltaPt.cx = rcScreen.right - pt.x;
1327 PosH = ABE_RIGHT;
1328 }
1329
1330 if (pt.y < rcScreen.bottom / 2)
1331 {
1332 DeltaPt.cy = pt.y;
1333 PosV = ABE_TOP;
1334 }
1335 else
1336 {
1337 DeltaPt.cy = rcScreen.bottom - pt.y;
1338 PosV = ABE_BOTTOM;
1339 }
1340
1341 Pos = (DeltaPt.cx * rcScreen.bottom < DeltaPt.cy * rcScreen.right) ? PosH : PosV;
1342
1343 /* Fix the screen origin to be relative to the primary monitor again */
1344 OffsetRect(&rcScreen,
1345 ScreenOffset.cx,
1346 ScreenOffset.cy);
1347
1348 RECT rcPos = m_TrayRects[Pos];
1349
1350 hMonNew = GetMonitorFromRect(&rcPos);
1351 if (hMon != hMonNew)
1352 {
1353 SIZE szTray;
1354
1355 /* Recalculate the rectangle, we're dragging to another monitor.
1356 We don't need to recalculate the rect on single monitor systems. */
1357 szTray.cx = rcPos.right - rcPos.left;
1358 szTray.cy = rcPos.bottom - rcPos.top;
1359
1360 GetTrayRectFromScreenRect(Pos, &rcScreen, &szTray, pRect);
1361 hMon = hMonNew;
1362 }
1363 else
1364 {
1365 /* The user is dragging the tray window on the same monitor. We don't need
1366 to recalculate the rectangle */
1367 *pRect = rcPos;
1368 }
1369
1370 *phMonitor = hMon;
1371
1372 return Pos;
1373 }
HMONITOR GetMonitorFromRect(IN const RECT *pRect)
Definition: traywnd.cpp:1073
ush Pos
Definition: deflate.h:92
#define pt(x, y)
Definition: drawing.c:79
static MONITORINFO mi
Definition: win.c:7338
HMONITOR WINAPI MonitorFromPoint(POINT, DWORD)
RECT rcMonitor
Definition: winuser.h:3796
DWORD cbSize
Definition: winuser.h:3795
#define GetMonitorInfo
Definition: winuser.h:5811
#define SM_CYSCREEN
Definition: winuser.h:971
#define SM_CXSCREEN
Definition: winuser.h:970

Referenced by GetDraggingRectFromRect(), and OnMoving().

◆ GetDraggingRectFromRect()

DWORD CTrayWindow::GetDraggingRectFromRect ( IN OUT RECT pRect,
OUT HMONITOR phMonitor 
)
inline

Definition at line 1375 of file traywnd.cpp.

1378 {
1379 POINT pt;
1380
1381 /* Calculate the center of the rectangle. We call
1382 GetDraggingRectFromPt to calculate a valid
1383 dragging rectangle */
1384 pt.x = pRect->left + ((pRect->right - pRect->left) / 2);
1385 pt.y = pRect->top + ((pRect->bottom - pRect->top) / 2);
1386
1387 return GetDraggingRectFromPt(
1388 pt,
1389 pRect,
1390 phMonitor);
1391 }
DWORD GetDraggingRectFromPt(IN POINT pt, OUT RECT *pRect, OUT HMONITOR *phMonitor)
Definition: traywnd.cpp:1273

Referenced by ChangingWinPos().

◆ GetHWND()

HWND STDMETHODCALLTYPE CTrayWindow::GetHWND ( )
inline

Definition at line 2188 of file traywnd.cpp.

2189 {
2190 return m_hWnd;
2191 }

◆ GetMonitor()

HMONITOR CTrayWindow::GetMonitor ( ) const
inlineoverrideprotectedvirtual

Implements CAppBarManager.

Definition at line 3581 of file traywnd.cpp.

3581{ return m_Monitor; }

◆ GetMonitorFromRect()

HMONITOR CTrayWindow::GetMonitorFromRect ( IN const RECT pRect)
inline

Definition at line 1073 of file traywnd.cpp.

1075 {
1076 HMONITOR hMon;
1077
1078 /* In case the monitor sizes or saved sizes differ a bit (probably
1079 not a lot, only so the tray window overlaps into another monitor
1080 now), minimize the risk that we determine a wrong monitor by
1081 using the center point of the tray window if we can't determine
1082 it using the rectangle. */
1083 hMon = MonitorFromRect(pRect, MONITOR_DEFAULTTONULL);
1084 if (hMon == NULL)
1085 {
1086 POINT pt;
1087
1088 pt.x = pRect->left + ((pRect->right - pRect->left) / 2);
1089 pt.y = pRect->top + ((pRect->bottom - pRect->top) / 2);
1090
1091 /* be less error-prone, find the nearest monitor */
1092 hMon = MonitorFromPoint(pt, MONITOR_DEFAULTTONEAREST);
1093 }
1094
1095 return hMon;
1096 }
HMONITOR WINAPI MonitorFromRect(LPCRECT, DWORD)

Referenced by GetDraggingRectFromPt(), GetScreenRect(), and RegLoadSettings().

◆ GetPosition()

INT CTrayWindow::GetPosition ( ) const
inlineoverrideprotectedvirtual

Implements CAppBarManager.

Definition at line 3583 of file traywnd.cpp.

3583{ return m_Position; }

◆ GetPreviousMonitor()

HMONITOR CTrayWindow::GetPreviousMonitor ( ) const
inlineoverrideprotectedvirtual

Implements CAppBarManager.

Definition at line 3582 of file traywnd.cpp.

3582{ return m_PreviousMonitor; }

◆ GetScreenRect()

HMONITOR CTrayWindow::GetScreenRect ( IN HMONITOR  hMonitor,
IN OUT RECT pRect 
)
inline

Definition at line 1098 of file traywnd.cpp.

1101 {
1102 HMONITOR hMon = NULL;
1103
1104 if (hMonitor != NULL)
1105 {
1107
1108 mi.cbSize = sizeof(mi);
1109 if (!GetMonitorInfo(hMonitor, &mi))
1110 {
1111 /* Hm, the monitor is gone? Try to find a monitor where it
1112 could be located now */
1113 hMon = GetMonitorFromRect(pRect);
1114 if (hMon == NULL ||
1115 !GetMonitorInfo(hMon, &mi))
1116 {
1117 hMon = NULL;
1118 goto GetPrimaryRect;
1119 }
1120 }
1121
1122 *pRect = mi.rcMonitor;
1123 }
1124 else
1125 {
1126GetPrimaryRect:
1127 pRect->left = 0;
1128 pRect->top = 0;
1129 pRect->right = GetSystemMetrics(SM_CXSCREEN);
1130 pRect->bottom = GetSystemMetrics(SM_CYSCREEN);
1131 }
1132
1133 return hMon;
1134 }

Referenced by ApplyClipping(), and ResizeWorkArea().

◆ GetScreenRectFromRect()

HMONITOR CTrayWindow::GetScreenRectFromRect ( IN OUT RECT pRect,
IN DWORD  dwFlags 
)
inline

Definition at line 1046 of file traywnd.cpp.

1049 {
1051 HMONITOR hMon;
1052
1053 mi.cbSize = sizeof(mi);
1054 hMon = MonitorFromRect(pRect, dwFlags);
1055 if (hMon != NULL &&
1056 GetMonitorInfo(hMon, &mi))
1057 {
1058 *pRect = mi.rcMonitor;
1059 }
1060 else
1061 {
1062 pRect->left = 0;
1063 pRect->top = 0;
1064 pRect->right = GetSystemMetrics(SM_CXSCREEN);
1065 pRect->bottom = GetSystemMetrics(SM_CYSCREEN);
1066
1067 hMon = NULL;
1068 }
1069
1070 return hMon;
1071 }
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176

Referenced by CalculateValidSize(), and RegLoadSettings().

◆ GetState()

CTrayWindow::GetState ( )
inlineoverride

Definition at line 3500 of file traywnd.cpp.

3501 {
3502 /* FIXME: Return ABS_ flags? */
3503 TRACE("IShellDesktopTray::GetState() unimplemented!\n");
3504 return 0;
3505 }

◆ GetTrayRect()

const RECT * CTrayWindow::GetTrayRect ( )
inlineoverrideprotectedvirtual

Implements CAppBarManager.

Definition at line 3584 of file traywnd.cpp.

3584{ return &m_TrayRects[m_Position]; }

◆ GetTrayRectFromScreenRect()

VOID CTrayWindow::GetTrayRectFromScreenRect ( IN DWORD  Position,
IN const RECT pScreen,
IN const SIZE *pTraySize  OPTIONAL,
OUT RECT pRect 
)
inline

Definition at line 1190 of file traywnd.cpp.

1194 {
1195 if (pTraySize == NULL)
1196 pTraySize = &m_TraySize;
1197
1198 *pRect = *pScreen;
1199
1200 if(!m_Theme)
1201 {
1202 /* Move the border outside of the screen */
1203 InflateRect(pRect,
1206 }
1207
1208 MakeTrayRectWithSize(Position, pTraySize, pRect);
1209 }
#define SM_CXEDGE
Definition: winuser.h:1019
BOOL WINAPI InflateRect(_Inout_ LPRECT, _In_ int, _In_ int)

Referenced by CalculateValidSize(), GetDraggingRectFromPt(), and RegLoadSettings().

◆ GetTrayWindow()

STDMETHODIMP CTrayWindow::GetTrayWindow ( OUT HWND phWndTray)
inlineoverride

Definition at line 3508 of file traywnd.cpp.

3509 {
3510 TRACE("IShellDesktopTray::GetTrayWindow(0x%p)\n", phWndTray);
3511 *phWndTray = m_hWnd;
3512 return S_OK;
3513 }

◆ GetWindow()

STDMETHODIMP CTrayWindow::GetWindow ( HWND phwnd)
inlineoverride

Implements IOleWindow.

Definition at line 3540 of file traywnd.cpp.

3541 {
3542 if (!phwnd)
3543 return E_INVALIDARG;
3544 *phwnd = m_hWnd;
3545 return S_OK;
3546 }

Referenced by AlignControls(), IsTaskWnd(), and MinimizeWindowsProc().

◆ HandleCommand()

LRESULT CTrayWindow::HandleCommand ( UINT  uCommand)
inline

Definition at line 776 of file traywnd.cpp.

777 {
778 switch (uCommand)
779 {
781 // TODO:
782 break;
786 break;
788 SaveState();
789 LogoffWindowsDialog(m_hWnd); // FIXME: Maybe handle it in a similar way as DoExitWindows?
790 break;
791 case TRAYCMD_CASCADE:
793 break;
794 case TRAYCMD_TILE_H:
796 break;
797 case TRAYCMD_TILE_V:
799 break;
802 break;
804 ShellExecuteW(m_hWnd, NULL, L"timedate.cpl", NULL, NULL, SW_NORMAL);
805 break;
808 break;
810 MinimizeAll();
811 break;
813 RestoreAll();
814 break;
816 ShowDesktop();
817 break;
820 break;
822 break;
825 {
828 }
829 break;
832 break;
834 // TODO:
835 break;
838 break;
840 // TODO:
841 break;
843 // TODO:
844 break;
846 // TODO:
847 break;
848 case IDM_SEARCH:
851 break;
854 break;
855
856 default:
857 break;
858 }
859
860 return FALSE;
861 }
#define IDM_SEARCH
Definition: resource.h:77
#define IDS_HELP_COMMAND
Definition: resource.h:109
VOID ToggleDesktop()
Definition: traywnd.cpp:625
HRESULT ExecResourceCmd(int id)
Definition: traywnd.cpp:428
VOID HideStartMenu()
Definition: traywnd.cpp:725
VOID MinimizeAll(BOOL bShowDesktop=FALSE)
Definition: traywnd.cpp:3130
LRESULT DoExitWindows()
Definition: traywnd.cpp:463
void DisplayRunFileDlg()
Definition: traywnd.cpp:525
EXTERN_C int WINAPI LogoffWindowsDialog(HWND hWndOwner)
Definition: dialogs.cpp:1534
EXTERN_C BOOL WINAPI SHFindComputer(LPCITEMIDLIST pidlRoot, LPCITEMIDLIST pidlSavedSearch)
Definition: utils.cpp:1148
BOOL WINAPI SHFindFiles(PCIDLIST_ABSOLUTE pidlFolder, PCIDLIST_ABSOLUTE pidlSaveFile)
Definition: shellord.c:2468
@ REST_CLASSICSHELL
Definition: shlobj.h:1688
DWORD WINAPI SHRestricted(RESTRICTIONS rest)
Definition: shpolicy.c:166
#define TRAYCMD_CONTROL_PANEL
Definition: undocshell.h:926
#define TRAYCMD_STARTMENU
Definition: undocshell.h:910
#define TRAYCMD_LOCK_DESKTOP
Definition: undocshell.h:929
#define TRAYCMD_DATE_AND_TIME
Definition: undocshell.h:917
#define TRAYCMD_SEARCH_COMPUTERS
Definition: undocshell.h:932
#define TRAYCMD_TASKBAR_PROPERTIES
Definition: undocshell.h:918
#define TRAYCMD_SHOW_DESKTOP
Definition: undocshell.h:921
#define TRAYCMD_TILE_V
Definition: undocshell.h:915
#define TRAYCMD_SEARCH_FILES
Definition: undocshell.h:931
#define TRAYCMD_CUSTOMIZE_TASKBAR
Definition: undocshell.h:923
#define TRAYCMD_TILE_H
Definition: undocshell.h:914
#define TRAYCMD_TOGGLE_DESKTOP
Definition: undocshell.h:916
#define TRAYCMD_RUN_DIALOG
Definition: undocshell.h:911
#define TRAYCMD_LOGOFF_DIALOG
Definition: undocshell.h:912
#define TRAYCMD_CASCADE
Definition: undocshell.h:913
#define TRAYCMD_SHOW_TASK_MGR
Definition: undocshell.h:922
#define TRAYCMD_RESTORE_ALL
Definition: undocshell.h:920
#define TRAYCMD_SHUTDOWN_DIALOG
Definition: undocshell.h:927
#define TRAYCMD_PRINTERS_AND_FAXES
Definition: undocshell.h:928
#define TRAYCMD_MINIMIZE_ALL
Definition: undocshell.h:919
#define TRAYCMD_SWITCH_USER_DIALOG
Definition: undocshell.h:930
#define TRAYCMD_HELP_AND_SUPPORT
Definition: undocshell.h:925

Referenced by ExecContextMenuCmd(), and OnCommand().

◆ HandleHotKey()

LRESULT CTrayWindow::HandleHotKey ( DWORD  id)
inline

Definition at line 730 of file traywnd.cpp.

731 {
732 switch (id)
733 {
734 case IDHK_RUN:
737 break;
738 case IDHK_HELP:
740 break;
741 case IDHK_EXPLORE:
742 //FIXME: We don't support this yet:
743 //ShellExecuteW(0, L"explore", NULL, NULL, NULL, 1);
744 ShellExecuteW(0, NULL, L"explorer.exe", L"/e ,", NULL, 1);
745 break;
746 case IDHK_FIND:
748 break;
751 break;
753 //FIXME: Use SHRunControlPanel
754 ShellExecuteW(m_hWnd, NULL, L"sysdm.cpl", NULL, NULL, SW_NORMAL);
755 break;
756 case IDHK_NEXT_TASK:
757 break;
758 case IDHK_PREV_TASK:
759 break;
761 MinimizeAll();
762 break;
763 case IDHK_RESTORE_ALL:
764 RestoreAll();
765 break;
766 case IDHK_DESKTOP:
768 break;
769 case IDHK_PAGER:
770 break;
771 }
772
773 return 0;
774 }
#define IDHK_NEXT_TASK
Definition: traywnd.cpp:39
#define IDHK_RUN
Definition: traywnd.cpp:32
#define IDHK_DESKTOP
Definition: traywnd.cpp:42
#define IDHK_EXPLORE
Definition: traywnd.cpp:36
#define IDHK_MINIMIZE_ALL
Definition: traywnd.cpp:33
#define IDHK_RESTORE_ALL
Definition: traywnd.cpp:34
#define IDHK_SYS_PROPERTIES
Definition: traywnd.cpp:41
#define IDHK_PREV_TASK
Definition: traywnd.cpp:40
#define IDHK_FIND
Definition: traywnd.cpp:37
#define IDHK_HELP
Definition: traywnd.cpp:35
#define IDHK_FIND_COMPUTER
Definition: traywnd.cpp:38
#define IDHK_PAGER
Definition: traywnd.cpp:43

Referenced by OnHotkey().

◆ HideStartMenu()

VOID CTrayWindow::HideStartMenu ( )
inline

Definition at line 725 of file traywnd.cpp.

726 {
727 m_StartMenuPopup->OnSelect(MPOS_CANCELLEVEL);
728 }
CComPtr< IMenuPopup > m_StartMenuPopup
Definition: traywnd.cpp:320

Referenced by HandleCommand(), HandleHotKey(), OnOpenStartMenu(), and OnSettingChanged().

◆ if()

CTrayWindow::if ( m_StartMenuBand = NULL)
inline

Definition at line 3380 of file traywnd.cpp.

3381 {
3382 MSG Msg;
3383 LRESULT lRet;
3384
3385 Msg.hwnd = m_hWnd;
3386 Msg.message = uMsg;
3387 Msg.wParam = wParam;
3388 Msg.lParam = lParam;
3389
3390 if (m_StartMenuBand->TranslateMenuMessage(&Msg, &lRet) == S_OK)
3391 {
3392 return lRet;
3393 }
3394
3395 wParam = Msg.wParam;
3396 lParam = Msg.lParam;
3397 }
CComPtr< IMenuBand > m_StartMenuBand
Definition: traywnd.cpp:319
WPARAM wParam
Definition: combotst.c:138
struct @1680 Msg[]
LPARAM lParam
Definition: combotst.c:139
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
LONG_PTR LRESULT
Definition: windef.h:209

◆ InvokeCommand()

HRESULT STDMETHODCALLTYPE CTrayWindow::InvokeCommand ( LPCMINVOKECOMMANDINFO  lpici)
inline

Implements IContextMenu.

Definition at line 2290 of file traywnd.cpp.

2291 {
2292 if (!m_ContextMenu)
2293 return E_INVALIDARG;
2294
2295 return m_ContextMenu->InvokeCommand(lpici);
2296 }

◆ IsAutoHideState()

BOOL CTrayWindow::IsAutoHideState ( ) const
inlineoverrideprotectedvirtual

Implements CAppBarManager.

Definition at line 3579 of file traywnd.cpp.

3579{ return g_TaskbarSettings.sr.AutoHide; }

◆ IsDialog()

static BOOL CTrayWindow::IsDialog ( HWND  hwnd)
inlinestatic

Definition at line 3095 of file traywnd.cpp.

3096 {
3097 WCHAR szClass[32];
3098 GetClassNameW(hwnd, szClass, _countof(szClass));
3099 return wcscmp(szClass, L"#32770") == 0;
3100 }
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
int WINAPI GetClassNameW(_In_ HWND hWnd, _Out_writes_to_(nMaxCount, return) LPWSTR lpClassName, _In_ int nMaxCount)

Referenced by MinimizeWindowsProc().

◆ IsHidingState()

BOOL CTrayWindow::IsHidingState ( ) const
inlineoverrideprotectedvirtual

Implements CAppBarManager.

Definition at line 3580 of file traywnd.cpp.

3580{ return m_AutoHideState == AUTOHIDE_HIDING; }
#define AUTOHIDE_HIDING
Definition: traywnd.cpp:30

◆ IsHorizontal()

BOOL STDMETHODCALLTYPE CTrayWindow::IsHorizontal ( )
inline

Definition at line 2199 of file traywnd.cpp.

2200 {
2201 return IsPosHorizontal();
2202 }

◆ IsPointWithinShowDesktopButton()

BOOL CTrayWindow::IsPointWithinShowDesktopButton ( LPPOINT  ppt,
LPRECT  prcShowDesktopBtn,
PWINDOWINFO  pwi 
)
inline

Definition at line 2811 of file traywnd.cpp.

2812 {
2813 if (!ppt || !prcShowDesktopBtn)
2814 return FALSE;
2816
2817 switch (m_Position)
2818 {
2819 case ABE_LEFT:
2820 return !(ppt->x > prcShowDesktopBtn->right || ppt->y < prcShowDesktopBtn->top);
2821 case ABE_TOP:
2822 return !(ppt->x < prcShowDesktopBtn->left || ppt->y > prcShowDesktopBtn->bottom);
2823 case ABE_RIGHT:
2824 return !(ppt->x < prcShowDesktopBtn->left || ppt->y < prcShowDesktopBtn->top);
2825 case ABE_BOTTOM:
2826 return !(ppt->x < prcShowDesktopBtn->left || ppt->y < prcShowDesktopBtn->top);
2827 }
2828 return FALSE;
2829 }
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:325

◆ IsPointWithinStartButton()

BOOL CTrayWindow::IsPointWithinStartButton ( LPPOINT  ppt,
LPRECT  prcStartBtn,
PWINDOWINFO  pwi 
)
inline

Definition at line 2768 of file traywnd.cpp.

2769 {
2770 if (!ppt || !prcStartBtn || !pwi)
2771 return FALSE;
2772
2773 switch (m_Position)
2774 {
2775 case ABE_TOP:
2776 case ABE_LEFT:
2777 {
2778 if (ppt->x > prcStartBtn->right || ppt->y > prcStartBtn->bottom)
2779 return FALSE;
2780 break;
2781 }
2782 case ABE_RIGHT:
2783 {
2784 if (ppt->x < prcStartBtn->left || ppt->y > prcStartBtn->bottom)
2785 return FALSE;
2786
2787 if (prcStartBtn->right + (int)pwi->cxWindowBorders * 2 + 1 < pwi->rcWindow.right &&
2788 ppt->x > prcStartBtn->right)
2789 {
2790 return FALSE;
2791 }
2792 break;
2793 }
2794 case ABE_BOTTOM:
2795 {
2796 if (ppt->x > prcStartBtn->right || ppt->y < prcStartBtn->top)
2797 return FALSE;
2798
2799 if (prcStartBtn->bottom + (int)pwi->cyWindowBorders * 2 + 1 < pwi->rcWindow.bottom &&
2800 ppt->y > prcStartBtn->bottom)
2801 {
2802 return FALSE;
2803 }
2804
2805 break;
2806 }
2807 }
2808 return TRUE;
2809 }
UINT cxWindowBorders
Definition: winuser.h:3783
UINT cyWindowBorders
Definition: winuser.h:3784
RECT rcWindow
Definition: winuser.h:3778

Referenced by OnNcLButtonDown().

◆ IsPosHorizontal()

BOOL CTrayWindow::IsPosHorizontal ( )
inline

Definition at line 1211 of file traywnd.cpp.

1212 {
1213 return m_Position == ABE_TOP || m_Position == ABE_BOTTOM;
1214 }

Referenced by AlignControls(), and IsHorizontal().

◆ IsSpecialHWND()

BOOL STDMETHODCALLTYPE CTrayWindow::IsSpecialHWND ( IN HWND  hWnd)
inline

Definition at line 2193 of file traywnd.cpp.

2194 {
2195 return (m_hWnd == hWnd ||
2197 }
HWND hWnd
Definition: settings.c:17

Referenced by IsTaskWnd().

◆ IsTaskWnd()

BOOL STDMETHODCALLTYPE CTrayWindow::IsTaskWnd ( HWND  hWnd)
inline

Definition at line 2257 of file traywnd.cpp.

2258 {
2260 {
2262 if (((exStyle & WS_EX_APPWINDOW) || ::GetWindow(hWnd, GW_OWNER) == NULL) &&
2263 !(exStyle & WS_EX_TOOLWINDOW))
2264 {
2265 return TRUE;
2266 }
2267 }
2268 return FALSE;
2269 }
BOOL IsWindowVisible() const
Definition: atlwin.h:958
BOOL IsWindow() const
Definition: atlwin.h:947
BOOL STDMETHODCALLTYPE IsSpecialHWND(IN HWND hWnd)
Definition: traywnd.cpp:2193
#define GetWindowLongPtr
Definition: treelist.c:73
#define GW_OWNER
Definition: winuser.h:777
#define WS_EX_APPWINDOW
Definition: winuser.h:383
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
#define GWL_EXSTYLE
Definition: winuser.h:862

Referenced by RestoreMinimizedNonTaskWnds().

◆ Lock()

BOOL STDMETHODCALLTYPE CTrayWindow::Lock ( IN BOOL  bLock)
inline

Definition at line 2204 of file traywnd.cpp.

2205 {
2206 BOOL bPrevLock = g_TaskbarSettings.bLock;
2207
2208 if (g_TaskbarSettings.bLock != bLock)
2209 {
2210 g_TaskbarSettings.bLock = bLock;
2211
2212 if (m_TrayBandSite != NULL)
2213 {
2214 if (!SUCCEEDED(m_TrayBandSite->Lock(bLock)))
2215 {
2216 /* Reset?? */
2217 g_TaskbarSettings.bLock = bPrevLock;
2218 return bPrevLock;
2219 }
2220 }
2221
2222 if (m_Theme)
2223 {
2224 /* Update cached tray sizes */
2225 for(DWORD Pos = ABE_LEFT; Pos <= ABE_BOTTOM; Pos++)
2226 {
2227 RECT rcGripper = {0};
2228 AdjustSizerRect(&rcGripper, Pos);
2229
2231 {
2232 m_TrayRects[Pos].top += rcGripper.top;
2233 m_TrayRects[Pos].left += rcGripper.left;
2234 m_TrayRects[Pos].bottom += rcGripper.bottom;
2235 m_TrayRects[Pos].right += rcGripper.right;
2236 }
2237 else
2238 {
2239 m_TrayRects[Pos].top -= rcGripper.top;
2240 m_TrayRects[Pos].left -= rcGripper.left;
2241 m_TrayRects[Pos].bottom -= rcGripper.bottom;
2242 m_TrayRects[Pos].right -= rcGripper.right;
2243 }
2244 }
2245 }
2249 }
2250
2251 return bPrevLock;
2252 }
VOID AdjustSizerRect(RECT *rc, DWORD pos)
Definition: traywnd.cpp:1136
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define SWP_FRAMECHANGED
Definition: winuser.h:1251
#define SWP_NOOWNERZORDER
Definition: winuser.h:1260

◆ MakeTrayRectWithSize()

VOID CTrayWindow::MakeTrayRectWithSize ( IN DWORD  Position,
IN const SIZE pTraySize,
IN OUT RECT pRect 
)
inline

Definition at line 1165 of file traywnd.cpp.

1168 {
1169 switch (Position)
1170 {
1171 case ABE_LEFT:
1172 pRect->right = pRect->left + pTraySize->cx;
1173 break;
1174
1175 case ABE_TOP:
1176 pRect->bottom = pRect->top + pTraySize->cy;
1177 break;
1178
1179 case ABE_RIGHT:
1180 pRect->left = pRect->right - pTraySize->cx;
1181 break;
1182
1183 case ABE_BOTTOM:
1184 default:
1185 pRect->top = pRect->bottom - pTraySize->cy;
1186 break;
1187 }
1188 }

Referenced by ChangingWinPos(), and GetTrayRectFromScreenRect().

◆ MinimizeAll()

VOID CTrayWindow::MinimizeAll ( BOOL  bShowDesktop = FALSE)
inline

Definition at line 3130 of file traywnd.cpp.

3131 {
3132 IgnorePulse = TRUE;
3134
3135 MINIMIZE_INFO info;
3136 info.hwndDesktop = GetDesktopWindow();;
3137 info.hTrayWnd = FindWindowW(L"Shell_TrayWnd", NULL);
3138 info.hwndProgman = FindWindowW(L"Progman", NULL);
3139 info.pMinimizedAll = &g_MinimizedAll;
3140 info.bShowDesktop = bShowDesktop;
3142
3146 }
HWND SetFocus()
Definition: atlwin.h:1198
static BOOL CALLBACK MinimizeWindowsProc(HWND hwnd, LPARAM lParam)
Definition: traywnd.cpp:3102
CSimpleArray< MINWNDPOS > g_MinimizedAll
Definition: traywnd.cpp:170
#define TIMER_IGNOREPULSERESET_TIMEOUT
Definition: traywnd.cpp:2410
#define TIMER_ID_IGNOREPULSERESET
Definition: traywnd.cpp:2409
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
HWND WINAPI GetDesktopWindow(void)
Definition: window.c:628
BOOL WINAPI EnumWindows(_In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam)
HWND WINAPI FindWindowW(_In_opt_ LPCWSTR, _In_opt_ LPCWSTR)
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)

Referenced by HandleCommand(), HandleHotKey(), and ShowDesktop().

◆ MinimizeWindowsProc()

static BOOL CALLBACK CTrayWindow::MinimizeWindowsProc ( HWND  hwnd,
LPARAM  lParam 
)
inlinestatic

Definition at line 3102 of file traywnd.cpp.

3103 {
3104 MINIMIZE_INFO *info = (MINIMIZE_INFO *)lParam;
3105 if (hwnd == info->hwndDesktop || hwnd == info->hTrayWnd || hwnd == info->hwndProgman)
3106 return TRUE; // Ignore special windows
3107
3108 if (!info->bShowDesktop)
3109 {
3111 return TRUE;
3112 HWND hwndOwner = ::GetWindow(hwnd, GW_OWNER);
3113 if (hwndOwner && !::IsWindowEnabled(hwndOwner))
3114 return TRUE;
3115 }
3116
3117 if (CanBeMinimized(hwnd))
3118 {
3119 MINWNDPOS mwp = { hwnd, { sizeof(mwp.wndpl) } };
3120 if (::GetWindowPlacement(hwnd, &mwp.wndpl) && // Save the position and status
3122 {
3123 info->pMinimizedAll->Add(mwp);
3124 }
3125 }
3126
3127 return TRUE;
3128 }
BOOL IsWindowEnabled() const
Definition: atlwin.h:952
static BOOL IsDialog(HWND hwnd)
Definition: traywnd.cpp:3095
WINDOWPLACEMENT wndpl
Definition: traywnd.cpp:168
BOOL CanBeMinimized(HWND hwnd)
Definition: traywnd.cpp:86
BOOL WINAPI GetWindowPlacement(_In_ HWND, _Inout_ WINDOWPLACEMENT *)
BOOL WINAPI ShowWindowAsync(_In_ HWND, _In_ int)
#define SW_SHOWMINNOACTIVE
Definition: winuser.h:788

Referenced by MinimizeAll().

◆ OnAppTrayDestroy()

LRESULT CTrayWindow::OnAppTrayDestroy ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 3000 of file traywnd.cpp.

3001 {
3002 DestroyWindow();
3003 return TRUE;
3004 }
BOOL DestroyWindow()
Definition: atlwin.h:462

◆ OnCommand()

LRESULT CTrayWindow::OnCommand ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 3169 of file traywnd.cpp.

3170 {
3171 LRESULT Ret = FALSE;
3172
3174 {
3175 return FALSE;
3176 }
3177
3178 if (m_TrayBandSite == NULL || FAILED_UNEXPECTEDLY(m_TrayBandSite->ProcessMessage(m_hWnd, uMsg, wParam, lParam, &Ret)))
3179 {
3180 return HandleCommand(LOWORD(wParam));
3181 }
3182 return Ret;
3183 }
#define LOWORD(l)
Definition: pedump.c:82

◆ OnContextMenu()

LRESULT CTrayWindow::OnContextMenu ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2869 of file traywnd.cpp.

2870 {
2871 LRESULT Ret = FALSE;
2872 POINT pt, *ppt = NULL;
2873 HWND hWndExclude = NULL;
2874
2875 /* Check if the administrator has forbidden access to context menus */
2877 return FALSE;
2878
2879 pt.x = (SHORT) LOWORD(lParam);
2880 pt.y = (SHORT) HIWORD(lParam);
2881
2882 if (pt.x != -1 || pt.y != -1)
2883 ppt = &pt;
2884 else
2885 hWndExclude = m_StartButton.m_hWnd;
2886
2888 {
2889 /* Make sure we can't track the context menu if the start
2890 menu is currently being shown */
2892 {
2893 CComPtr<IContextMenu> ctxMenu;
2895 TrackCtxMenu(ctxMenu, ppt, hWndExclude, m_Position == ABE_BOTTOM, this);
2896 }
2897 }
2898 else
2899 {
2900 /* See if the context menu should be handled by the task band site */
2901 if (ppt != NULL && m_TrayBandSite != NULL)
2902 {
2903 HWND hWndAtPt;
2904 POINT ptClient = *ppt;
2905
2906 /* Convert the coordinates to client-coordinates */
2907 ::MapWindowPoints(NULL, m_hWnd, &ptClient, 1);
2908
2909 hWndAtPt = ChildWindowFromPoint(ptClient);
2910 if (hWndAtPt != NULL &&
2911 (hWndAtPt == m_Rebar || ::IsChild(m_Rebar, hWndAtPt)))
2912 {
2913 /* Check if the user clicked on the task switch window */
2914 ptClient = *ppt;
2915 ::MapWindowPoints(NULL, m_Rebar, &ptClient, 1);
2916
2918 if (hWndAtPt == m_TaskSwitch)
2919 goto HandleTrayContextMenu;
2920
2921 /* Forward the message to the task band site */
2922 m_TrayBandSite->ProcessMessage(m_hWnd, uMsg, wParam, lParam, &Ret);
2923 }
2924 else
2925 goto HandleTrayContextMenu;
2926 }
2927 else
2928 {
2929HandleTrayContextMenu:
2930 /* Tray the default tray window context menu */
2931 TrackCtxMenu(this, ppt, NULL, FALSE, this);
2932 }
2933 }
2934 return Ret;
2935 }
HRESULT CStartMenuBtnCtxMenu_CreateInstance(ITrayWindow *TrayWnd, IN HWND hWndOwner, IContextMenu **ppCtxMenu)
LRESULT SendMessage(UINT message, WPARAM wParam=0, LPARAM lParam=0)
Definition: atlwin.h:1116
HRESULT TrackCtxMenu(IN IContextMenu *contextMenu, IN POINT *ppt OPTIONAL, IN HWND hwndExclude OPTIONAL, IN BOOL TrackUp, IN PVOID Context OPTIONAL)
Definition: traywnd.cpp:935
short SHORT
Definition: pedump.c:59
@ REST_NOTRAYCONTEXTMENU
Definition: shlobj.h:1676
HWND WINAPI ChildWindowFromPoint(_In_ HWND, _In_ POINT)
#define BM_GETSTATE
Definition: winuser.h:1931
HWND WINAPI ChildWindowFromPointEx(_In_ HWND, _In_ POINT, _In_ UINT)
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
#define CWP_SKIPDISABLED
Definition: winuser.h:209
BOOL WINAPI IsChild(_In_ HWND, _In_ HWND)
#define BST_PUSHED
Definition: winuser.h:201
#define CWP_SKIPINVISIBLE
Definition: winuser.h:208

Referenced by OnNcRButtonUp().

◆ OnCopyData()

LRESULT CTrayWindow::OnCopyData ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2504 of file traywnd.cpp.

2505 {
2507 if (!pCopyData)
2508 return FALSE;
2509
2510 switch (pCopyData->dwData)
2511 {
2512 case TABDMC_APPBAR:
2513 return OnAppBarMessage(pCopyData);
2514 case TABDMC_NOTIFY:
2515 case TABDMC_LOADINPROC:
2516 return ::SendMessageW(m_TrayNotify, uMsg, wParam, lParam);
2517 }
2518 return FALSE;
2519 }
LRESULT OnAppBarMessage(_Inout_ PCOPYDATASTRUCT pCopyData)
Definition: appbar.cpp:444
ULONG_PTR dwData
Definition: winuser.h:3012
#define TABDMC_APPBAR
Definition: undocshell.h:935
#define TABDMC_LOADINPROC
Definition: undocshell.h:937
#define TABDMC_NOTIFY
Definition: undocshell.h:936
struct tagCOPYDATASTRUCT * PCOPYDATASTRUCT

◆ OnCreate()

LRESULT CTrayWindow::OnCreate ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2314 of file traywnd.cpp.

2315 {
2316 HRESULT hRet;
2317
2318 ((ITrayWindow*)this)->AddRef();
2319
2320 SetWindowTheme(m_hWnd, L"TaskBar", NULL);
2321
2322 /* Create the Start button */
2324
2325 /* Load the saved tray window settings */
2327
2328 /* Create and initialize the start menu */
2332
2333 /* Create the task band */
2335 if (FAILED_UNEXPECTEDLY(hRet))
2336 return FALSE;
2337
2338 /* Create the rebar band site. This actually creates the rebar and the tasks toolbar. */
2340 if (FAILED_UNEXPECTEDLY(hRet))
2341 return FALSE;
2342
2343 /* Create the tray notification window */
2345 if (FAILED_UNEXPECTEDLY(hRet))
2346 return FALSE;
2347
2348 /* Get the hwnd of the rebar */
2350 if (FAILED_UNEXPECTEDLY(hRet))
2351 return FALSE;
2352
2353 /* Get the hwnd of the tasks toolbar */
2355 if (FAILED_UNEXPECTEDLY(hRet))
2356 return FALSE;
2357
2358 /* Get the hwnd of the tray notification window */
2360 if (FAILED_UNEXPECTEDLY(hRet))
2361 return FALSE;
2362
2365 return FALSE;
2366
2367 SetWindowTheme(m_Rebar, L"TaskBar", NULL);
2368
2369 UpdateFonts();
2370
2372
2374 {
2377 }
2378
2379 /* Set the initial lock state in the band site */
2381
2382 static const UINT winkeys[] =
2383 {
2396 };
2398 {
2399 for (UINT i = 0; i < _countof(winkeys); ++i)
2400 {
2401 UINT mod = HIBYTE(HIWORD(winkeys[i])), key = LOBYTE(HIWORD(winkeys[i]));
2402 RegisterHotKey(m_hWnd, LOWORD(winkeys[i]), mod, key);
2403 }
2404 }
2405
2406 return TRUE;
2407 }
std::map< E_MODULE, HMODULE > mod
Definition: LocaleTests.cpp:66
IMenuPopup * CreateStartMenu(IN ITrayWindow *Tray, OUT IMenuBand **ppMenuBand, IN HBITMAP hbmBanner OPTIONAL, IN BOOL bSmallIcons)
Definition: startmnu.cpp:50
HRESULT CTrayNotifyWnd_CreateInstance(HWND hwndParent, REFIID riid, void **ppv)
Definition: trayntfy.cpp:555
HRESULT CTrayBandSite_CreateInstance(IN ITrayWindow *tray, IN IDeskBand *pTaskBand, OUT ITrayBandSite **pBandSite)
Definition: tbsite.cpp:728
#define TNWM_GETSHOWDESKTOPBUTTON
Definition: precomp.h:380
HRESULT InitShellServices(HDPA *phdpa)
HRESULT CTaskBand_CreateInstance(IN ITrayWindow *Tray, HWND hWndStartButton, REFIID riid, void **ppv)
Definition: taskband.cpp:348
#define IDB_STARTMENU
Definition: resource.h:44
HWND Create(HWND hwndParent)
Definition: traywnd.cpp:260
CComPtr< IDeskBand > m_TaskBand
Definition: traywnd.cpp:322
VOID RegLoadSettings()
Definition: traywnd.cpp:1598
CComPtr< IUnknown > m_TrayNotifyInstance
Definition: traywnd.cpp:333
void UpdateFonts()
Definition: traywnd.cpp:1015
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:1336
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define MOD_SHIFT
Definition: imm.h:186
#define MOD_CONTROL
Definition: imm.h:185
ULONG AddRef()
#define LOBYTE(W)
Definition: jmemdos.c:487
#define HIBYTE(W)
Definition: jmemdos.c:486
static HBITMAP
Definition: button.c:44
unsigned int UINT
Definition: ndis.h:50
@ REST_NOWINKEYS
Definition: shlobj.h:1749
DWORD SmSmallIcons
Definition: precomp.h:207
Definition: copy.c:22
#define AUTOHIDE_DELAY_HIDE
Definition: traywnd.cpp:20
#define TIMER_ID_AUTOHIDE
Definition: traywnd.cpp:17
#define MAKEWORD(a, b)
Definition: typedefs.h:248
#define MAKELONG(a, b)
Definition: typedefs.h:249
HRESULT WINAPI SetWindowTheme(_In_ HWND hwnd, _In_ LPCWSTR pszSubAppName, _In_ LPCWSTR pszSubIdList)
Definition: uxthemesupp.c:69
#define VK_TAB
Definition: winuser.h:2210
#define MOD_WIN
Definition: winuser.h:2655
#define VK_F1
Definition: winuser.h:2266
#define VK_PAUSE
Definition: winuser.h:2216
BOOL WINAPI RegisterHotKey(_In_opt_ HWND, _In_ int, _In_ UINT, _In_ UINT)
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
HBITMAP WINAPI LoadBitmapW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2500
#define IID_PPV_ARG(Itype, ppType)

◆ OnCtlColorBtn()

LRESULT CTrayWindow::OnCtlColorBtn ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2545 of file traywnd.cpp.

2546 {
2549 }
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define TRANSPARENT
Definition: wingdi.h:950
#define HOLLOW_BRUSH
Definition: wingdi.h:899
int WINAPI SetBkMode(_In_ HDC, _In_ int)
Definition: dc.c:1056

◆ OnDestroy()

LRESULT CTrayWindow::OnDestroy ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2412 of file traywnd.cpp.

2413 {
2415 return 0;
2416 }

◆ OnDisplayChange()

LRESULT CTrayWindow::OnDisplayChange ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2493 of file traywnd.cpp.

2494 {
2495 /* Load the saved tray window settings */
2497
2498 /* Move the tray window to the right position and resize it if necessary */
2500
2501 return TRUE;
2502 }
VOID CheckTrayWndPosition()
Definition: traywnd.cpp:1576

◆ OnDoExitWindows()

LRESULT CTrayWindow::OnDoExitWindows ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 3021 of file traywnd.cpp.

3022 {
3023 /*
3024 * TWM_DOEXITWINDOWS is send by the CDesktopBrowser to us
3025 * to show the shutdown dialog. Also a WM_CLOSE message sent
3026 * by apps should show the dialog.
3027 */
3028 return DoExitWindows();
3029 }

◆ OnEndSession()

LRESULT CTrayWindow::OnEndSession ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2418 of file traywnd.cpp.

2419 {
2420 if (wParam)
2421 SaveState();
2422 return 0;
2423 }

◆ OnEnterSizeMove()

LRESULT CTrayWindow::OnEnterSizeMove ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2680 of file traywnd.cpp.

2681 {
2682 InSizeMove = TRUE;
2683 IsDragging = FALSE;
2685 {
2686 /* Remove the clipping on multi monitor systems while dragging around */
2688 }
2689 return TRUE;
2690 }

◆ OnEraseBackground()

LRESULT CTrayWindow::OnEraseBackground ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2480 of file traywnd.cpp.

2481 {
2482 HDC hdc = (HDC) wParam;
2483
2484 if (!m_Theme)
2485 {
2486 bHandled = FALSE;
2487 return 0;
2488 }
2489
2491 }
LRESULT EraseBackgroundWithTheme(HDC hdc)
Definition: traywnd.cpp:2074

◆ OnExitSizeMove()

LRESULT CTrayWindow::OnExitSizeMove ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2692 of file traywnd.cpp.

2693 {
2694 InSizeMove = FALSE;
2696 {
2698
2699 /* Apply clipping */
2701 }
2702 return TRUE;
2703 }
#define WM_SIZE
Definition: winuser.h:1622
#define SIZE_RESTORED
Definition: winuser.h:2516

◆ OnGetTaskSwitch()

LRESULT CTrayWindow::OnGetTaskSwitch ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 3042 of file traywnd.cpp.

3043 {
3044 bHandled = TRUE;
3045 return (LRESULT)m_TaskSwitch;
3046 }

◆ OnHotkey()

LRESULT CTrayWindow::OnHotkey ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 3081 of file traywnd.cpp.

3082 {
3083 return HandleHotKey(wParam);
3084 }
LRESULT HandleHotKey(DWORD id)
Definition: traywnd.cpp:730

◆ OnInitMenuPopup()

LRESULT CTrayWindow::OnInitMenuPopup ( INT  code,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 3252 of file traywnd.cpp.

3253 {
3254 HMENU hMenu = (HMENU)wParam;
3256 {
3260 if (g_Arrangement != NONE)
3261 {
3264 MENUITEMINFOW mii = { sizeof(mii) };
3266 mii.fMask = MIIM_TYPE;
3267 mii.fType = MFT_STRING;
3268 mii.dwTypeData = const_cast<LPWSTR>(&strCaption[0]);
3270 }
3271 else
3272 {
3274 }
3275 }
3276 else
3277 {
3283 g_WindowPosBackup.RemoveAll();
3284 }
3285 return 0;
3286 }
#define IDS_TRAYWND_UNDO_TILE
Definition: resource.h:113
#define IDS_TRAYWND_UNDO_CASCADE
Definition: resource.h:112
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
LPWSTR dwTypeData
Definition: winuser.h:3280
CSimpleArray< WINDOWPOSBACKUPDATA > g_WindowPosBackup
Definition: traywnd.cpp:52
static BOOL IsThereAnyEffectiveWindow(BOOL bMustBeInMonitor)
Definition: traywnd.cpp:151
#define MF_BYCOMMAND
Definition: winuser.h:202
BOOL WINAPI SetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _In_ LPCMENUITEMINFOW)
BOOL WINAPI DeleteMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
#define MF_ENABLED
Definition: winuser.h:128
BOOL WINAPI GetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _Inout_ LPMENUITEMINFOW)
#define MFT_STRING
Definition: winuser.h:757
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define MIIM_TYPE
Definition: winuser.h:736
#define MF_GRAYED
Definition: winuser.h:129
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ OnLButtonUp()

LRESULT CTrayWindow::OnLButtonUp ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2993 of file traywnd.cpp.

2994 {
2996 m_pShowDesktopButton->OnLButtonUp(uMsg, wParam, lParam, bHandled);
2997 return FALSE;
2998 }
LRESULT OnLButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)

◆ OnMouseMove()

LRESULT CTrayWindow::OnMouseMove ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 3185 of file traywnd.cpp.

3186 {
3188
3190 {
3192 }
3193
3194 return TRUE;
3195 }
#define TIMER_ID_MOUSETRACK
Definition: traywnd.cpp:18
#define MOUSETRACK_INTERVAL
Definition: traywnd.cpp:19

◆ OnMoving()

LRESULT CTrayWindow::OnMoving ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2611 of file traywnd.cpp.

2612 {
2613 POINT ptCursor;
2614 PRECT pRect = (PRECT) lParam;
2615
2616 /* We need to ensure that an application can not accidently
2617 move the tray window (using SetWindowPos). However, we still
2618 need to be able to move the window in case the user wants to
2619 drag the tray window to another position or in case the user
2620 wants to resize the tray window. */
2621 if (!g_TaskbarSettings.bLock && GetCursorPos(&ptCursor))
2622 {
2623 IsDragging = TRUE;
2625 }
2626 else
2627 {
2628 *pRect = m_TrayRects[m_Position];
2629 }
2630 return TRUE;
2631 }
#define PRECT
Definition: precomp.h:27
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
Definition: cursoricon.c:3032

◆ OnNcActivate()

LRESULT CTrayWindow::OnNcActivate ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 3215 of file traywnd.cpp.

3216 {
3218 DrawShowDesktopButton(); // We have to draw non-client area
3219 bHandled = TRUE;
3220 return ret;
3221 }
void DrawShowDesktopButton()
Definition: traywnd.cpp:2522
#define DefWindowProc
Definition: ros2win.h:31
int ret

◆ OnNcCalcSize()

LRESULT CTrayWindow::OnNcCalcSize ( INT  code,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 3223 of file traywnd.cpp.

3224 {
3225 RECT *rc = NULL;
3226 /* Ignore WM_NCCALCSIZE if we are not themed or locked */
3228 {
3229 bHandled = FALSE;
3230 return 0;
3231 }
3232 if(!wParam)
3233 {
3234 rc = (RECT*)wParam;
3235 }
3236 else
3237 {
3239 if(prms->lppos->flags & SWP_NOSENDCHANGING)
3240 {
3241 bHandled = FALSE;
3242 return 0;
3243 }
3244 rc = &prms->rgrc[0];
3245 }
3246
3248
3249 return 0;
3250 }
UINT flags
Definition: winuser.h:3605
PWINDOWPOS lppos
Definition: winuser.h:3610
#define SWP_NOSENDCHANGING
Definition: winuser.h:1262

◆ OnNcHitTest()

LRESULT CTrayWindow::OnNcHitTest ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2556 of file traywnd.cpp.

2557 {
2558 RECT rcClient;
2559 POINT pt;
2560
2562 {
2563 /* The user may not be able to resize the tray window.
2564 Pretend like the window is not sizeable when the user
2565 clicks on the border. */
2566 return HTBORDER;
2567 }
2568
2570 if (GetClientRect(&rcClient) &&
2571 (MapWindowPoints(NULL, (LPPOINT) &rcClient, 2) != 0 || GetLastError() == ERROR_SUCCESS))
2572 {
2573 pt.x = GET_X_LPARAM(lParam);
2574 pt.y = GET_Y_LPARAM(lParam);
2575
2577 return HTBORDER;
2578
2579 if (PtInRect(&rcClient, pt))
2580 {
2581 /* The user is trying to drag the tray window */
2582 return HTCAPTION;
2583 }
2584
2585 /* Depending on the position of the tray window, allow only
2586 changing the border next to the monitor working area */
2587 switch (m_Position)
2588 {
2589 case ABE_TOP:
2590 if (pt.y > rcClient.bottom)
2591 return HTBOTTOM;
2592 break;
2593 case ABE_LEFT:
2594 if (pt.x > rcClient.right)
2595 return HTRIGHT;
2596 break;
2597 case ABE_RIGHT:
2598 if (pt.x < rcClient.left)
2599 return HTLEFT;
2600 break;
2601 case ABE_BOTTOM:
2602 default:
2603 if (pt.y < rcClient.top)
2604 return HTTOP;
2605 break;
2606 }
2607 }
2608 return HTBORDER;
2609 }
BOOL PtInButton(LPPOINT pt) const
#define ERROR_SUCCESS
Definition: deptool.c:10
#define SetLastError(x)
Definition: compat.h:752
#define GET_Y_LPARAM(lp)
Definition: windowsx.h:300
#define GET_X_LPARAM(lp)
Definition: windowsx.h:299
#define HTCAPTION
Definition: winuser.h:2487
#define HTBOTTOM
Definition: winuser.h:2504
#define HTBORDER
Definition: winuser.h:2508
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)
#define HTRIGHT
Definition: winuser.h:2500
#define HTTOP
Definition: winuser.h:2501
#define HTLEFT
Definition: winuser.h:2498

◆ OnNcLButtonDblClick()

LRESULT CTrayWindow::OnNcLButtonDblClick ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2971 of file traywnd.cpp.

2972 {
2973 /* Let the clock handle the double-click */
2975
2976 /* We "handle" this message so users can't cause a weird maximize/restore
2977 window animation when double-clicking the tray window! */
2978 return TRUE;
2979 }

◆ OnNcLButtonDown()

LRESULT CTrayWindow::OnNcLButtonDown ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

This handler implements the trick that makes the start button to get pressed when the user clicked left or below the button.

Definition at line 2835 of file traywnd.cpp.

2836 {
2838 WINDOWINFO wi = {sizeof(WINDOWINFO)};
2839
2840 bHandled = FALSE;
2841
2842 RECT rcStartBtn;
2843 m_StartButton.GetWindowRect(&rcStartBtn);
2844 GetWindowInfo(m_hWnd, &wi);
2845
2846 if (IsPointWithinStartButton(&pt, &rcStartBtn, &wi))
2847 {
2848 bHandled = TRUE;
2850 return 0;
2851 }
2852
2855
2856 return 0;
2857 }
BOOL GetWindowRect(LPRECT lpRect) const
Definition: atlwin.h:816
LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
void PopupStartMenu()
Definition: traywnd.cpp:1862
BOOL IsPointWithinStartButton(LPPOINT ppt, LPRECT prcStartBtn, PWINDOWINFO pwi)
Definition: traywnd.cpp:2768
BOOL WINAPI GetWindowInfo(_In_ HWND, _Inout_ PWINDOWINFO)
struct tagWINDOWINFO WINDOWINFO
#define WM_LBUTTONDOWN
Definition: winuser.h:1787

◆ OnNcLButtonUp()

LRESULT CTrayWindow::OnNcLButtonUp ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2981 of file traywnd.cpp.

2982 {
2983 if (m_pShowDesktopButton && m_pShowDesktopButton->m_bPressed) // Did you click the button?
2984 {
2987 bHandled = TRUE;
2988 }
2989
2990 return FALSE;
2991 }
#define WM_LBUTTONUP
Definition: winuser.h:1788

◆ OnNcPaint()

LRESULT CTrayWindow::OnNcPaint ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2529 of file traywnd.cpp.

2530 {
2531 DefWindowProc(uMsg, wParam, lParam);
2532 bHandled = TRUE;
2533
2535 {
2536 DrawShowDesktopButton(); // We have to draw non-client area
2537 return 0;
2538 }
2539
2540 DrawSizerWithTheme((HRGN) wParam);
2541 DrawShowDesktopButton(); // We have to draw non-client area
2542 return 0;
2543 }
int DrawSizerWithTheme(IN HRGN hRgn)
Definition: traywnd.cpp:2090

◆ OnNcRButtonUp()

LRESULT CTrayWindow::OnNcRButtonUp ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2859 of file traywnd.cpp.

2860 {
2861 /* We want the user to be able to get a context menu even on the nonclient
2862 area (including the sizing border)! */
2863 uMsg = WM_CONTEXTMENU;
2864 wParam = (WPARAM) m_hWnd;
2865
2866 return OnContextMenu(uMsg, wParam, lParam, bHandled);
2867 }
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2869
#define WM_CONTEXTMENU
Definition: richedit.h:64

◆ OnNotify()

LRESULT CTrayWindow::OnNotify ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2937 of file traywnd.cpp.

2938 {
2939 LRESULT Ret = FALSE;
2940 /* FIXME: We can't check with IsChild whether the hwnd is somewhere inside
2941 the rebar control! But we shouldn't forward messages that the band
2942 site doesn't handle, such as other controls (start button, tray window) */
2943
2944 HRESULT hr = E_FAIL;
2945
2946 if (m_TrayBandSite)
2947 {
2948 hr = m_TrayBandSite->ProcessMessage(m_hWnd, uMsg, wParam, lParam, &Ret);
2949 if (SUCCEEDED(hr))
2950 return Ret;
2951 }
2952
2953 if (m_TrayBandSite == NULL || FAILED(hr))
2954 {
2955 const NMHDR *nmh = (const NMHDR *) lParam;
2956
2957 if (nmh->hwndFrom == m_TrayNotify)
2958 {
2959 switch (nmh->code)
2960 {
2961 case NTNWM_REALIGN:
2962 /* Cause all controls to be aligned */
2964 break;
2965 }
2966 }
2967 }
2968 return Ret;
2969 }
#define NTNWM_REALIGN
Definition: precomp.h:382
#define FAILED(hr)
Definition: intsafe.h:51
UINT code
Definition: winuser.h:3170
HWND hwndFrom
Definition: winuser.h:3168

◆ OnOpenStartMenu()

LRESULT CTrayWindow::OnOpenStartMenu ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 3006 of file traywnd.cpp.

3007 {
3008 HWND hwndStartMenu;
3009 HRESULT hr = IUnknown_GetWindow(m_StartMenuPopup, &hwndStartMenu);
3011 return FALSE;
3012
3013 if (::IsWindowVisible(hwndStartMenu))
3014 HideStartMenu();
3015 else
3017
3018 return TRUE;
3019 }

◆ OnPulse()

LRESULT CTrayWindow::OnPulse ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 3069 of file traywnd.cpp.

3070 {
3071 if (IgnorePulse)
3072 return 0;
3073
3075 IgnorePulse = TRUE;
3078 return 0;
3079 }
void RestoreMinimizedNonTaskWnds(BOOL bDestroyed, HWND hwndActive)
Definition: traywnd.cpp:3048

◆ OnRebarAutoSize()

LRESULT CTrayWindow::OnRebarAutoSize ( INT  code,
LPNMHDR  nmhdr,
BOOL bHandled 
)
inline

Definition at line 3288 of file traywnd.cpp.

3289 {
3290#if 0
3291 LPNMRBAUTOSIZE as = (LPNMRBAUTOSIZE) nmhdr;
3292
3293 if (!as->fChanged)
3294 return 0;
3295
3296 RECT rc;
3297 ::GetWindowRect(m_hWnd, &rc);
3298
3299 SIZE szWindow = {
3300 rc.right - rc.left,
3301 rc.bottom - rc.top };
3302 SIZE szTarget = {
3303 as->rcTarget.right - as->rcTarget.left,
3304 as->rcTarget.bottom - as->rcTarget.top };
3305 SIZE szActual = {
3306 as->rcActual.right - as->rcActual.left,
3307 as->rcActual.bottom - as->rcActual.top };
3308
3309 SIZE borders = {
3310 szWindow.cx - szTarget.cx,
3311 szWindow.cy - szTarget.cx,
3312 };
3313
3314 switch (m_Position)
3315 {
3316 case ABE_LEFT:
3317 szWindow.cx = szActual.cx + borders.cx;
3318 break;
3319 case ABE_TOP:
3320 szWindow.cy = szActual.cy + borders.cy;
3321 break;
3322 case ABE_RIGHT:
3323 szWindow.cx = szActual.cx + borders.cx;
3324 rc.left = rc.right - szWindow.cy;
3325 break;
3326 case ABE_BOTTOM:
3327 szWindow.cy = szActual.cy + borders.cy;
3328 rc.top = rc.bottom - szWindow.cy;
3329 break;
3330 }
3331
3332 SetWindowPos(NULL, rc.left, rc.top, szWindow.cx, szWindow.cy, SWP_NOACTIVATE | SWP_NOZORDER);
3333#else
3334 bHandled = FALSE;
3335#endif
3336 return 0;
3337 }
struct tagNMRBAUTOSIZE * LPNMRBAUTOSIZE

◆ OnSettingChanged()

LRESULT CTrayWindow::OnSettingChanged ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2445 of file traywnd.cpp.

2446 {
2447 if (wParam == SPI_SETNONCLIENTMETRICS)
2448 {
2451 UpdateFonts();
2454 }
2455
2456 // Note: We rely on CDesktopBrowser to get this message and call SHSettingsChanged
2457 if (m_DesktopWnd)
2459
2460 if (m_StartMenuPopup && lstrcmpiW((LPCWSTR)lParam, L"TraySettings") == 0)
2461 {
2462 HideStartMenu();
2463
2465#if 1 // FIXME: Please re-use the start menu
2466 /* Re-create the start menu */
2470 FIXME("Use UpdateStartMenu\n");
2471#else
2472 // Update the start menu
2474#endif
2475 }
2476
2477 return 0;
2478 }
#define FIXME(fmt,...)
Definition: precomp.h:53
HRESULT UpdateStartMenu(IN OUT IMenuPopup *pMenuPopup, IN HBITMAP hbmBanner OPTIONAL, IN BOOL bSmallIcons, IN BOOL bRefresh)
Definition: startmnu.cpp:24
void Release()
Definition: atlcomcli.h:170
VOID AlignControls(IN PRECT prcClient OPTIONAL)
Definition: traywnd.cpp:1676
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4262
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

◆ OnSize()

LRESULT CTrayWindow::OnSize ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2654 of file traywnd.cpp.

2655 {
2656 RECT rcClient;
2657 if (wParam == SIZE_RESTORED && lParam == 0)
2658 {
2660 /* Clip the tray window on multi monitor systems so the edges can't
2661 overlap into another monitor */
2663
2664 if (!GetClientRect(&rcClient))
2665 {
2666 return FALSE;
2667 }
2668 }
2669 else
2670 {
2671 rcClient.left = rcClient.top = 0;
2672 rcClient.right = LOWORD(lParam);
2673 rcClient.bottom = HIWORD(lParam);
2674 }
2675
2676 AlignControls(&rcClient);
2677 return TRUE;
2678 }

◆ OnSizing()

LRESULT CTrayWindow::OnSizing ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2633 of file traywnd.cpp.

2634 {
2635 PRECT pRect = (PRECT) lParam;
2636
2638 {
2639 FitToRebar(pRect);
2640 }
2641 else
2642 {
2643 *pRect = m_TrayRects[m_Position];
2644 }
2645 return TRUE;
2646 }

◆ OnSysChar()

LRESULT CTrayWindow::OnSysChar ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2705 of file traywnd.cpp.

2706 {
2707 switch (wParam)
2708 {
2709 case TEXT(' '):
2710 {
2711 /* The user pressed Alt+Space, this usually brings up the system menu of a window.
2712 The tray window needs to handle this specially, since it normally doesn't have
2713 a system menu. */
2714
2715 static const UINT uidDisableItem [] = {
2716 SC_RESTORE,
2717 SC_MOVE,
2718 SC_SIZE,
2721 };
2722 HMENU hSysMenu;
2723 UINT i, uId;
2724
2725 /* temporarily enable the system menu */
2727
2728 hSysMenu = GetSystemMenu(FALSE);
2729 if (hSysMenu != NULL)
2730 {
2731 /* Disable all items that are not relevant */
2732 for (i = 0; i < _countof(uidDisableItem); i++)
2733 {
2734 EnableMenuItem(hSysMenu,
2735 uidDisableItem[i],
2737 }
2738
2739 EnableMenuItem(hSysMenu,
2740 SC_CLOSE,
2741 MF_BYCOMMAND |
2743
2744 /* Display the system menu */
2745 uId = TrackMenu(
2746 hSysMenu,
2747 NULL,
2750 FALSE);
2751 if (uId != 0)
2752 {
2754 }
2755 }
2756
2757 /* revert the system menu window style */
2759 break;
2760 }
2761
2762 default:
2763 bHandled = FALSE;
2764 }
2765 return TRUE;
2766 }
UINT TrackMenu(IN HMENU hMenu, IN POINT *ppt OPTIONAL, IN HWND hwndExclude OPTIONAL, IN BOOL TrackUp, IN BOOL IsContextMenu)
Definition: traywnd.cpp:864
#define WS_SYSMENU
Definition: pedump.c:629
@ REST_NOCLOSE
Definition: shlobj.h:1652
#define WM_SYSCOMMAND
Definition: winuser.h:1752
HMENU WINAPI GetSystemMenu(_In_ HWND, _In_ BOOL)
#define SC_SIZE
Definition: winuser.h:2595
#define SC_MINIMIZE
Definition: winuser.h:2597
#define SC_CLOSE
Definition: winuser.h:2603
#define SC_MOVE
Definition: winuser.h:2596
#define SC_RESTORE
Definition: winuser.h:2609
#define SC_MAXIMIZE
Definition: winuser.h:2599

◆ OnSysColorChange()

LRESULT CTrayWindow::OnSysColorChange ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2551 of file traywnd.cpp.

2552 {
2553 return SendMessageW(m_Rebar, uMsg, wParam, lParam);
2554 }

◆ OnSysCommand()

LRESULT CTrayWindow::OnSysCommand ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 3031 of file traywnd.cpp.

3032 {
3033 if (wParam == SC_CLOSE)
3034 {
3035 return DoExitWindows();
3036 }
3037
3038 bHandled = FALSE;
3039 return TRUE;
3040 }

◆ OnTaskbarSettingsChanged()

LRESULT CTrayWindow::OnTaskbarSettingsChanged ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 3339 of file traywnd.cpp.

3340 {
3341 TaskbarSettings* newSettings = (TaskbarSettings*)lParam;
3342
3343 /* Propagate the new settings to the children */
3346
3347 /* Toggle autohide */
3348 if (newSettings->sr.AutoHide != g_TaskbarSettings.sr.AutoHide)
3349 {
3350 g_TaskbarSettings.sr.AutoHide = newSettings->sr.AutoHide;
3353 if (!newSettings->sr.AutoHide)
3355 else
3357 }
3358
3359 /* Toggle lock state */
3360 Lock(newSettings->bLock);
3361
3362 /* Toggle OnTop state */
3363 if (newSettings->sr.AlwaysOnTop != g_TaskbarSettings.sr.AlwaysOnTop)
3364 {
3366 HWND hWndInsertAfter = newSettings->sr.AlwaysOnTop ? HWND_TOPMOST : HWND_BOTTOM;
3367 SetWindowPos(hWndInsertAfter, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
3368 }
3369
3370 /* Adjust taskbar size */
3372
3374 return 0;
3375 }
#define memset(x, y, z)
Definition: compat.h:39
DWORD AlwaysOnTop
Definition: precomp.h:206
#define AUTOHIDE_SHOWN
Definition: traywnd.cpp:29
#define HWND_TOPMOST
Definition: winuser.h:1219
#define SWP_SHOWWINDOW
Definition: winuser.h:1259
#define HWND_BOTTOM
Definition: winuser.h:1216

◆ OnThemeChanged()

LRESULT CTrayWindow::OnThemeChanged ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2425 of file traywnd.cpp.

2426 {
2427 if (m_Theme)
2429
2430 m_Theme = OpenThemeData(m_hWnd, L"TaskBar");
2431
2432 if (m_Theme)
2433 {
2435 }
2436 else
2437 {
2439 }
2441
2442 return TRUE;
2443 }
HTHEME WINAPI OpenThemeData(HWND hwnd, LPCWSTR classlist)
Definition: system.c:850
#define WS_BORDER
Definition: pedump.c:625
#define WS_THICKFRAME
Definition: pedump.c:630

◆ OnTimer()

LRESULT CTrayWindow::OnTimer ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 3197 of file traywnd.cpp.

3198 {
3200 {
3202 }
3203 else if (wParam == TIMER_ID_AUTOHIDE)
3204 {
3206 }
3208 {
3211 }
3212 return 0;
3213 }
void ProcessMouseTracking()
Definition: traywnd.cpp:1903
void ProcessAutoHide()
Definition: traywnd.cpp:1953

◆ OnWindowPosChanging()

LRESULT CTrayWindow::OnWindowPosChanging ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 2648 of file traywnd.cpp.

2649 {
2651 return TRUE;
2652 }
VOID ChangingWinPos(IN OUT LPWINDOWPOS pwp)
Definition: traywnd.cpp:1393

◆ Open()

HRESULT STDMETHODCALLTYPE CTrayWindow::Open ( )
inline

Definition at line 2138 of file traywnd.cpp.

2139 {
2140 RECT rcWnd;
2141
2142 /* Check if there's already a window created and try to show it.
2143 If it was somehow destroyed just create a new tray window. */
2144 if (m_hWnd != NULL && IsWindow())
2145 {
2146 return S_OK;
2147 }
2148
2151 dwExStyle |= WS_EX_TOPMOST;
2152
2154 if(!m_Theme)
2155 {
2156 dwStyle |= WS_THICKFRAME | WS_BORDER;
2157 }
2158
2159 ZeroMemory(&rcWnd, sizeof(rcWnd));
2160 if (m_Position != (DWORD) -1)
2161 rcWnd = m_TrayRects[m_Position];
2162
2163 if (!Create(NULL, rcWnd, NULL, dwStyle, dwExStyle))
2164 return E_FAIL;
2165
2166 /* Align all controls on the tray window */
2168
2169 /* Move the tray window to the right position and resize it if necessary */
2171
2172 return S_OK;
2173 }
@ Create
Definition: registry.c:563
#define WS_POPUP
Definition: pedump.c:616
#define WS_VISIBLE
Definition: pedump.c:620
#define WS_EX_TOPMOST
Definition: pedump.c:647
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define WS_CLIPCHILDREN
Definition: pedump.c:619
#define WS_EX_WINDOWEDGE
Definition: winuser.h:407

◆ OpenCommonStartMenuDirectory()

VOID CTrayWindow::OpenCommonStartMenuDirectory ( IN HWND  hWndOwner,
IN LPCTSTR  lpOperation 
)
inline

Definition at line 597 of file traywnd.cpp.

598 {
599 WCHAR szDir[MAX_PATH];
600
601 if (SHGetSpecialFolderPath(hWndOwner,
602 szDir,
604 FALSE))
605 {
606 ShellExecute(hWndOwner,
607 lpOperation,
608 szDir,
609 NULL,
610 NULL,
612 }
613 }
#define MAX_PATH
Definition: compat.h:34
#define ShellExecute
Definition: shellapi.h:733
#define SHGetSpecialFolderPath
Definition: shlobj.h:1539
#define CSIDL_COMMON_STARTMENU
Definition: shlobj.h:2202

Referenced by ExecContextMenuCmd().

◆ OpenTaskManager()

VOID CTrayWindow::OpenTaskManager ( IN HWND  hWndOwner)
inline

Definition at line 615 of file traywnd.cpp.

616 {
617 ShellExecute(hWndOwner,
618 TEXT("open"),
619 TEXT("taskmgr.exe"),
620 NULL,
621 NULL,
623 }

Referenced by ExecContextMenuCmd(), and HandleCommand().

◆ PopupStartMenu()

void CTrayWindow::PopupStartMenu ( )
inline

Definition at line 1862 of file traywnd.cpp.

1863 {
1864 if (m_StartMenuPopup != NULL)
1865 {
1866 POINTL pt;
1867 RECTL rcExclude;
1868 DWORD dwFlags = 0;
1869
1870 if (m_StartButton.GetWindowRect((RECT*) &rcExclude))
1871 {
1872 switch (m_Position)
1873 {
1874 case ABE_BOTTOM:
1875 pt.x = rcExclude.left;
1876 pt.y = rcExclude.top;
1877 dwFlags |= MPPF_TOP;
1878 break;
1879 case ABE_TOP:
1880 pt.x = rcExclude.left;
1881 pt.y = rcExclude.bottom;
1882 dwFlags |= MPPF_BOTTOM;
1883 break;
1884 case ABE_LEFT:
1885 pt.x = rcExclude.right;
1886 pt.y = rcExclude.top;
1887 dwFlags |= MPPF_RIGHT;
1888 break;
1889 case ABE_RIGHT:
1890 pt.x = rcExclude.left;
1891 pt.y = rcExclude.top;
1892 dwFlags |= MPPF_LEFT;
1893 break;
1894 }
1895
1896 m_StartMenuPopup->Popup(&pt, &rcExclude, dwFlags);
1897
1898 m_StartButton.SendMessageW(BM_SETSTATE, TRUE, 0);
1899 }
1900 }
1901 }
#define BM_SETSTATE
Definition: winuser.h:1934

Referenced by OnNcLButtonDown(), and OnOpenStartMenu().

◆ ProcessAutoHide()

void CTrayWindow::ProcessAutoHide ( )
inline

Definition at line 1953 of file traywnd.cpp.

1954 {
1957
1958 switch (m_AutoHideState)
1959 {
1960 case AUTOHIDE_HIDING:
1961 switch (m_Position)
1962 {
1963 case ABE_LEFT:
1964 m_AutoHideOffset.cy = 0;
1966 if (m_AutoHideOffset.cx < -w)
1968 break;
1969 case ABE_TOP:
1970 m_AutoHideOffset.cx = 0;
1972 if (m_AutoHideOffset.cy < -h)
1974 break;
1975 case ABE_RIGHT:
1976 m_AutoHideOffset.cy = 0;
1978 if (m_AutoHideOffset.cx > w)
1980 break;
1981 case ABE_BOTTOM:
1982 m_AutoHideOffset.cx = 0;
1984 if (m_AutoHideOffset.cy > h)
1986 break;
1987 }
1988
1990 {
1992 break;
1993 }
1994
1995 /* fallthrough */
1996 case AUTOHIDE_HIDDEN:
1997
1998 switch (m_Position)
1999 {
2000 case ABE_LEFT:
2002 m_AutoHideOffset.cy = 0;
2003 break;
2004 case ABE_TOP:
2005 m_AutoHideOffset.cx = 0;
2007 break;
2008 case ABE_RIGHT:
2010 m_AutoHideOffset.cy = 0;
2011 break;
2012 case ABE_BOTTOM:
2013 m_AutoHideOffset.cx = 0;
2015 break;
2016 }
2017
2020 break;
2021
2022 case AUTOHIDE_SHOWING:
2024 {
2026 }
2028 {
2030 }
2031 else
2032 {
2033 m_AutoHideOffset.cx = 0;
2034 }
2035
2037 {
2039 }
2041 {
2043 }
2044 else
2045 {
2046 m_AutoHideOffset.cy = 0;
2047 }
2048
2049 if (m_AutoHideOffset.cx != 0 || m_AutoHideOffset.cy != 0)
2050 {
2052 break;
2053 }
2054
2055 /* fallthrough */
2056 case AUTOHIDE_SHOWN:
2057
2060 break;
2061 }
2062
2064 }
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
#define AUTOHIDE_SPEED_HIDE
Definition: traywnd.cpp:25
#define AUTOHIDE_SPEED_SHOW
Definition: traywnd.cpp:24
#define AUTOHIDE_SHOWING
Definition: traywnd.cpp:28
#define AUTOHIDE_HIDDEN
Definition: traywnd.cpp:27
#define AUTOHIDE_INTERVAL_ANIMATING
Definition: traywnd.cpp:22
int32_t INT
Definition: typedefs.h:58

Referenced by OnTimer().

◆ ProcessMouseTracking()

void CTrayWindow::ProcessMouseTracking ( )
inline

Definition at line 1903 of file traywnd.cpp.

1904 {
1905 RECT rcCurrent;
1906 POINT pt;
1907 BOOL over;
1909
1910 GetCursorPos(&pt);
1911 GetWindowRect(&rcCurrent);
1912 over = PtInRect(&rcCurrent, pt);
1913
1915 {
1916 over = TRUE;
1917 }
1918
1919 if (over)
1920 {
1921 if (state == AUTOHIDE_HIDING)
1922 {
1923 TRACE("AutoHide cancelling hide.\n");
1926 }
1927 else if (state == AUTOHIDE_HIDDEN)
1928 {
1929 TRACE("AutoHide starting show.\n");
1932 }
1933 }
1934 else
1935 {
1936 if (state == AUTOHIDE_SHOWING)
1937 {
1938 TRACE("AutoHide cancelling show.\n");
1941 }
1942 else if (state == AUTOHIDE_SHOWN)
1943 {
1944 TRACE("AutoHide starting hide.\n");
1947 }
1948
1950 }
1951 }
static int state
Definition: maze.c:121
#define AUTOHIDE_DELAY_SHOW
Definition: traywnd.cpp:21
#define BST_UNCHECKED
Definition: winuser.h:199

Referenced by OnTimer().

◆ QueryContextMenu()

HRESULT STDMETHODCALLTYPE CTrayWindow::QueryContextMenu ( HMENU  hPopup,
UINT  indexMenu,
UINT  idCmdFirst,
UINT  idCmdLast,
UINT  uFlags 
)
inline

Implements IContextMenu.

Definition at line 2274 of file traywnd.cpp.

2279 {
2280 if (!m_ContextMenu)
2281 {
2284 return hr;
2285 }
2286
2287 return m_ContextMenu->QueryContextMenu(hPopup, indexMenu, idCmdFirst, idCmdLast, uFlags);
2288 }
UINT uFlags
Definition: api.c:59
HRESULT TrayWindowCtxMenuCreator(ITrayWindow *TrayWnd, IN HWND hWndOwner, IContextMenu **ppCtxMenu)
Definition: traywnd.cpp:3721

◆ RaiseStartButton()

virtual HRESULT CTrayWindow::RaiseStartButton ( )
inlinevirtual

Definition at line 3531 of file traywnd.cpp.

3532 {
3533 m_StartButton.SendMessageW(BM_SETSTATE, FALSE, 0);
3534 return S_OK;
3535 }

Referenced by Tray_OnStartMenuDismissed().

◆ RegisterDesktopWindow()

STDMETHODIMP CTrayWindow::RegisterDesktopWindow ( IN HWND  hWndDesktop)
inlineoverride

Definition at line 3516 of file traywnd.cpp.

3517 {
3518 TRACE("IShellDesktopTray::RegisterDesktopWindow(0x%p)\n", hWndDesktop);
3519
3520 m_DesktopWnd = hWndDesktop;
3521 return S_OK;
3522 }

◆ RegLoadSettings()

VOID CTrayWindow::RegLoadSettings ( )
inline

Definition at line 1598 of file traywnd.cpp.

1599 {
1600 DWORD Pos;
1601 RECT rcScreen;
1602 SIZE WndSize, EdgeSize, DlgFrameSize;
1603 SIZE StartBtnSize = m_StartButton.GetSize();
1604
1605 EdgeSize.cx = GetSystemMetrics(SM_CXEDGE);
1606 EdgeSize.cy = GetSystemMetrics(SM_CYEDGE);
1607 DlgFrameSize.cx = GetSystemMetrics(SM_CXDLGFRAME);
1608 DlgFrameSize.cy = GetSystemMetrics(SM_CYDLGFRAME);
1609
1611 rcScreen = g_TaskbarSettings.sr.Rect;
1612 GetScreenRectFromRect(&rcScreen, MONITOR_DEFAULTTONEAREST);
1613
1615 {
1616 /* Use the minimum size of the taskbar, we'll use the start
1617 button as a minimum for now. Make sure we calculate the
1618 entire window size, not just the client size. However, we
1619 use a thinner border than a standard thick border, so that
1620 the start button and bands are not stuck to the screen border. */
1621 if(!m_Theme)
1622 {
1623 g_TaskbarSettings.sr.Size.cx = StartBtnSize.cx + (2 * (EdgeSize.cx + DlgFrameSize.cx));
1624 g_TaskbarSettings.sr.Size.cy = StartBtnSize.cy + (2 * (EdgeSize.cy + DlgFrameSize.cy));
1625 }
1626 else
1627 {
1628 g_TaskbarSettings.sr.Size.cx = StartBtnSize.cx - EdgeSize.cx;
1629 g_TaskbarSettings.sr.Size.cy = StartBtnSize.cy - EdgeSize.cy;
1632 }
1633 }
1634 /* Determine a minimum tray window rectangle. The "client" height is
1635 zero here since we cannot determine an optimal minimum width when
1636 loaded as a vertical tray window. We just need to make sure the values
1637 loaded from the registry are at least. The windows explorer behaves
1638 the same way, it allows the user to save a zero width vertical tray
1639 window, but not a zero height horizontal tray window. */
1640 if(!m_Theme)
1641 {
1642 WndSize.cx = 2 * (EdgeSize.cx + DlgFrameSize.cx);
1643 WndSize.cy = StartBtnSize.cy + (2 * (EdgeSize.cy + DlgFrameSize.cy));
1644 }
1645 else
1646 {
1647 WndSize.cx = StartBtnSize.cx;
1648 WndSize.cy = StartBtnSize.cy - EdgeSize.cy;
1649 }
1650
1651 if (WndSize.cx < g_TaskbarSettings.sr.Size.cx)
1652 WndSize.cx = g_TaskbarSettings.sr.Size.cx;
1653 if (WndSize.cy < g_TaskbarSettings.sr.Size.cy)
1654 WndSize.cy = g_TaskbarSettings.sr.Size.cy;
1655
1656 /* Save the calculated size */
1657 m_TraySize = WndSize;
1658
1659 /* Calculate all docking rectangles. We need to do this here so they're
1660 initialized and dragging the tray window to another position gives
1661 usable results */
1662 for (Pos = ABE_LEFT; Pos <= ABE_BOTTOM; Pos++)
1663 {
1665 &rcScreen,
1666 &m_TraySize,
1667 &m_TrayRects[Pos]);
1668 // TRACE("m_TrayRects[%d(%d)]: %d,%d,%d,%d\n", Pos, Position, m_TrayRects[Pos].left, m_TrayRects[Pos].top, m_TrayRects[Pos].right, m_TrayRects[Pos].bottom);
1669 }
1670
1671 /* Determine which monitor we are on. It shouldn't matter which docked
1672 position rectangle we use */
1674 }
#define SM_CXDLGFRAME
Definition: winuser.h:977
#define SM_CYDLGFRAME
Definition: winuser.h:979

Referenced by OnCreate(), and OnDisplayChange().

◆ ResizeWorkArea()

VOID CTrayWindow::ResizeWorkArea ( )
inline

Definition at line 1524 of file traywnd.cpp.

1525 {
1526#if !WIN7_DEBUG_MODE
1527 RECT rcTray, rcWorkArea;
1528
1529 /* If monitor has changed then fix the previous monitors work area */
1531 {
1532 GetScreenRect(m_PreviousMonitor, &rcWorkArea);
1533 SystemParametersInfoW(SPI_SETWORKAREA,
1534 1,
1535 &rcWorkArea,
1537 }
1538
1539 rcTray = m_TrayRects[m_Position];
1540
1541 GetScreenRect(m_Monitor, &rcWorkArea);
1543
1544 /* If AutoHide is false then change the workarea to exclude
1545 the area that the taskbar covers. */
1547 {
1548 switch (m_Position)
1549 {
1550 case ABE_TOP:
1551 rcWorkArea.top = rcTray.bottom;
1552 break;
1553 case ABE_LEFT:
1554 rcWorkArea.left = rcTray.right;
1555 break;
1556 case ABE_RIGHT:
1557 rcWorkArea.right = rcTray.left;
1558 break;
1559 case ABE_BOTTOM:
1560 rcWorkArea.bottom = rcTray.top;
1561 break;
1562 }
1563 }
1564
1565 /*
1566 * Resize the current monitor work area. Win32k will also send
1567 * a WM_SIZE message to automatically resize the desktop.
1568 */
1569 SystemParametersInfoW(SPI_SETWORKAREA,
1570 1,
1571 &rcWorkArea,
1573#endif
1574 }
#define SPIF_SENDCHANGE
Definition: winuser.h:1583
BOOL WINAPI SystemParametersInfoW(_In_ UINT uiAction, _In_ UINT uiParam, _Inout_opt_ PVOID pvParam, _In_ UINT fWinIni)

Referenced by CheckTrayWndPosition(), Lock(), and OnSize().

◆ RestoreAll()

VOID CTrayWindow::RestoreAll ( )
inline

Definition at line 3153 of file traywnd.cpp.

3154 {
3155 IgnorePulse = TRUE;
3157
3158 for (INT i = g_MinimizedAll.GetSize() - 1; i >= 0; --i)
3159 {
3160 HWND hwnd = g_MinimizedAll[i].hwnd;
3163 }
3164
3167 }
int GetSize() const
Definition: atlsimpcoll.h:104
BOOL IsIconic() const
Definition: atlwin.h:932
BOOL WINAPI SetWindowPlacement(_In_ HWND hWnd, _In_ const WINDOWPLACEMENT *)

Referenced by ExecContextMenuCmd(), HandleCommand(), HandleHotKey(), and ToggleDesktop().

◆ RestoreMinimizedNonTaskWnds()

void CTrayWindow::RestoreMinimizedNonTaskWnds ( BOOL  bDestroyed,
HWND  hwndActive 
)
inline

Definition at line 3048 of file traywnd.cpp.

3049 {
3050 for (INT i = g_MinimizedAll.GetSize() - 1; i >= 0; --i)
3051 {
3052 HWND hwnd = g_MinimizedAll[i].hwnd;
3053 if (!hwnd || hwndActive == hwnd)
3054 continue;
3055
3058 {
3059 ::SetWindowPlacement(hwnd, &g_MinimizedAll[i].wndpl); // Restore
3060 }
3061 }
3062
3063 if (bDestroyed)
3065 else
3066 ::SetForegroundWindow(hwndActive);
3067 }
BOOL STDMETHODCALLTYPE IsTaskWnd(HWND hWnd)
Definition: traywnd.cpp:2257

Referenced by OnPulse().

◆ RunFileDlgThread()

DWORD WINAPI CTrayWindow::RunFileDlgThread ( )
inline

Definition at line 483 of file traywnd.cpp.

484 {
485 HWND hwnd;
486 RECT posRect;
487
489
491 WC_STATIC,
492 NULL,
494 posRect.left,
495 posRect.top,
496 posRect.right - posRect.left,
497 posRect.bottom - posRect.top,
498 NULL,
499 NULL,
500 NULL,
501 NULL);
502
504
505 // build the default directory from two environment variables
506 CStringW strDefaultDir, strHomePath;
507 strDefaultDir.GetEnvironmentVariable(L"HOMEDRIVE");
508 strHomePath.GetEnvironmentVariable(L"HOMEPATH");
509 strDefaultDir += strHomePath;
510
512
515
516 return 0;
517 }
BOOL GetEnvironmentVariable(_In_z_ PCXSTR pszVar)
Definition: cstringt.h:658
void WINAPI RunFileDlg(HWND hWndOwner, HICON hIcon, LPCWSTR lpstrDirectory, LPCWSTR lpstrTitle, LPCWSTR lpstrDescription, UINT uFlags)
Definition: dialogs.cpp:399
#define WS_OVERLAPPED
Definition: pedump.c:615
#define WS_DISABLED
Definition: pedump.c:621
#define SS_LEFT
Definition: pedump.c:692
#define WC_STATIC
Definition: commctrl.h:4687
#define RFF_CALCDIRECTORY
Definition: run.h:35
#define CreateWindowEx
Definition: winuser.h:5775

◆ s_RunFileDlgThread()

static DWORD WINAPI CTrayWindow::s_RunFileDlgThread ( IN OUT PVOID  pParam)
inlinestatic

Definition at line 519 of file traywnd.cpp.

520 {
521 CTrayWindow * This = (CTrayWindow*) pParam;
522 return This->RunFileDlgThread();
523 }

Referenced by DisplayRunFileDlg().

◆ s_TrayPropertiesThread()

static DWORD WINAPI CTrayWindow::s_TrayPropertiesThread ( IN OUT PVOID  pParam)
inlinestatic

Definition at line 571 of file traywnd.cpp.

572 {
573 CTrayWindow *This = (CTrayWindow*) pParam;
574
575 return This->TrayPropertiesThread();
576 }

Referenced by DisplayProperties().

◆ SaveState()

void CTrayWindow::SaveState ( )
inline

Definition at line 452 of file traywnd.cpp.

453 {
455 return;
456
458
461 }
VOID ClearRecentAndMru()
@ REST_NOSAVESET
Definition: shlobj.h:1653
@ REST_CLEARRECENTDOCSONEXIT
Definition: shlobj.h:1687
#define WM_PROGMAN_SAVESTATE
Definition: undocshell.h:61

Referenced by DoExitWindows(), HandleCommand(), and OnEndSession().

◆ ShowDesktop()

VOID CTrayWindow::ShowDesktop ( )
inline

Definition at line 3148 of file traywnd.cpp.

3149 {
3151 }

Referenced by ExecContextMenuCmd(), HandleCommand(), and ToggleDesktop().

◆ ToggleDesktop()

VOID CTrayWindow::ToggleDesktop ( )
inline

Definition at line 625 of file traywnd.cpp.

626 {
628 {
629 ShowDesktop();
630 }
631 else
632 {
633 RestoreAll();
634 }
635 }

Referenced by HandleCommand(), and HandleHotKey().

◆ TrackCtxMenu()

HRESULT CTrayWindow::TrackCtxMenu ( IN IContextMenu contextMenu,
IN POINT *ppt  OPTIONAL,
IN HWND hwndExclude  OPTIONAL,
IN BOOL  TrackUp,
IN PVOID Context  OPTIONAL 
)
inline

Definition at line 935 of file traywnd.cpp.

941 {
942 POINT pt;
944 RECT rc;
945 HRESULT hr;
946 UINT uCommand;
947 HMENU popup = CreatePopupMenu();
948
949 if (popup == NULL)
950 return E_FAIL;
951
952 if (ppt)
953 {
954 pt = *ppt;
955 }
956 else
957 {
959 pt.x = rc.left;
960 pt.y = rc.top;
961 }
962
963 TRACE("Before Query\n");
964 hr = contextMenu->QueryContextMenu(popup, 0, 0, UINT_MAX, CMF_NORMAL);
966 {
967 TRACE("Query failed\n");
968 DestroyMenu(popup);
969 return hr;
970 }
971
972 TRACE("Before Tracking\n");
974 if (hwndExclude)
975 {
976 ::GetWindowRect(hwndExclude, &rc);
977 ZeroMemory(&params, sizeof(params));
978 params.cbSize = sizeof(params);
979 params.rcExclude = rc;
980 uCommand = ::TrackPopupMenuEx(popup, TPM_RETURNCMD, pt.x, pt.y, m_hWnd, &params);
981 }
982 else
983 {
984 uCommand = ::TrackPopupMenuEx(popup, TPM_RETURNCMD, pt.x, pt.y, m_hWnd, NULL);
985 }
987
988 if (uCommand != 0)
989 {
990 TRACE("Before InvokeCommand\n");
991 CMINVOKECOMMANDINFO cmi = { 0 };
992 cmi.cbSize = sizeof(cmi);
993 cmi.lpVerb = MAKEINTRESOURCEA(uCommand);
994 cmi.hwnd = m_hWnd;
995 hr = contextMenu->InvokeCommand(&cmi);
996 }
997 else
998 {
999 TRACE("TrackPopupMenu failed. Code=%d, LastError=%d\n", uCommand, GetLastError());
1000 hr = S_FALSE;
1001 }
1002
1003 DestroyMenu(popup);
1004 return hr;
1005 }
GLenum const GLfloat * params
Definition: glext.h:5645
struct IContextMenu::tagCMINVOKECOMMANDINFO CMINVOKECOMMANDINFO
#define UINT_MAX
Definition: intsafe.h:152
#define S_FALSE
Definition: winerror.h:2357
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:838
BOOL WINAPI TrackPopupMenuEx(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _In_ HWND, _In_opt_ LPTPMPARAMS)
#define WM_NULL
Definition: winuser.h:1618
#define MAKEINTRESOURCEA(i)
Definition: winuser.h:581
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define TPM_RETURNCMD
Definition: winuser.h:2398

Referenced by OnContextMenu().

◆ TrackMenu()

UINT CTrayWindow::TrackMenu ( IN HMENU  hMenu,
IN POINT *ppt  OPTIONAL,
IN HWND hwndExclude  OPTIONAL,
IN BOOL  TrackUp,
IN BOOL  IsContextMenu 
)
inline

Definition at line 864 of file traywnd.cpp.

870 {
871 TPMPARAMS tmp, *ptmp = NULL;
872 POINT pt;
873 UINT cmdId;
874 UINT fuFlags;
875
876 if (hwndExclude != NULL)
877 {
878 /* Get the client rectangle and map it to screen coordinates */
879 if (::GetClientRect(hwndExclude,
880 &tmp.rcExclude) &&
881 ::MapWindowPoints(hwndExclude,
882 NULL,
883 (LPPOINT) &tmp.rcExclude,
884 2) != 0)
885 {
886 ptmp = &tmp;
887 }
888 }
889
890 if (ppt == NULL)
891 {
892 if (ptmp == NULL &&
893 GetClientRect(&tmp.rcExclude) &&
895 NULL,
896 (LPPOINT) &tmp.rcExclude,
897 2) != 0)
898 {
899 ptmp = &tmp;
900 }
901
902 if (ptmp != NULL)
903 {
904 /* NOTE: TrackPopupMenuEx will eventually align the track position
905 for us, no need to take care of it here as long as the
906 coordinates are somewhere within the exclusion rectangle */
907 pt.x = ptmp->rcExclude.left;
908 pt.y = ptmp->rcExclude.top;
909 }
910 else
911 pt.x = pt.y = 0;
912 }
913 else
914 pt = *ppt;
915
916 tmp.cbSize = sizeof(tmp);
917
918 fuFlags = TPM_RETURNCMD | TPM_VERTICAL;
919 fuFlags |= (TrackUp ? TPM_BOTTOMALIGN : TPM_TOPALIGN);
920 if (IsContextMenu)
921 fuFlags |= TPM_RIGHTBUTTON;
922 else
923 fuFlags |= (TrackUp ? TPM_VERNEGANIMATION : TPM_VERPOSANIMATION);
924
925 cmdId = TrackPopupMenuEx(hMenu,
926 fuFlags,
927 pt.x,
928 pt.y,
929 m_hWnd,
930 ptmp);
931
932 return cmdId;
933 }
RECT rcExclude
Definition: winuser.h:3587
UINT cbSize
Definition: winuser.h:3586
#define TPM_RIGHTBUTTON
Definition: winuser.h:2391
#define TPM_BOTTOMALIGN
Definition: winuser.h:2396
#define TPM_TOPALIGN
Definition: winuser.h:2394
#define TPM_VERTICAL
Definition: winuser.h:2393

Referenced by OnSysChar().

◆ TrayMessageLoop()

VOID CTrayWindow::TrayMessageLoop ( )
inline

Definition at line 3466 of file traywnd.cpp.

3467 {
3468 MSG Msg;
3469 BOOL Ret;
3470
3471 /* FIXME: We should keep a reference here... */
3472
3473 while (true)
3474 {
3475 Ret = GetMessage(&Msg, NULL, 0, 0);
3476
3477 if (!Ret || Ret == -1)
3478 break;
3479
3480 if (m_StartMenuBand == NULL ||
3481 m_StartMenuBand->IsMenuMessage(&Msg) != S_OK)
3482 {
3485 }
3486 }
3487 }
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define GetMessage
Definition: winuser.h:5810
#define DispatchMessage
Definition: winuser.h:5785

Referenced by TrayMessageLoop().

◆ TrayProcessMessages()

VOID CTrayWindow::TrayProcessMessages ( )
inline

Definition at line 3446 of file traywnd.cpp.

3447 {
3448 MSG Msg;
3449
3450 /* FIXME: We should keep a reference here... */
3451
3452 while (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE))
3453 {
3454 if (Msg.message == WM_QUIT)
3455 break;
3456
3457 if (m_StartMenuBand == NULL ||
3458 m_StartMenuBand->IsMenuMessage(&Msg) != S_OK)
3459 {
3462 }
3463 }
3464 }
#define PM_REMOVE
Definition: winuser.h:1207
#define PeekMessage
Definition: winuser.h:5850

Referenced by TrayProcessMessages().

◆ TrayPropertiesThread()

DWORD WINAPI CTrayWindow::TrayPropertiesThread ( )
inline

Definition at line 542 of file traywnd.cpp.

543 {
544 HWND hwnd;
545 RECT posRect;
546
549 WC_STATIC,
550 NULL,
552 posRect.left,
553 posRect.top,
554 posRect.right - posRect.left,
555 posRect.bottom - posRect.top,
556 NULL,
557 NULL,
558 NULL,
559 NULL);
560
562
564
567
568 return 0;
569 }
VOID DisplayTrayProperties(IN HWND hwndOwner, IN HWND hwndTaskbar)
Definition: trayprop.cpp:363

◆ Unknown()

STDMETHODIMP CTrayWindow::Unknown ( IN DWORD  dwUnknown1,
IN DWORD  dwUnknown2 
)
inlineoverride

Definition at line 3525 of file traywnd.cpp.

3526 {
3527 TRACE("IShellDesktopTray::Unknown(%u,%u) unimplemented!\n", dwUnknown1, dwUnknown2);
3528 return S_OK;
3529 }

◆ UpdateFonts()

void CTrayWindow::UpdateFonts ( )
inline

Definition at line 1015 of file traywnd.cpp.

1016 {
1017 /* There is nothing to do if themes are enabled */
1018 if (m_Theme)
1019 return;
1020
1022
1023 NONCLIENTMETRICS ncm = {sizeof(ncm)};
1024 if (!SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, FALSE))
1025 {
1026 ERR("SPI_GETNONCLIENTMETRICS failed\n");
1027 return;
1028 }
1029
1030 if (m_Font != NULL)
1032
1033 ncm.lfCaptionFont.lfWeight = FW_NORMAL;
1034 m_Font = CreateFontIndirect(&ncm.lfCaptionFont);
1035 if (!m_Font)
1036 {
1037 ERR("CreateFontIndirect failed\n");
1038 return;
1039 }
1040
1044 }
VOID UpdateFont()
Definition: traywnd.cpp:224
#define FW_NORMAL
Definition: wingdi.h:373
#define CreateFontIndirect
Definition: wingdi.h:4444
#define WM_SETFONT
Definition: winuser.h:1661

Referenced by OnCreate(), and OnSettingChanged().

Member Data Documentation

◆ 

union { ... } CTrayWindow::@110

◆ Flags

DWORD CTrayWindow::Flags

Definition at line 358 of file traywnd.cpp.

◆ IgnorePulse

DWORD CTrayWindow::IgnorePulse

Definition at line 365 of file traywnd.cpp.

Referenced by CTrayWindow(), MinimizeAll(), OnPulse(), OnTimer(), and RestoreAll().

◆ InSizeMove

DWORD CTrayWindow::InSizeMove

Definition at line 362 of file traywnd.cpp.

Referenced by ChangingWinPos(), OnEnterSizeMove(), and OnExitSizeMove().

◆ IsDragging

DWORD CTrayWindow::IsDragging

Definition at line 363 of file traywnd.cpp.

Referenced by ChangingWinPos(), OnEnterSizeMove(), and OnMoving().

◆ m_AutoHideOffset

SIZE CTrayWindow::m_AutoHideOffset
private

◆ m_AutoHideState

UINT CTrayWindow::m_AutoHideState
private

◆ m_ContextMenu

CComPtr<IContextMenu> CTrayWindow::m_ContextMenu
private

Definition at line 323 of file traywnd.cpp.

Referenced by GetCommandString(), InvokeCommand(), and QueryContextMenu().

◆ m_DesktopWnd

HWND CTrayWindow::m_DesktopWnd
private

◆ m_DraggingMonitor

HMONITOR CTrayWindow::m_DraggingMonitor
private

Definition at line 339 of file traywnd.cpp.

Referenced by ChangingWinPos(), and OnMoving().

◆ m_DraggingPosition

DWORD CTrayWindow::m_DraggingPosition
private

Definition at line 338 of file traywnd.cpp.

Referenced by ChangingWinPos(), and OnMoving().

◆ m_Font

HFONT CTrayWindow::m_Font
private

Definition at line 326 of file traywnd.cpp.

Referenced by UpdateFonts(), and ~CTrayWindow().

◆ m_Monitor

HMONITOR CTrayWindow::m_Monitor
private

◆ m_MouseTrackingInfo

TRACKMOUSEEVENT CTrayWindow::m_MouseTrackingInfo
private

Definition at line 349 of file traywnd.cpp.

Referenced by CTrayWindow().

◆ m_Position

◆ m_PreviousMonitor

HMONITOR CTrayWindow::m_PreviousMonitor
private

Definition at line 337 of file traywnd.cpp.

Referenced by GetPreviousMonitor(), and ResizeWorkArea().

◆ m_pShowDesktopButton

CTrayShowDesktopButton* CTrayWindow::m_pShowDesktopButton
private

◆ m_Rebar

HWND CTrayWindow::m_Rebar
private

◆ m_RunFileDlgOwner

HWND CTrayWindow::m_RunFileDlgOwner
private

Definition at line 345 of file traywnd.cpp.

Referenced by DisplayRunFileDlg(), and RunFileDlgThread().

◆ m_ShellServices

HDPA CTrayWindow::m_ShellServices
private

Definition at line 351 of file traywnd.cpp.

Referenced by OnCreate(), and ~CTrayWindow().

◆ m_StartButton

◆ m_StartMenuBand

CComPtr<IMenuBand> CTrayWindow::m_StartMenuBand
private

Definition at line 319 of file traywnd.cpp.

Referenced by if(), OnCreate(), OnSettingChanged(), TrayMessageLoop(), and TrayProcessMessages().

◆ m_StartMenuPopup

CComPtr<IMenuPopup> CTrayWindow::m_StartMenuPopup
private

◆ m_TaskBand

CComPtr<IDeskBand> CTrayWindow::m_TaskBand
private

Definition at line 322 of file traywnd.cpp.

Referenced by OnCreate().

◆ m_TaskSwitch

HWND CTrayWindow::m_TaskSwitch
private

◆ m_Theme

◆ m_TrayBandSite

CComPtr<ITrayBandSite> CTrayWindow::m_TrayBandSite

Definition at line 354 of file traywnd.cpp.

Referenced by CheckTrayWndPosition(), Lock(), OnCommand(), OnContextMenu(), OnCreate(), and OnNotify().

◆ m_TrayNotify

◆ m_TrayNotifyInstance

CComPtr<IUnknown> CTrayWindow::m_TrayNotifyInstance
private

Definition at line 333 of file traywnd.cpp.

Referenced by OnCreate().

◆ m_TrayPropertiesOwner

HWND CTrayWindow::m_TrayPropertiesOwner
private

Definition at line 344 of file traywnd.cpp.

Referenced by DisplayProperties(), and TrayPropertiesThread().

◆ m_TrayRects

◆ m_TraySize

SIZE CTrayWindow::m_TraySize
private

◆ NewPosSize

DWORD CTrayWindow::NewPosSize

Definition at line 364 of file traywnd.cpp.


The documentation for this class was generated from the following file: