Thank you for reporting this issue. To fix it, please update the source code for the following method:
LRESULT CALLBACK CExtPopupMenuSite::_HookMouseProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
__PROF_UIS_MANAGE_STATE;
if( nCode != HC_ACTION )
return ::CallNextHookEx( g_DefPopupMenuSite.m_hMouseHook, nCode, wParam, lParam );
MOUSEHOOKSTRUCT * lpMS = (MOUSEHOOKSTRUCT*)lParam;
ASSERT( lpMS != NULL );
if( CExtPopupMenuWnd::TEAROFFNOTIFICATON::g_pCurrentTEAROFFNOTIFICATON != NULL )
{
switch( wParam )
{
case WM_MOUSEMOVE:
{
CPoint pt( lpMS->pt );
if( CExtPopupMenuWnd::TEAROFFNOTIFICATON::g_pCurrentTEAROFFNOTIFICATON->_OnMouseMove( (UINT)wParam, pt ) )
return 1;
}
break;
case WM_MOUSEWHEEL:
{
if( CExtPopupMenuWnd::TEAROFFNOTIFICATON::g_pCurrentTEAROFFNOTIFICATON->_OnMouseWheel( wParam, lParam ) )
return 1;
}
break;
case WM_NCLBUTTONDOWN:
case WM_NCRBUTTONDOWN:
case WM_NCMBUTTONDOWN:
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_MBUTTONDOWN:
case WM_NCLBUTTONUP:
case WM_NCRBUTTONUP:
case WM_NCMBUTTONUP:
case WM_LBUTTONUP:
case WM_RBUTTONUP:
case WM_MBUTTONUP:
{
CPoint ptSrc( lpMS->pt );
if( CExtPopupMenuWnd::TEAROFFNOTIFICATON::g_pCurrentTEAROFFNOTIFICATON->_OnMouseClick( (UINT)wParam, ptSrc ) )
return 1;
}
break;
}
}
if( nCode == HC_ACTION && (! g_DefPopupMenuSite.IsEmpty() ) && (! g_DefPopupMenuSite.IsShutdownMode() ) )
{
CExtPopupMenuWnd * pWndCapture = g_DefPopupMenuSite.GetCapture();
if( pWndCapture != NULL && ::IsWindow( pWndCapture->GetSafeHwnd() ) )
{
ASSERT_VALID( pWndCapture );
switch( wParam )
{
case WM_MOUSEMOVE:
{
CPoint pt( lpMS->pt );
pWndCapture->ScreenToClient( &pt );
bool bNoEat = false;
if( pWndCapture->_OnMouseMove( (UINT)wParam, pt, bNoEat ) )
{
HWND hWnd = ::WindowFromPoint( lpMS->pt );
if( hWnd != NULL && ::GetWindowThreadProcessId( hWnd, NULL ) == ::GetCurrentThreadId() )
{
INT nHT = (INT)::SendMessage( hWnd, WM_NCHITTEST, 0L, MAKELPARAM(lpMS->pt.x,lpMS->pt.y) );
INT nMM = WM_MOUSEMOVE;
if( nHT != HTCLIENT && nHT != HTMINBUTTON && nHT != HTMAXBUTTON
&& nHT != HTHELP && nHT != HTCLOSE && nHT != HTNOWHERE
)
nMM = WM_NCMOUSEMOVE;
else
nHT = HTCLIENT;
::SendMessage( hWnd, WM_SETCURSOR, (WPARAM)hWnd, MAKELPARAM(nHT,nMM) );
}
return 1;
}
if( bNoEat )
return ::CallNextHookEx( g_DefPopupMenuSite.m_hMouseHook, nCode, wParam, lParam );
}
break;
case WM_MOUSEWHEEL:
{
bool bNoEat = false;
if( pWndCapture->_OnMouseWheel( wParam, lParam, bNoEat ) )
return 1;
if( bNoEat )
return ::CallNextHookEx( g_DefPopupMenuSite.m_hMouseHook, nCode, wParam, lParam );
return 1;
}
break;
case WM_NCLBUTTONDBLCLK:
case WM_NCRBUTTONDBLCLK:
case WM_NCMBUTTONDBLCLK:
case WM_LBUTTONDBLCLK:
case WM_RBUTTONDBLCLK:
case WM_MBUTTONDBLCLK:
CExtBarButton::g_pTrackingMenuTBB = NULL;
// continue ...
case WM_NCLBUTTONDOWN:
case WM_NCRBUTTONDOWN:
case WM_NCMBUTTONDOWN:
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_MBUTTONDOWN:
case WM_NCLBUTTONUP:
case WM_NCRBUTTONUP:
case WM_NCMBUTTONUP:
case WM_LBUTTONUP:
case WM_RBUTTONUP:
case WM_MBUTTONUP:
{
HWND hWndFromPoint = WindowFromPoint( lpMS->pt );
if( hWndFromPoint != NULL )
{
LRESULT nHT = ::SendMessage( hWndFromPoint, WM_NCHITTEST, 0L, MAKELPARAM( lpMS->pt.x, lpMS->pt.y ) );
if( ( nHT == HTSYSMENU || nHT == HTCAPTION )
&& wParam != WM_NCLBUTTONUP
&& ( ! g_PaintManager.m_DWM.IsCompositionEnabled() )
)
{
CWnd * pWndFromPointPermanent = CWnd::FromHandlePermanent( hWndFromPoint );
if( pWndFromPointPermanent == NULL
|| (! pWndFromPointPermanent->IsKindOf( RUNTIME_CLASS(CMiniFrameWnd) ) )
)
{
pWndCapture->TrackFlagsSet( pWndCapture->TrackFlagsGet() | TPMX_NO_FADE_OUT_ANIMATION );
CExtToolControlBar::_CloseTrackingMenus();
CExtPopupMenuWnd::CancelMenuTracking();
return ::CallNextHookEx( g_DefPopupMenuSite.m_hMouseHook, nCode, wParam, lParam );
}
}
}
CPoint ptSrc( lpMS->pt );
pWndCapture->ScreenToClient( &ptSrc );
bool bNoEat = false;
HWND hWndCapture = pWndCapture->GetSafeHwnd();
ASSERT( hWndCapture != NULL && ::IsWindow(hWndCapture) );
if( pWndCapture->_OnMouseClick( (UINT)wParam, ptSrc, bNoEat ) )
return 1;
if( bNoEat )
return ::CallNextHookEx( g_DefPopupMenuSite.m_hMouseHook, nCode, wParam, lParam );
if( ! (::IsWindow(hWndCapture)) )
return 1;
CPoint pt( lpMS->pt );
HWND hWndPT = ::WindowFromPoint( pt );
if( hWndPT != NULL )
{
CWnd * pWndPermanentPT = CWnd::FromHandlePermanent( hWndPT );
CExtPopupMenuWnd * pPopup = pWndCapture;
for( ; pPopup != NULL; pPopup = pPopup->m_pWndParentMenu )
{
CPoint ptClient( pt );
pPopup->ScreenToClient( &ptClient );
if( pPopup->_PtInWndArea(ptClient) )
return 1;
CExtPopupMenuTipWnd & _tipWnd = pPopup->GetTip();
HWND hWndTest = _tipWnd.GetSafeHwnd();
if( hWndTest != NULL )
{
if( hWndTest == hWndPT || ::IsChild( hWndTest, hWndPT ) )
return 1;
}
if( pWndPermanentPT != NULL
&& ::IsChild( pPopup->m_hWnd, hWndPT )
&& pWndPermanentPT->IsKindOf( RUNTIME_CLASS(CScrollBar) )
)
return 1;
}
}
CExtPopupMenuWnd * pPopup = CExtPopupMenuSite::g_DefPopupMenuSite.GetInstance();
if( pPopup != NULL )
{
ASSERT_VALID( pPopup );
ASSERT( ::IsWindow(pPopup->GetSafeHwnd()) );
pPopup->_CancelingSet();
pPopup->_OnCancelMode();
bool bEatEvent = false;
if( wParam != WM_LBUTTONDOWN && wParam != WM_RBUTTONDOWN && wParam != WM_MBUTTONDOWN )
bEatEvent = true;
if( ! bEatEvent )
{
if( ! ::IsWindow( hWndPT ) )
bEatEvent = true;
}
if( bEatEvent )
{
if( CExtPopupMenuWnd::g_bEatNcAreaClicks )
return 1;
}
}
}
break;
}
}
else
return 1;
}
return ::CallNextHookEx( g_DefPopupMenuSite.m_hMouseHook, nCode, wParam, lParam );
}