ReactOS 0.4.17-dev-357-ga8f14ff
CMenuDeskBar Class Reference

#include <CMenuDeskBar.h>

Inheritance diagram for CMenuDeskBar:
Collaboration diagram for CMenuDeskBar:

Public Member Functions

 CMenuDeskBar ()
 
virtual ~CMenuDeskBar ()
 
STDMETHOD() Popup (POINTL *ppt, RECTL *prcExclude, MP_POPUPFLAGS dwFlags) override
 
STDMETHOD() OnSelect (DWORD dwSelectType) override
 
STDMETHOD() SetSubMenu (IMenuPopup *pmp, BOOL fSet) override
 
STDMETHOD() GetWindow (HWND *phwnd) override
 
STDMETHOD() ContextSensitiveHelp (BOOL fEnterMode) override
 
STDMETHOD() SetSite (IUnknown *pUnkSite) override
 
STDMETHOD() GetSite (REFIID riid, PVOID *ppvSite) override
 
STDMETHOD() SetIconSize (DWORD iIcon) override
 
STDMETHOD() GetIconSize (DWORD *piIcon) override
 
STDMETHOD() SetBitmap (HBITMAP hBitmap) override
 
STDMETHOD() GetBitmap (HBITMAP *phBitmap) override
 
STDMETHOD() Initialize (THIS) override
 
STDMETHOD() QueryStatus (const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText) override
 
STDMETHOD() Exec (const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override
 
STDMETHOD() QueryService (REFGUID guidService, REFIID riid, void **ppvObject) override
 
STDMETHOD() OnFocusChangeIS (LPUNKNOWN lpUnknown, BOOL bFocus) override
 
STDMETHOD() UIActivateIO (BOOL bActivating, LPMSG lpMsg) override
 
STDMETHOD() HasFocusIO (THIS) override
 
STDMETHOD() TranslateAcceleratorIO (LPMSG lpMsg) override
 
STDMETHOD() SetClient (IUnknown *punkClient) override
 
STDMETHOD() GetClient (IUnknown **ppunkClient) override
 
STDMETHOD() OnPosRectChangeDB (LPRECT prc) override
 
- 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 ()
 
HRESULT QueryStatus ([in, unique] const GUID *pguidCmdGroup, [in] ULONG cCmds, [in, out, size_is(cCmds)] OLECMD prgCmds[], [in, out, unique] OLECMDTEXT *pCmdText)
 
HRESULT Exec ([in, unique] const GUID *pguidCmdGroup, [in] DWORD nCmdID, [in] DWORD nCmdexecopt, [in, unique] VARIANT *pvaIn, [in, out, unique] VARIANT *pvaOut)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 
- Public Member Functions inherited from IServiceProvider
HRESULT QueryService ([in] REFGUID guidService, [in] REFIID riid, [out] void **ppvObject)
 
HRESULT RemoteQueryService ([in] REFGUID guidService, [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppvObject)
 
HRESULT Popup ([in] POINTL *ppt, [in] RECTL *prcExclude, [in] MP_POPUPFLAGS dwFlags)
 
HRESULT OnSelect ([in] DWORD dwSelectType)
 
HRESULT SetSubMenu ([in] IMenuPopup *pmp, [in] BOOL fSet)
 
- Public Member Functions inherited from IDeskBar
HRESULT SetClient ([in] IUnknown *punkClient)
 
HRESULT GetClient ([out] IUnknown **ppunkClient)
 
HRESULT OnPosRectChangeDB ([in] RECT *prc)
 
HRESULT GetWindow ([out] HWND *phwnd)
 
HRESULT ContextSensitiveHelp ([in] BOOL fEnterMode)
 
HRESULT SetSite ([in] IUnknown *pUnkSite)
 
HRESULT GetSite ([in] REFIID riid, [out, iid_is(riid)] PVOID *ppvSite)
 

Private Member Functions

virtual void OnFinalMessage (HWND hWnd)
 
LRESULT _OnCreate (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT _OnSize (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT _OnNotify (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT _OnPaint (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT _OnActivate (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT _OnMouseActivate (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT _OnAppActivate (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT _OnWinIniChange (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT _OnNcPaint (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT _OnClose (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
HRESULT _AdjustForTheme (BOOL bFlatStyle)
 
BOOL _IsSubMenuParent (HWND hwnd)
 
HRESULT _CloseBar ()
 

Private Attributes

CComPtr< IUnknownm_Site
 
CComPtr< IUnknownm_Client
 
CComPtr< IMenuPopupm_SubMenuParent
 
CComPtr< IMenuPopupm_SubMenuChild
 
HWND m_ClientWindow
 
DWORD m_IconSize
 
HBITMAP m_Banner
 
BOOL m_Shown
 
DWORD m_ShowFlags
 
BOOL m_didAddRef
 

Additional Inherited Members

- Public Types inherited from IOleCommandTarget
enum  OLECMDF {
  OLECMDF_SUPPORTED = 0x1 , OLECMDF_ENABLED = 0x2 , OLECMDF_LATCHED = 0x4 , OLECMDF_NINCHED = 0x8 ,
  OLECMDF_INVISIBLE = 0x10 , OLECMDF_DEFHIDEONCTXTMENU = 0x20
}
 
enum  OLECMDTEXTF { OLECMDTEXTF_NONE = 0 , OLECMDTEXTF_NAME = 1 , OLECMDTEXTF_STATUS = 2 }
 
enum  OLECMDEXECOPT { OLECMDEXECOPT_DODEFAULT = 0 , OLECMDEXECOPT_PROMPTUSER = 1 , OLECMDEXECOPT_DONTPROMPTUSER = 2 , OLECMDEXECOPT_SHOWHELP = 3 }
 
enum  OLECMDID {
  OLECMDID_OPEN = 1 , OLECMDID_NEW = 2 , OLECMDID_SAVE = 3 , OLECMDID_SAVEAS = 4 ,
  OLECMDID_SAVECOPYAS = 5 , OLECMDID_PRINT = 6 , OLECMDID_PRINTPREVIEW = 7 , OLECMDID_PAGESETUP = 8 ,
  OLECMDID_SPELL = 9 , OLECMDID_PROPERTIES = 10 , OLECMDID_CUT = 11 , OLECMDID_COPY = 12 ,
  OLECMDID_PASTE = 13 , OLECMDID_PASTESPECIAL = 14 , OLECMDID_UNDO = 15 , OLECMDID_REDO = 16 ,
  OLECMDID_SELECTALL = 17 , OLECMDID_CLEARSELECTION = 18 , OLECMDID_ZOOM = 19 , OLECMDID_GETZOOMRANGE = 20 ,
  OLECMDID_UPDATECOMMANDS = 21 , OLECMDID_REFRESH = 22 , OLECMDID_STOP = 23 , OLECMDID_HIDETOOLBARS = 24 ,
  OLECMDID_SETPROGRESSMAX = 25 , OLECMDID_SETPROGRESSPOS = 26 , OLECMDID_SETPROGRESSTEXT = 27 , OLECMDID_SETTITLE = 28 ,
  OLECMDID_SETDOWNLOADSTATE = 29 , OLECMDID_STOPDOWNLOAD = 30 , OLECMDID_ONTOOLBARACTIVATED = 31 , OLECMDID_FIND = 32 ,
  OLECMDID_DELETE = 33 , OLECMDID_HTTPEQUIV = 34 , OLECMDID_HTTPEQUIV_DONE = 35 , OLECMDID_ENABLE_INTERACTION = 36 ,
  OLECMDID_ONUNLOAD = 37 , OLECMDID_PROPERTYBAG2 = 38 , OLECMDID_PREREFRESH = 39 , OLECMDID_SHOWSCRIPTERROR = 40 ,
  OLECMDID_SHOWMESSAGE = 41 , OLECMDID_SHOWFIND = 42 , OLECMDID_SHOWPAGESETUP = 43 , OLECMDID_SHOWPRINT = 44 ,
  OLECMDID_CLOSE = 45 , OLECMDID_ALLOWUILESSSAVEAS = 46 , OLECMDID_DONTDOWNLOADCSS = 47 , OLECMDID_UPDATEPAGESTATUS = 48 ,
  OLECMDID_PRINT2 = 49 , OLECMDID_PRINTPREVIEW2 = 50 , OLECMDID_SETPRINTTEMPLATE = 51 , OLECMDID_GETPRINTTEMPLATE = 52 ,
  OLECMDID_PAGEACTIONBLOCKED = 55 , OLECMDID_PAGEACTIONUIQUERY = 56 , OLECMDID_FOCUSVIEWCONTROLS = 57 , OLECMDID_FOCUSVIEWCONTROLSQUERY = 58 ,
  OLECMDID_SHOWPAGEACTIONMENU = 59 , OLECMDID_ADDTRAVELENTRY = 60 , OLECMDID_UPDATETRAVELENTRY = 61 , OLECMDID_UPDATEBACKFORWARDSTATE = 62 ,
  OLECMDID_OPTICAL_ZOOM = 63 , OLECMDID_OPTICAL_GETZOOMRANGE = 64 , OLECMDID_WINDOWSTATECHANGED = 65 , OLECMDID_ACTIVEXINSTALLSCOPE = 66 ,
  OLECMDID_UPDATETRAVELENTRY_DATARECOVERY = 67 , OLECMDID_SHOWTASKDLG = 68 , OLECMDID_POPSTATEEVENT = 69 , OLECMDID_VIEWPORT_MODE = 70 ,
  OLECMDID_LAYOUT_VIEWPORT_WIDTH = 71 , OLECMDID_VISUAL_VIEWPORT_EXCLUDE_BOTTOM = 72 , OLECMDID_USER_OPTICAL_ZOOM = 73 , OLECMDID_PAGEAVAILABLE = 74 ,
  OLECMDID_GETUSERSCALABLE = 75 , OLECMDID_UPDATE_CARET = 76 , OLECMDID_ENABLE_VISIBILITY = 77 , OLECMDID_MEDIA_PLAYBACK = 78
}
 
typedef IOleCommandTargetLPOLECOMMANDTARGET
 
typedef enum IOleCommandTarget::OLECMDF OLECMDF
 
typedef struct IOleCommandTarget::_tagOLECMD OLECMD
 
typedef struct IOleCommandTarget::_tagOLECMDTEXT OLECMDTEXT
 
typedef enum IOleCommandTarget::OLECMDTEXTF OLECMDTEXTF
 
typedef enum IOleCommandTarget::OLECMDEXECOPT OLECMDEXECOPT
 
typedef enum IOleCommandTarget::OLECMDID OLECMDID
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- Public Types inherited from IServiceProvider
typedef IServiceProviderLPSERVICEPROVIDER
 
- Public Types inherited from IMenuPopup
enum  tagMENUPOPUPSELECT {
  MPOS_EXECUTE = 0 , MPOS_FULLCANCEL , MPOS_CANCELLEVEL , MPOS_SELECTLEFT ,
  MPOS_SELECTRIGHT , MPOS_CHILDTRACKING
}
 
enum  tagMENUPOPUPPOPUPFLAGS {
  MPPF_SETFOCUS = 0x00000001 , MPPF_INITIALSELECT = 0x00000002 , MPPF_NOANIMATE = 0x00000004 , MPPF_KEYBOARD = 0x00000010 ,
  MPPF_REPOSITION = 0x00000020 , MPPF_FORCEZORDER = 0x00000040 , MPPF_FINALSELECT = 0x00000080 , MPPF_TOP = 0x20000000 ,
  MPPF_LEFT = 0x40000000 , MPPF_RIGHT = 0x60000000 , MPPF_BOTTOM = 0x80000000 , MPPF_POS_MASK = 0xE0000000 ,
  MPPF_ALIGN_LEFT = 0x02000000 , MPPF_ALIGN_RIGHT = 0x04000000
}
 
typedef int MP_POPUPFLAGS
 
- Public Types inherited from IOleWindow
typedef IOleWindowLPOLEWINDOW
 
- Public Types inherited from IObjectWithSite
typedef IObjectWithSiteLPOBJECTWITHSITE
 
- 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)
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 

Detailed Description

Definition at line 27 of file CMenuDeskBar.h.

Constructor & Destructor Documentation

◆ CMenuDeskBar()

CMenuDeskBar::CMenuDeskBar ( )

Definition at line 48 of file CMenuDeskBar.cpp.

48 :
51 m_IconSize(0),
54 m_ShowFlags(0),
56{
57}
BOOL m_didAddRef
Definition: CMenuDeskBar.h:54
HWND m_ClientWindow
Definition: CMenuDeskBar.h:46
DWORD m_IconSize
Definition: CMenuDeskBar.h:48
HBITMAP m_Banner
Definition: CMenuDeskBar.h:49
CComPtr< IUnknown > m_Client
Definition: CMenuDeskBar.h:42
DWORD m_ShowFlags
Definition: CMenuDeskBar.h:52
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117

◆ ~CMenuDeskBar()

CMenuDeskBar::~CMenuDeskBar ( )
virtual

Definition at line 59 of file CMenuDeskBar.cpp.

60{
61}

Member Function Documentation

◆ _AdjustForTheme()

HRESULT CMenuDeskBar::_AdjustForTheme ( BOOL  bFlatStyle)
private

Definition at line 859 of file CMenuDeskBar.cpp.

860{
864 return S_OK;
865}
Arabic default style
Definition: afstyles.h:94
LONG WINAPI SHSetWindowBits(HWND hwnd, INT offset, UINT mask, UINT flags)
Definition: ordinal.c:805
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLint GLuint mask
Definition: glext.h:6028
#define S_OK
Definition: intsafe.h:52
#define WS_BORDER
Definition: pedump.c:625
#define WS_DLGFRAME
Definition: pedump.c:626
#define WS_CLIPCHILDREN
Definition: pedump.c:619
#define GWL_STYLE
Definition: winuser.h:863

Referenced by Exec().

◆ _CloseBar()

HRESULT CMenuDeskBar::_CloseBar ( )
private

Definition at line 634 of file CMenuDeskBar.cpp.

635{
636 CComPtr<IDeskBarClient> dbc;
637 HRESULT hr;
638
639 // Ensure that our data isn't destroyed while we are working
640 CComPtr<IDeskBar> safeThis = this;
641
642 m_Shown = false;
643
644 if (m_SubMenuParent)
645 {
646 m_SubMenuParent->SetSubMenu(this, FALSE);
647 }
648
649 if (m_SubMenuChild)
650 {
653 return hr;
654 }
655
656 hr = m_Client->QueryInterface(IID_PPV_ARG(IDeskBarClient, &dbc));
658 return hr;
659
660 hr = dbc->UIActivateDBC(FALSE);
662 return hr;
663
664 if (m_hWnd)
666
667 return UIActivateIO(FALSE, NULL);
668}
CComPtr< IMenuPopup > m_SubMenuParent
Definition: CMenuDeskBar.h:43
CComPtr< IMenuPopup > m_SubMenuChild
Definition: CMenuDeskBar.h:44
STDMETHOD() UIActivateIO(BOOL bActivating, LPMSG lpMsg) override
HRESULT hr
Definition: delayimp.cpp:582
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
@ MPOS_CANCELLEVEL
Definition: shobjidl.idl:2608
#define SWP_NOACTIVATE
Definition: winuser.h:1253
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define SWP_NOMOVE
Definition: winuser.h:1255
#define SWP_HIDEWINDOW
Definition: winuser.h:1252
#define IID_PPV_ARG(Itype, ppType)

Referenced by OnSelect(), and SetSite().

◆ _IsSubMenuParent()

BOOL CMenuDeskBar::_IsSubMenuParent ( HWND  hwnd)
private

Definition at line 670 of file CMenuDeskBar.cpp.

671{
672 CComPtr<IMenuPopup> popup = m_SubMenuParent;
673
674 while (popup)
675 {
676 HRESULT hr;
677 HWND parent;
678
679 hr = IUnknown_GetWindow(popup, &parent);
681 return FALSE;
682 if (hwnd == parent)
683 return TRUE;
684
685 hr = IUnknown_GetSite(popup, IID_PPV_ARG(IMenuPopup, &popup));
686 if (FAILED(hr))
687 return FALSE;
688 }
689
690 return FALSE;
691}
#define TRUE
Definition: types.h:120
HRESULT WINAPI IUnknown_GetSite(IUnknown *unk, REFIID iid, void **site)
Definition: main.c:161
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:988
r parent
Definition: btrfs.c:3010
#define FAILED(hr)
Definition: intsafe.h:51
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023

Referenced by _OnActivate().

◆ _OnActivate()

LRESULT CMenuDeskBar::_OnActivate ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
private

Definition at line 776 of file CMenuDeskBar.cpp.

777{
778 // BUG in ReactOS: WM_ACTIVATE/WA_INACTIVE makes no sense with lParam==hWnd
779 if (LOWORD(wParam) != 0 || reinterpret_cast<HWND>(lParam) == m_hWnd)
780 {
781 return 0;
782 }
783
784 // HACK! I just want it to work !!!
785 CComPtr<IDeskBar> db;
786 HRESULT hr = IUnknown_QueryService(m_Client, SID_SMenuBandChild, IID_PPV_ARG(IDeskBar, &db));
788 return 0;
789
790 CComPtr<IUnknown> punk;
791
792 hr = db->GetClient(&punk);
794 return 0;
795
796 if (!punk && m_Shown)
797 {
798 if (!_IsSubMenuParent(reinterpret_cast<HWND>(lParam)))
799 {
801 }
802 }
803
804 return 0;
805}
BOOL _IsSubMenuParent(HWND hwnd)
STDMETHOD() OnSelect(DWORD dwSelectType) override
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
HRESULT WINAPI IUnknown_QueryService(IUnknown *obj, REFGUID sid, REFIID iid, void **out)
Definition: main.c:181
#define LOWORD(l)
Definition: pedump.c:82
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158

◆ _OnAppActivate()

LRESULT CMenuDeskBar::_OnAppActivate ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
private

Definition at line 812 of file CMenuDeskBar.cpp.

813{
814#if 0
815 if (wParam == 0 && m_Shown)
816 {
818 }
819#endif
820 return 0;
821}

◆ _OnClose()

LRESULT CMenuDeskBar::_OnClose ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
private

Definition at line 853 of file CMenuDeskBar.cpp.

854{
855 /* Prevent the CMenuDeskBar from destroying on being sent a WM_CLOSE */
856 return 0;
857}

◆ _OnCreate()

LRESULT CMenuDeskBar::_OnCreate ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
private

Definition at line 63 of file CMenuDeskBar.cpp.

64{
65 if (!m_didAddRef)
66 {
67 this->AddRef();
69 }
70
71 bHandled = FALSE;
72 return 0;
73}
ULONG AddRef()

◆ _OnMouseActivate()

LRESULT CMenuDeskBar::_OnMouseActivate ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
private

Definition at line 807 of file CMenuDeskBar.cpp.

808{
809 return MA_NOACTIVATE;
810}
#define MA_NOACTIVATE
Definition: winuser.h:2539

◆ _OnNcPaint()

LRESULT CMenuDeskBar::_OnNcPaint ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
private

Definition at line 831 of file CMenuDeskBar.cpp.

832{
833 /* If it is a flat style menu we need to handle WM_NCPAINT
834 * and paint the border with the right colour */
835 if ((GetStyle() & WS_BORDER) == 0)
836 {
837 /* This isn't a flat style menu. */
838 bHandled = FALSE;
839 return 0;
840 }
841
842 HDC hdc;
843 RECT rcWindow;
844
845 hdc = GetWindowDC();
846 GetWindowRect(&rcWindow);
847 OffsetRect(&rcWindow, -rcWindow.left, -rcWindow.top);
849 ReleaseDC(hdc);
850 return 0;
851}
HDC hdc
Definition: main.c:9
static HDC
Definition: imagelist.c:88
LONG top
Definition: windef.h:107
LONG left
Definition: windef.h:106
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
int WINAPI FrameRect(_In_ HDC, _In_ LPCRECT, _In_ HBRUSH)
HDC WINAPI GetWindowDC(_In_opt_ HWND)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
HBRUSH WINAPI GetSysColorBrush(_In_ int)
#define COLOR_BTNSHADOW
Definition: winuser.h:941
BOOL WINAPI OffsetRect(_Inout_ LPRECT, _In_ int, _In_ int)

◆ _OnNotify()

LRESULT CMenuDeskBar::_OnNotify ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
private

Definition at line 714 of file CMenuDeskBar.cpp.

715{
716 if (!m_Client)
717 return 0;
718
719 CComPtr<IWinEventHandler> winEventHandler;
720 HRESULT hr = m_Client->QueryInterface(IID_PPV_ARG(IWinEventHandler, &winEventHandler));
722 return 0;
723
724 if (winEventHandler)
725 {
727 hr = winEventHandler->OnWinEvent(NULL, uMsg, wParam, lParam, &result);
729 return 0;
730 return result;
731 }
732
733 return 0;
734}
GLuint64EXT * result
Definition: glext.h:11304
LONG_PTR LRESULT
Definition: minwindef.h:176

Referenced by _OnWinIniChange().

◆ _OnPaint()

LRESULT CMenuDeskBar::_OnPaint ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
private

Definition at line 736 of file CMenuDeskBar.cpp.

737{
738 bHandled = FALSE;
739
740 if (m_Banner && !m_IconSize)
741 {
742 BITMAP bm;
743 PAINTSTRUCT ps;
744 HDC hdc = BeginPaint(&ps);
745
748
749 ::GetObject(m_Banner, sizeof(bm), &bm);
750
751 RECT rc;
752 if (!GetClientRect(&rc))
753 WARN("GetClientRect failed\n");
754
755 const int bx = bm.bmWidth;
756 const int by = bm.bmHeight;
757 const int cy = rc.bottom;
758
759 TRACE("Painting banner: %d by %d\n", bm.bmWidth, bm.bmHeight);
760
761 if (!::StretchBlt(hdc, 0, 0, bx, cy - by, hdcMem, 0, 0, bx, 1, SRCCOPY))
762 WARN("StretchBlt failed\n");
763
764 if (!::BitBlt(hdc, 0, cy - by, bx, by, hdcMem, 0, 0, SRCCOPY))
765 WARN("BitBlt failed\n");
766
767 ::SelectObject(hdcMem, hbmOld);
769
770 EndPaint(&ps);
771 }
772
773 return TRUE;
774}
#define WARN(fmt,...)
Definition: precomp.h:61
static VOID BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Height *Stride) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Stride)
Definition: common.c:42
GLbyte by
Definition: glext.h:8766
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
#define TRACE(s)
Definition: solgame.cpp:4
LONG bmHeight
Definition: wingdi.h:1869
LONG bmWidth
Definition: wingdi.h:1868
LONG bottom
Definition: windef.h:109
HDC hdcMem
Definition: welcome.c:104
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1546
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
BOOL WINAPI StretchBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_opt_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
#define SRCCOPY
Definition: wingdi.h:333
#define GetObject
Definition: wingdi.h:4914
BOOL WINAPI DeleteDC(_In_ HDC)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)

◆ _OnSize()

LRESULT CMenuDeskBar::_OnSize ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
private

Definition at line 693 of file CMenuDeskBar.cpp.

694{
695 if (m_Client)
696 {
697 RECT rc;
698
699 GetClientRect(&rc);
700
702 {
703 BITMAP bm;
704 ::GetObject(m_Banner, sizeof(bm), &bm);
705 rc.left += bm.bmWidth;
706 }
707
708 ::SetWindowPos(m_ClientWindow, NULL, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, 0);
709 }
710
711 return 0;
712}
@ BMICON_SMALL
Definition: shlobj_undoc.h:168
LONG right
Definition: windef.h:108

Referenced by Popup(), SetBitmap(), and SetIconSize().

◆ _OnWinIniChange()

LRESULT CMenuDeskBar::_OnWinIniChange ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
private

Definition at line 823 of file CMenuDeskBar.cpp.

824{
825 if (wParam == SPI_SETFLATMENU)
826 return _OnNotify(uMsg, wParam, lParam, bHandled);
827
828 return 0;
829}
LRESULT _OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)

◆ ContextSensitiveHelp()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::ContextSensitiveHelp ( BOOL  fEnterMode)
override

Implements IOleWindow.

Definition at line 97 of file CMenuDeskBar.cpp.

98{
99 return E_NOTIMPL;
100}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ Exec()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::Exec ( const GUID pguidCmdGroup,
DWORD  nCmdID,
DWORD  nCmdexecopt,
VARIANT pvaIn,
VARIANT pvaOut 
)
override

Implements IOleCommandTarget.

Definition at line 113 of file CMenuDeskBar.cpp.

115{
116 if (IsEqualIID(*pguidCmdGroup, CGID_MenuDeskBar))
117 {
118 switch (nCmdID)
119 {
120 case 2: // refresh
121 return S_OK;
122 case 3: // load complete
123 return S_OK;
124 case 4: // set font metrics
125 return _AdjustForTheme(nCmdexecopt);
126 }
127 }
128 else if (IsEqualIID(*pguidCmdGroup, CLSID_MenuBand))
129 {
130 switch (nCmdID)
131 {
132 case 0x10000000: // refresh (sent from TRAYCMD_RELOAD_STARTMENUCFG)
133 {
134 CComPtr<IShellMenu2> pSM; // We just want IShellMenu but CMenuBand::QI is broken?
135 if (SUCCEEDED(IUnknown_QueryService(m_Client, SID_SMenuBandBottom, IID_PPV_ARG(IShellMenu2, &pSM))))
136 pSM->InvalidateItem(NULL, SMINV_REFRESH);
137 return S_OK;
138 }
139 }
140 }
141 /*else if (IsEqualIID(*pguidCmdGroup, CGID_Explorer))
142 {
143 }*/
144 else if (IsEqualIID(*pguidCmdGroup, IID_IDeskBarClient))
145 {
146 switch (nCmdID)
147 {
148 case 0:
149 // hide current band
150 break;
151 case 2:
152 break;
153 case 3:
154 break;
155 }
156 }
157 return E_NOTIMPL;
158}
HRESULT _AdjustForTheme(BOOL bFlatStyle)
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

◆ GetBitmap()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::GetBitmap ( HBITMAP phBitmap)
override

Definition at line 578 of file CMenuDeskBar.cpp.

579{
580 if (phBitmap)
581 *phBitmap = m_Banner;
582 return S_OK;
583}

◆ GetClient()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::GetClient ( IUnknown **  ppunkClient)
override

Implements IDeskBar.

Definition at line 247 of file CMenuDeskBar.cpp.

248{
249 if (ppunkClient == NULL)
250 return E_POINTER;
251
252 if (!m_Client)
253 return E_FAIL;
254
255 return m_Client->QueryInterface(IID_PPV_ARG(IUnknown, ppunkClient));
256}
#define E_FAIL
Definition: ddrawi.h:102
#define E_POINTER
Definition: winerror.h:3480

◆ GetIconSize()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::GetIconSize ( DWORD piIcon)
override

Definition at line 558 of file CMenuDeskBar.cpp.

559{
560 if (piIcon)
561 *piIcon = m_IconSize;
562 return S_OK;
563}

◆ GetSite()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::GetSite ( REFIID  riid,
PVOID ppvSite 
)
override

Implements IObjectWithSite.

Definition at line 290 of file CMenuDeskBar.cpp.

291{
292 if (m_Site == NULL)
293 return E_FAIL;
294
295 return m_Site->QueryInterface(riid, ppvSite);
296}
CComPtr< IUnknown > m_Site
Definition: CMenuDeskBar.h:41
REFIID riid
Definition: atlbase.h:39

◆ GetWindow()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::GetWindow ( HWND phwnd)
override

Implements IOleWindow.

Definition at line 89 of file CMenuDeskBar.cpp.

90{
91 if (lphwnd == NULL)
92 return E_POINTER;
93 *lphwnd = m_hWnd;
94 return S_OK;
95}

◆ HasFocusIO()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::HasFocusIO ( THIS  )
override

Definition at line 197 of file CMenuDeskBar.cpp.

198{
200}
HRESULT WINAPI IUnknown_HasFocusIO(IUnknown *lpUnknown)
Definition: ordinal.c:3724

◆ Initialize()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::Initialize ( THIS  )
override

Definition at line 84 of file CMenuDeskBar.cpp.

85{
86 return S_OK;
87}

◆ OnFinalMessage()

void CMenuDeskBar::OnFinalMessage ( HWND  hWnd)
privatevirtual

Definition at line 75 of file CMenuDeskBar.cpp.

76{
77 if (m_didAddRef)
78 {
79 this->Release();
81 }
82}
ULONG Release()

◆ OnFocusChangeIS()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::OnFocusChangeIS ( LPUNKNOWN  lpUnknown,
BOOL  bFocus 
)
override

Definition at line 102 of file CMenuDeskBar.cpp.

103{
104 return IUnknown_OnFocusChangeIS(m_Client, punkObj, fSetFocus);
105}
HRESULT WINAPI IUnknown_OnFocusChangeIS(LPUNKNOWN lpUnknown, LPUNKNOWN pFocusObject, BOOL bFocus)
Definition: ordinal.c:4231

◆ OnPosRectChangeDB()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::OnPosRectChangeDB ( LPRECT  prc)
override

Definition at line 258 of file CMenuDeskBar.cpp.

259{
260 if (prc == NULL)
261 return E_POINTER;
262
263 return S_OK;
264}
_Out_ LPRECT prc
Definition: ntgdi.h:1658

◆ OnSelect()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::OnSelect ( DWORD  dwSelectType)
override

Implements IMenuPopup.

Definition at line 606 of file CMenuDeskBar.cpp.

607{
608 CComPtr<IDeskBar> safeThis = this;
609 CComPtr<IMenuPopup> oldParent = m_SubMenuParent;
610
611 TRACE("OnSelect dwSelectType=%d\n", this, dwSelectType);
612 switch (dwSelectType)
613 {
614 case MPOS_EXECUTE:
615 case MPOS_FULLCANCEL:
616 case MPOS_CANCELLEVEL:
617
618 _CloseBar();
619
620 if (dwSelectType == MPOS_CANCELLEVEL)
621 return S_OK;
622
623 case MPOS_SELECTLEFT:
624 case MPOS_SELECTRIGHT:
626 if (oldParent)
627 return oldParent->OnSelect(dwSelectType);
628 break;
629 }
630
631 return S_OK;
632}
HRESULT _CloseBar()
@ MPOS_SELECTRIGHT
Definition: shobjidl.idl:2610
@ MPOS_CHILDTRACKING
Definition: shobjidl.idl:2611

Referenced by _OnActivate(), and _OnAppActivate().

◆ Popup()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::Popup ( POINTL ppt,
RECTL prcExclude,
MP_POPUPFLAGS  dwFlags 
)
override

Implements IMenuPopup.

Definition at line 329 of file CMenuDeskBar.cpp.

330{
331 HRESULT hr;
332 CComPtr<IOleCommandTarget> oct;
333 CComPtr<IInputObject> io;
334 CComPtr<IDeskBand> band;
335 CComPtr<IDeskBarClient> dbc;
336
337 if (m_hWnd == NULL)
338 return E_FAIL;
339
342 return hr;
343
344 hr = m_Client->QueryInterface(IID_PPV_ARG(IDeskBarClient, &dbc));
346 return hr;
347
348 // Windows calls this, but it appears to be unimplemented?
349 hr = dbc->SetModeDBC(1);
350 // Allow it to fail with E_NOTIMPL.
351
352 // No clue about the arg, using anything != 0
353 hr = dbc->UIActivateDBC(TRUE);
355 return hr;
356
357 RECT rc = { 0 };
358 hr = dbc->GetSize(0, &rc);
360 return hr;
361
362 // Unknown meaning
363 const int CMD = 19;
364 const int CMD_EXEC_OPT = 0;
365
366 hr = IUnknown_QueryServiceExec(m_Client, SID_SMenuBandChild, &CLSID_MenuBand, CMD, CMD_EXEC_OPT, NULL, NULL);
368 return hr;
369
371 ::OffsetRect(&rc, -rc.left, -rc.top);
372
373 if (m_Banner != NULL)
374 {
375 BITMAP bm;
376 ::GetObject(m_Banner, sizeof(bm), &bm);
377 rc.right += bm.bmWidth;
378 }
379
380 RECT rcWorkArea;
381 ::GetWindowRect(GetDesktopWindow(), &rcWorkArea);
382 int cxWorkArea = rcWorkArea.right - rcWorkArea.left;
383 int cyWorkArea = rcWorkArea.bottom - rcWorkArea.top;
384
385 int x = ppt->x;
386 int y = ppt->y;
387 int cx = rc.right - rc.left;
388 int cy = rc.bottom - rc.top;
389
390 // TODO: Make alignLeft default to TRUE in LTR systems or whenever necessary.
391 BOOL alignLeft = FALSE;
392 BOOL alignTop = FALSE;
393 BOOL preferVertical = FALSE;
394 switch (dwFlags & MPPF_POS_MASK)
395 {
396 case MPPF_TOP:
397 alignTop = TRUE;
398 preferVertical = TRUE;
399 break;
400 case MPPF_LEFT:
401 alignLeft = TRUE;
402 break;
403 case MPPF_BOTTOM:
404 alignTop = FALSE;
405 preferVertical = TRUE;
406 break;
407 case MPPF_RIGHT:
408 alignLeft = FALSE;
409 break;
410 }
411
412 // Try the selected alignment and verify that it doesn't escape the work area.
413 if (alignLeft)
414 {
415 x = ppt->x - cx;
416 }
417 else
418 {
419 x = ppt->x;
420 }
421
422 if (alignTop)
423 {
424 y = ppt->y - cy;
425 }
426 else
427 {
428 y = ppt->y;
429 }
430
431 if (prcExclude)
432 AdjustForExcludeArea(alignLeft, alignTop, preferVertical, &x, &y, cx, cy, *prcExclude);
433
434 // Verify that it doesn't escape the work area, and flip.
435 if (alignLeft)
436 {
437 if (x < rcWorkArea.left && (ppt->x+cx) <= rcWorkArea.right)
438 {
439 alignLeft = FALSE;
440 if (prcExclude)
441 x = prcExclude->right - ((x + cx) - prcExclude->left);
442 else
443 x = ppt->x;
444 }
445 }
446 else
447 {
448 if ((ppt->x + cx) > rcWorkArea.right && x >= rcWorkArea.left)
449 {
450 alignLeft = TRUE;
451 if (prcExclude)
452 x = prcExclude->left - cx + (prcExclude->right - x);
453 else
454 x = ppt->x - cx;
455 }
456 }
457
458 BOOL flipV = FALSE;
459 if (alignTop)
460 {
461 if (y < rcWorkArea.top && (ppt->y + cy) <= rcWorkArea.bottom)
462 {
463 alignTop = FALSE;
464 if (prcExclude)
465 y = prcExclude->bottom - ((y + cy) - prcExclude->top);
466 else
467 y = ppt->y;
468
469 flipV = true;
470 }
471 }
472 else
473 {
474 if ((ppt->y + cy) > rcWorkArea.bottom && y >= rcWorkArea.top)
475 {
476 alignTop = TRUE;
477 if (prcExclude)
478 y = prcExclude->top - cy + (prcExclude->bottom - y);
479 else
480 y = ppt->y - cy;
481
482 flipV = true;
483 }
484 }
485
486 if (prcExclude)
487 AdjustForExcludeArea(alignLeft, alignTop, preferVertical, &x, &y, cx, cy, *prcExclude);
488
489 if (x < rcWorkArea.left)
490 x = rcWorkArea.left;
491
492 if (cx > cxWorkArea)
493 cx = cxWorkArea;
494
495 if (x + cx > rcWorkArea.right)
496 x = rcWorkArea.right - cx;
497
498 if (y < rcWorkArea.top)
499 y = rcWorkArea.top;
500
501 if (cy > cyWorkArea)
502 cy = cyWorkArea;
503
504 if (y + cy > rcWorkArea.bottom)
505 y = rcWorkArea.bottom - cy;
506
508
509 this->SetWindowPos(HWND_TOPMOST, x, y, cx, cy, flags);
510
511 if (flipV)
512 {
515 else if (dwFlags & MPPF_FINALSELECT)
517 }
518
520 m_Shown = true;
521
522 // HACK: The bar needs to be notified of the size AFTER it is shown.
523 // Quick & dirty way of getting it done.
524 BOOL bHandled;
525 _OnSize(WM_SIZE, 0, 0, bHandled);
526
528
530 {
531 const int CMD_SELECT = 5;
532 int CMD_SELECT_OPTS = dwFlags & MPPF_INITIALSELECT ? 0 : -2;
533 IUnknown_QueryServiceExec(m_Client, SID_SMenuBandChild, &CLSID_MenuBand, CMD_SELECT, CMD_SELECT_OPTS, NULL, NULL);
534 }
535
536 return S_OK;
537}
static void AdjustForExcludeArea(BOOL alignLeft, BOOL alignTop, BOOL preferVertical, PINT px, PINT py, INT cx, INT cy, RECTL rcExclude)
ios_base &_STLP_CALL oct(ios_base &__s)
Definition: _ios_base.h:327
LRESULT _OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
HRESULT WINAPI IUnknown_QueryServiceExec(IUnknown *lpUnknown, REFIID service, const GUID *group, DWORD cmdId, DWORD cmdOpt, VARIANT *pIn, VARIANT *pOut)
Definition: ordinal.c:1148
unsigned int BOOL
Definition: ntddk_ex.h:94
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLbitfield flags
Definition: glext.h:7161
@ MPPF_FINALSELECT
Definition: shobjidl.idl:2622
@ MPPF_INITIALSELECT
Definition: shobjidl.idl:2617
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK io
Definition: file.c:72
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
_Out_opt_ int * cx
Definition: commctrl.h:585
long bottom
Definition: polytest.cpp:53
long right
Definition: polytest.cpp:53
long top
Definition: polytest.cpp:53
long left
Definition: polytest.cpp:53
LONG y
Definition: windef.h:130
LONG x
Definition: windef.h:129
#define HWND_TOPMOST
Definition: winuser.h:1219
BOOL WINAPI AdjustWindowRect(_Inout_ LPRECT, _In_ DWORD, _In_ BOOL)
#define WM_SIZE
Definition: winuser.h:1639
HWND WINAPI GetDesktopWindow(void)
Definition: window.c:628
#define SWP_SHOWWINDOW
Definition: winuser.h:1259
#define GetWindowLong
Definition: winuser.h:5962

◆ QueryService()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::QueryService ( REFGUID  guidService,
REFIID  riid,
void **  ppvObject 
)
override

Implements IServiceProvider.

Definition at line 160 of file CMenuDeskBar.cpp.

161{
162 HRESULT hr;
163
164 if (IsEqualGUID(guidService, SID_SMenuPopup) ||
165 IsEqualGUID(guidService, SID_SMenuBandParent) ||
166 IsEqualGUID(guidService, SID_STopLevelBrowser))
167 {
168 hr = this->QueryInterface(riid, ppvObject);
169 if (SUCCEEDED(hr))
170 return hr;
171 }
172
173 if (IsEqualGUID(guidService, SID_SMenuBandBottom) ||
174 IsEqualGUID(guidService, SID_SMenuBandBottomSelected) ||
175 IsEqualGUID(guidService, SID_SMenuBandChild))
176 {
177 if (m_Client == NULL)
178 return E_NOINTERFACE;
179
180 hr = IUnknown_QueryService(m_Client, guidService, riid, ppvObject);
181 if (SUCCEEDED(hr))
182 return hr;
183 }
184
185
186 if (m_Site == NULL)
187 return E_NOINTERFACE;
188
189 return IUnknown_QueryService(m_Site, guidService, riid, ppvObject);
190}
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ QueryStatus()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::QueryStatus ( const GUID pguidCmdGroup,
ULONG  cCmds,
OLECMD  prgCmds[],
OLECMDTEXT pCmdText 
)
override

Implements IOleCommandTarget.

Definition at line 107 of file CMenuDeskBar.cpp.

109{
110 return E_NOTIMPL;
111}

◆ SetBitmap()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::SetBitmap ( HBITMAP  hBitmap)
override

Definition at line 565 of file CMenuDeskBar.cpp.

566{
567 if (m_Banner && m_Banner != hBitmap)
569
571
572 BOOL bHandled;
573 _OnSize(WM_SIZE, 0, 0, bHandled);
574
575 return S_OK;
576}
static HBITMAP hBitmap
Definition: timezone.c:26
pKey DeleteObject()

◆ SetClient()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::SetClient ( IUnknown punkClient)
override

Implements IDeskBar.

Definition at line 207 of file CMenuDeskBar.cpp.

208{
209 CComPtr<IDeskBarClient> pDeskBandClient;
210 HRESULT hr;
211
212 if (m_Client)
213 {
214 hr = m_Client->QueryInterface(IID_PPV_ARG(IDeskBarClient, &pDeskBandClient));
216 return hr;
217
218 pDeskBandClient->SetDeskBarSite(NULL);
219
220 pDeskBandClient = NULL;
221 m_Client = NULL;
222 }
223
224 if (punkClient == NULL)
225 return S_OK;
226
227 if (m_hWnd == NULL)
228 {
229 Create(NULL);
230 }
231
234 return hr;
235
236 hr = m_Client->QueryInterface(IID_PPV_ARG(IDeskBarClient, &pDeskBandClient));
238 return hr;
239
240 hr = pDeskBandClient->SetDeskBarSite(static_cast<IDeskBar*>(this));
242 return hr;
243
245}
@ Create
Definition: registry.c:563

Referenced by SetSite().

◆ SetIconSize()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::SetIconSize ( DWORD  iIcon)
override

Definition at line 539 of file CMenuDeskBar.cpp.

540{
541 HRESULT hr;
542 m_IconSize = iIcon;
543
544 // Unknown meaning (set flags? set icon size?)
545 const int CMD = 16;
546 const int CMD_EXEC_OPT = iIcon ? 0 : 2; // seems to work
547
548 hr = IUnknown_QueryServiceExec(m_Client, SID_SMenuBandChild, &CLSID_MenuBand, CMD, CMD_EXEC_OPT, NULL, NULL);
550 return hr;
551
552 BOOL bHandled;
553 _OnSize(WM_SIZE, 0, 0, bHandled);
554
555 return hr;
556}

◆ SetSite()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::SetSite ( IUnknown pUnkSite)
override

Implements IObjectWithSite.

Definition at line 266 of file CMenuDeskBar.cpp.

267{
268 // Windows closes the bar if this is called when the bar is shown
269
270 if (m_Shown)
271 _CloseBar();
272
274
275 m_Site = pUnkSite;
276
277 if (m_Site)
278 {
280 }
281 else
282 {
285 }
286
287 return S_OK;
288}
STDMETHOD() SetClient(IUnknown *punkClient) override
BOOL WINAPI DestroyWindow(_In_ HWND)

◆ SetSubMenu()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::SetSubMenu ( IMenuPopup pmp,
BOOL  fSet 
)
override

Implements IMenuPopup.

Definition at line 585 of file CMenuDeskBar.cpp.

586{
587 // Called by the MenuBand to assign itself as the logical child of the DeskBar
588
589 if (fSet)
590 {
591 m_SubMenuChild = pmp;
592 }
593 else
594 {
595 if (m_SubMenuChild)
596 {
597 if (pmp == m_SubMenuChild)
598 {
600 }
601 }
602 }
603 return S_OK;
604}

◆ TranslateAcceleratorIO()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::TranslateAcceleratorIO ( LPMSG  lpMsg)
override

Definition at line 202 of file CMenuDeskBar.cpp.

203{
205}
HRESULT WINAPI IUnknown_TranslateAcceleratorIO(IUnknown *lpUnknown, LPMSG lpMsg)
Definition: ordinal.c:3692

◆ UIActivateIO()

HRESULT STDMETHODCALLTYPE CMenuDeskBar::UIActivateIO ( BOOL  bActivating,
LPMSG  lpMsg 
)
override

Definition at line 192 of file CMenuDeskBar.cpp.

193{
194 return IUnknown_UIActivateIO(m_Client, fActivate, lpMsg);
195}
HRESULT WINAPI IUnknown_UIActivateIO(IUnknown *unknown, BOOL activate, LPMSG msg)
Definition: ordinal.c:1228

Referenced by _CloseBar(), and Popup().

Member Data Documentation

◆ m_Banner

HBITMAP CMenuDeskBar::m_Banner
private

Definition at line 49 of file CMenuDeskBar.h.

Referenced by _OnPaint(), _OnSize(), GetBitmap(), Popup(), and SetBitmap().

◆ m_Client

◆ m_ClientWindow

HWND CMenuDeskBar::m_ClientWindow
private

Definition at line 46 of file CMenuDeskBar.h.

Referenced by _OnSize(), and SetClient().

◆ m_didAddRef

BOOL CMenuDeskBar::m_didAddRef
private

Definition at line 54 of file CMenuDeskBar.h.

Referenced by _OnCreate(), and OnFinalMessage().

◆ m_IconSize

DWORD CMenuDeskBar::m_IconSize
private

Definition at line 48 of file CMenuDeskBar.h.

Referenced by _OnPaint(), _OnSize(), GetIconSize(), and SetIconSize().

◆ m_ShowFlags

DWORD CMenuDeskBar::m_ShowFlags
private

Definition at line 52 of file CMenuDeskBar.h.

Referenced by Popup().

◆ m_Shown

BOOL CMenuDeskBar::m_Shown
private

Definition at line 51 of file CMenuDeskBar.h.

Referenced by _CloseBar(), _OnActivate(), _OnAppActivate(), Popup(), and SetSite().

◆ m_Site

CComPtr<IUnknown> CMenuDeskBar::m_Site
private

Definition at line 41 of file CMenuDeskBar.h.

Referenced by GetSite(), QueryService(), and SetSite().

◆ m_SubMenuChild

CComPtr<IMenuPopup> CMenuDeskBar::m_SubMenuChild
private

Definition at line 44 of file CMenuDeskBar.h.

Referenced by _CloseBar(), and SetSubMenu().

◆ m_SubMenuParent

CComPtr<IMenuPopup> CMenuDeskBar::m_SubMenuParent
private

Definition at line 43 of file CMenuDeskBar.h.

Referenced by _CloseBar(), _IsSubMenuParent(), OnSelect(), and SetSite().


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