Professional UI Solutions
Site Map   /  Register
 
 

Forum

Please Log In to post a new message or reply to an existing one. If you are not registered, please register.

NOTE: Some forums may be read-only if you are not currently subscribed to our technical support services.

Forums » Prof-UIS Tech Support » About RibbonBar-FileMenu. Collapse All
Subject Author Date
tera tera Nov 5, 2009 - 12:59 AM

Hello.


Even if I click two times of RibbonFileMenu.

A RibbonFileMenu is not closed.

It wants to be closed in the same way as Office.


http://ifreeta.dee.cc/20091105/Untitledaa.html

Technical Support Nov 9, 2009 - 1:18 PM

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; // eat!
                        }
                        break;

                        case WM_MOUSEWHEEL:
                        {
                                    if(         CExtPopupMenuWnd::TEAROFFNOTIFICATON::g_pCurrentTEAROFFNOTIFICATON->
                                                            _OnMouseWheel(
                                                                        wParam,
                                                                        lParam
                                                                        )
                                                )
                                                return 1; // eat!
                        }
                        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; // eat!
                        }
                        break;
                        } // switch( wParam )
            }

            if(                     nCode == HC_ACTION // +2.55 - fix by Ulrich Berger-Kubik
                        &&        (! g_DefPopupMenuSite.IsEmpty() )
                        &&        (! g_DefPopupMenuSite.IsShutdownMode() )
                        )
            {
                        CExtPopupMenuWnd * pWndCapture =
                                    g_DefPopupMenuSite.GetCapture();
                        if(                     pWndCapture != NULL
                                    &&        ::IsWindow( pWndCapture->GetSafeHwnd() )
                                    )
                        {
                                    ASSERT_VALID( pWndCapture );
                                    CExtBarButton * pSavedTrackingMenuTBB = CExtBarButton::g_pTrackingMenuTBB;
                                    switch( wParam )
                                    {
                                    //case WM_MOUSEACTIVATE:
                                    //          if( lpMS->hwnd != pWndCapture->GetSafeHwnd() )
                                    //                      return 1;
                                    //break;

                                    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; // eat!
                                                }
                                                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; // eat!
                                                if( bNoEat )
                                                            return
                                                                        ::CallNextHookEx(
                                                                                    g_DefPopupMenuSite.m_hMouseHook,
                                                                                    nCode,
                                                                                    wParam,
                                                                                    lParam
                                                                                    );
                                                return 1; // eat!
                                    }
                                    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 );
                                                LRESULT nHT =
                                                            ::SendMessage(
                                                                        hWndFromPoint,
                                                                        WM_NCHITTEST,
                                                                        0L,
                                                                        MAKELPARAM( lpMS->pt.x, lpMS->pt.y )
                                                                        );
                                                if( hWndFromPoint != NULL )
                                                {
                                                            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
                                                                                                            );
                                                                        }
                                                            }
                                                } // if( hWndFromPoint != NULL )

                                                //CRect rcWndCapture;
                                                //_pWndCapture->GetWindowRect( &rcWndCapture );
                                                //if( !rcWndCapture.PtInRect(lpMS->pt) )
                                                //          break;
                                                CPoint ptSrc( lpMS->pt );
                                                pWndCapture->ScreenToClient( &ptSrc );

                                                bool bSameToolBarButtonIsClicked = false;
                                                CExtPopupMenuWnd * pDefInstancePopup = CExtPopupMenuSite::g_DefPopupMenuSite.GetInstance();
                                                CPoint pt( lpMS->pt );
                                                HWND hWndPT = ::WindowFromPoint( pt );
                                                CWnd * pWndPermanentPT = NULL;
                                                if( hWndPT != NULL )
                                                            pWndPermanentPT = CWnd::FromHandlePermanent( hWndPT );
                                                if(                     pDefInstancePopup != NULL
                                                            &&        pWndPermanentPT != NULL
                                                            &&        pSavedTrackingMenuTBB != NULL
                                                            &&        ( wParam == WM_LBUTTONDOWN || wParam == WM_LBUTTONDBLCLK )
                                                            )
                                                {
                                                            ASSERT_VALID( pDefInstancePopup );
                                                            ASSERT( ::IsWindow(pDefInstancePopup->GetSafeHwnd()) );
                                                            if(                     ( ! pDefInstancePopup->m_rcExcludeArea.IsRectEmpty() )
                                                                        &&        pDefInstancePopup->m_rcExcludeArea.PtInRect( pt )
                                                                        &&        pWndPermanentPT != NULL
                                                                        &&        pWndPermanentPT->IsKindOf( RUNTIME_CLASS( CExtToolControlBar ) )
                                                                        )
                                                            {
                                                                        CPoint ptBarClient = pt;
                                                                        pWndPermanentPT->ScreenToClient( &ptBarClient );
                                                                        INT nHtTbb = ((CExtToolControlBar*)pWndPermanentPT)->HitTest( ptBarClient );
                                                                        if( nHtTbb >= 0 && LPVOID(((CExtToolControlBar*)pWndPermanentPT)->GetButton(nHtTbb)) == LPVOID(pSavedTrackingMenuTBB) )
                                                                                    bSameToolBarButtonIsClicked = true;
                                                            }
                                                }

                                                DWORD dwCTF = pWndCapture->TrackFlagsGet();
                                                bool bNoEat = false;
                                                HWND hWndCapture = pWndCapture->GetSafeHwnd();
                                                ASSERT( hWndCapture != NULL && ::IsWindow(hWndCapture) );
                                                if(         pWndCapture->_OnMouseClick(
                                                                        (UINT)wParam,
                                                                        ptSrc,
                                                                        bNoEat
                                                                        )
                                                            )
                                                {
                                                            if(                     ( ! bNoEat )
                                                                        &&        ( dwCTF & TPMX_SYSMENU ) != 0
                                                                        &&        ( wParam == WM_NCLBUTTONDOWN || wParam == WM_NCLBUTTONDBLCLK )
                                                                        &&        nHT == HTSYSMENU
                                                                        )
                                                                        return
                                                                                    ::CallNextHookEx(
                                                                                                g_DefPopupMenuSite.m_hMouseHook,
                                                                                                nCode,
                                                                                                wParam,
                                                                                                lParam
                                                                                                );
                                                            if( ! bSameToolBarButtonIsClicked )
                                                                        return 1; // eat!
                                                }
                                                if(                     ( ! bNoEat )
                                                            &&        ( dwCTF & TPMX_SYSMENU ) != 0
                                                            &&        ( wParam == WM_NCLBUTTONDOWN || wParam == WM_NCLBUTTONDBLCLK )
                                                            &&        nHT == HTSYSMENU
                                                            )
                                                            bNoEat = true;
                                                if( bNoEat )
                                                            return
                                                                        ::CallNextHookEx(
                                                                                    g_DefPopupMenuSite.m_hMouseHook,
                                                                                    nCode,
                                                                                    wParam,
                                                                                    lParam
                                                                                    );
                                                if( ! (::IsWindow(hWndCapture)) )
                                                            return 1; // eat!
                                    
                                                // post processing                                 
                                                if( hWndPT != NULL )
                                                {
                                                            CExtPopupMenuWnd * pPopup = pWndCapture;
                                                            for( ; pPopup != NULL; pPopup = pPopup->m_pWndParentMenu )
                                                            {
                                                                        CPoint ptClient( pt );
                                                                        pPopup->ScreenToClient( &ptClient );
                                                                        if( pPopup->_PtInWndArea(ptClient) )
                                                                                    return 1; // eat!
                                                                        CExtPopupMenuTipWnd & _tipWnd = pPopup->GetTip();
                                                                        HWND hWndTest = _tipWnd.GetSafeHwnd();
                                                                        if( hWndTest != NULL )
                                                                        {
                                                                                    if(                     hWndTest == hWndPT
                                                                                                ||           ::IsChild( hWndTest, hWndPT )
                                                                                                )
                                                                                                return 1; // eat!
                                                                        } // if( hWndTest != NULL )
                                                                        if(                     pWndPermanentPT != NULL
                                                                                    &&        ::IsChild( pPopup->m_hWnd, hWndPT )
                                                                                    &&        pWndPermanentPT->IsKindOf( RUNTIME_CLASS(CScrollBar) )
                                                                                    )
                                                                                    return 1; // eat!
                                                            } // for( ; pPopup != NULL; pPopup = pPopup->m_pWndParentMenu )
                                                } // if( hWndPT != NULL )

                                                if( pDefInstancePopup != NULL )
                                                {
                                                            bool bEatEvent = false;
                                                            ASSERT_VALID( pDefInstancePopup );
                                                            ASSERT( ::IsWindow(pDefInstancePopup->GetSafeHwnd()) );
                                                            if( bSameToolBarButtonIsClicked )
                                                                                    bEatEvent = true;
                                                            pDefInstancePopup->_CancelingSet();
                                                            pDefInstancePopup->_OnCancelMode();
                                                            if( ! bEatEvent )
                                                            {
                                                                        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; // eat!
                                                            }
                                                } // if( pDefInstancePopup != NULL )
//                                              else
//                                                          CExtPopupMenuSite::g_DefPopupMenuSite._Done();
                                                
                                    }
                                    break;

                                    //default:
                                    //          return 1; // eat!
                                    } // switch( wParam )
                        } // if( pWndCapture != NULL ....
                        else
                                    return 1; // eat
            } // if( (! g_DefPopupMenuSite.IsEmpty() ) ...
            return
                        ::CallNextHookEx(
                                    g_DefPopupMenuSite.m_hMouseHook,
                                    nCode,
                                    wParam,
                                    lParam
                                    );
}


tera tera Nov 8, 2009 - 6:01 PM

Hello.




Will you be busy now?

Had better not I ask you a question now?

The development of our product approaches for an end, and malfunction occurs in various ways.


When is a revision completed?

Please teach it.




http://ifreeta.dee.cc/20091105/Untitled18.html


http://ifreeta.dee.cc/20091105/Untitledaa.html