m_IconSize(0),
m_Banner(NULL),
m_Shown(FALSE),
- m_ShowFlags(0)
+ m_ShowFlags(0),
+ m_didAddRef(FALSE)
{
}
LRESULT CMenuDeskBar::_OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
{
- this->AddRef();
+ if (!m_didAddRef)
+ {
+ this->AddRef();
+ m_didAddRef = TRUE;
+ }
bHandled = FALSE;
return 0;
void CMenuDeskBar::OnFinalMessage(HWND /* hWnd */)
{
- this->Release();
+ if (m_didAddRef)
+ {
+ this->Release();
+ m_didAddRef = FALSE;
+ }
}
HRESULT STDMETHODCALLTYPE CMenuDeskBar::Initialize(THIS)
HRESULT STDMETHODCALLTYPE CMenuDeskBar::QueryService(REFGUID guidService, REFIID riid, void **ppvObject)
{
+ HRESULT hr;
+
if (IsEqualGUID(guidService, SID_SMenuPopup) ||
IsEqualGUID(guidService, SID_SMenuBandParent) ||
IsEqualGUID(guidService, SID_STopLevelBrowser))
{
- return this->QueryInterface(riid, ppvObject);
+ hr = this->QueryInterface(riid, ppvObject);
+ if (SUCCEEDED(hr))
+ return hr;
}
if (IsEqualGUID(guidService, SID_SMenuBandBottom) ||
if (m_Client == NULL)
return E_NOINTERFACE;
- return IUnknown_QueryService(m_Client, guidService, riid, ppvObject);
+ hr = IUnknown_QueryService(m_Client, guidService, riid, ppvObject);
+ if (SUCCEEDED(hr))
+ return hr;
}
y = rcWorkArea.bottom - cy;
}
- this->SetWindowPos(HWND_TOPMOST, x, y, cx, cy, SWP_SHOWWINDOW | SWP_NOACTIVATE);
+ this->SetWindowPos(HWND_TOPMOST, x, y, cx, cy, SWP_SHOWWINDOW);
m_ShowFlags = dwFlags;
m_Shown = true;
*
*/
+ CComPtr<IMenuPopup> oldParent = m_SubMenuParent;
+
switch (dwSelectType)
{
case MPOS_EXECUTE:
case MPOS_SELECTLEFT:
case MPOS_SELECTRIGHT:
case MPOS_CHILDTRACKING:
- if (m_SubMenuParent)
- return m_SubMenuParent->OnSelect(dwSelectType);
+ if (oldParent)
+ return oldParent->OnSelect(dwSelectType);
break;
}