4 * Copyright 2014 David Quintana
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
23 WS_POPUP
| WS_DLGFRAME
| WS_CLIPCHILDREN
| WS_CLIPSIBLINGS
,
24 WS_EX_LEFT
| WS_EX_LTRREADING
| WS_EX_RIGHTSCROLLBAR
| WS_EX_PALETTEWINDOW
28 public CComCoClass
<CMenuDeskBar
, &CLSID_MenuDeskBar
>,
29 public CComObjectRootEx
<CComMultiThreadModelNoCS
>,
30 public CWindowImpl
<CMenuDeskBar
, CWindow
, CMenuWinTraits
>,
31 public IOleCommandTarget
,
32 public IServiceProvider
,
33 public IInputObjectSite
,
36 public IObjectWithSite
,
38 public IInitializeObject
41 CComPtr
<IUnknown
> m_Site
;
42 CComPtr
<IUnknown
> m_Client
;
43 CComPtr
<IMenuPopup
> m_SubMenuParent
;
44 CComPtr
<IMenuPopup
> m_SubMenuChild
;
56 virtual void OnFinalMessage(HWND hWnd
);
59 virtual ~CMenuDeskBar();
61 DECLARE_REGISTRY_RESOURCEID(IDR_MENUDESKBAR
)
62 DECLARE_NOT_AGGREGATABLE(CMenuDeskBar
)
63 DECLARE_PROTECT_FINAL_CONSTRUCT()
65 DECLARE_WND_CLASS_EX(_T("BaseBar"), CS_SAVEBITS
| CS_DROPSHADOW
, COLOR_3DFACE
)
67 BEGIN_MSG_MAP(CMenuDeskBar
)
68 MESSAGE_HANDLER(WM_CREATE
, _OnCreate
)
69 MESSAGE_HANDLER(WM_SIZE
, _OnSize
)
70 MESSAGE_HANDLER(WM_NOTIFY
, _OnNotify
)
71 MESSAGE_HANDLER(WM_PAINT
, _OnPaint
)
72 MESSAGE_HANDLER(WM_ACTIVATE
, _OnActivate
)
73 MESSAGE_HANDLER(WM_ACTIVATEAPP
, _OnAppActivate
)
74 MESSAGE_HANDLER(WM_MOUSEACTIVATE
, _OnMouseActivate
)
75 MESSAGE_HANDLER(WM_WININICHANGE
, _OnWinIniChange
)
76 MESSAGE_HANDLER(WM_NCPAINT
, _OnNcPaint
)
79 BEGIN_COM_MAP(CMenuDeskBar
)
80 COM_INTERFACE_ENTRY_IID(IID_IMenuPopup
, IMenuPopup
)
81 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget
, IOleCommandTarget
)
82 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider
, IServiceProvider
)
83 COM_INTERFACE_ENTRY_IID(IID_IInputObjectSite
, IInputObjectSite
)
84 COM_INTERFACE_ENTRY_IID(IID_IInputObject
, IInputObject
)
85 COM_INTERFACE_ENTRY_IID(IID_IDeskBar
, IMenuPopup
)
86 COM_INTERFACE_ENTRY_IID(IID_IOleWindow
, IMenuPopup
)
87 COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite
, IObjectWithSite
)
88 COM_INTERFACE_ENTRY_IID(IID_IBanneredBar
, IBanneredBar
)
89 COM_INTERFACE_ENTRY_IID(IID_IInitializeObject
, IInitializeObject
)
92 // *** IMenuPopup methods ***
93 virtual HRESULT STDMETHODCALLTYPE
Popup(POINTL
*ppt
, RECTL
*prcExclude
, MP_POPUPFLAGS dwFlags
);
94 virtual HRESULT STDMETHODCALLTYPE
OnSelect(DWORD dwSelectType
);
95 virtual HRESULT STDMETHODCALLTYPE
SetSubMenu(IMenuPopup
*pmp
, BOOL fSet
);
97 // *** IOleWindow methods ***
98 virtual HRESULT STDMETHODCALLTYPE
GetWindow(HWND
*phwnd
);
99 virtual HRESULT STDMETHODCALLTYPE
ContextSensitiveHelp(BOOL fEnterMode
);
101 // *** IObjectWithSite methods ***
102 virtual HRESULT STDMETHODCALLTYPE
SetSite(IUnknown
*pUnkSite
);
103 virtual HRESULT STDMETHODCALLTYPE
GetSite(REFIID riid
, PVOID
*ppvSite
);
105 // *** IBanneredBar methods ***
106 virtual HRESULT STDMETHODCALLTYPE
SetIconSize(DWORD iIcon
);
107 virtual HRESULT STDMETHODCALLTYPE
GetIconSize(DWORD
* piIcon
);
108 virtual HRESULT STDMETHODCALLTYPE
SetBitmap(HBITMAP hBitmap
);
109 virtual HRESULT STDMETHODCALLTYPE
GetBitmap(HBITMAP
* phBitmap
);
111 // *** IInitializeObject methods ***
112 virtual HRESULT STDMETHODCALLTYPE
Initialize(THIS
);
114 // *** IOleCommandTarget methods ***
115 virtual HRESULT STDMETHODCALLTYPE
QueryStatus(const GUID
*pguidCmdGroup
, ULONG cCmds
, OLECMD prgCmds
[], OLECMDTEXT
*pCmdText
);
116 virtual HRESULT STDMETHODCALLTYPE
Exec(const GUID
*pguidCmdGroup
, DWORD nCmdID
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
);
118 // *** IServiceProvider methods ***
119 virtual HRESULT STDMETHODCALLTYPE
QueryService(REFGUID guidService
, REFIID riid
, void **ppvObject
);
121 // *** IInputObjectSite methods ***
122 virtual HRESULT STDMETHODCALLTYPE
OnFocusChangeIS(LPUNKNOWN lpUnknown
, BOOL bFocus
);
124 // *** IInputObject methods ***
125 virtual HRESULT STDMETHODCALLTYPE
UIActivateIO(BOOL bActivating
, LPMSG lpMsg
);
126 virtual HRESULT STDMETHODCALLTYPE
HasFocusIO(THIS
);
127 virtual HRESULT STDMETHODCALLTYPE
TranslateAcceleratorIO(LPMSG lpMsg
);
129 // *** IDeskBar methods ***
130 virtual HRESULT STDMETHODCALLTYPE
SetClient(IUnknown
*punkClient
);
131 virtual HRESULT STDMETHODCALLTYPE
GetClient(IUnknown
**ppunkClient
);
132 virtual HRESULT STDMETHODCALLTYPE
OnPosRectChangeDB(LPRECT prc
);
136 LRESULT
_OnCreate(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
137 LRESULT
_OnSize(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
138 LRESULT
_OnNotify(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
139 LRESULT
_OnPaint(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
140 LRESULT
_OnActivate(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
141 LRESULT
_OnMouseActivate(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
142 LRESULT
_OnAppActivate(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
143 LRESULT
_OnWinIniChange(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
144 LRESULT
_OnNcPaint(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
146 HRESULT
_AdjustForTheme(BOOL bFlatStyle
);
147 BOOL
_IsSubMenuParent(HWND hwnd
);