Esempio n. 1
0
BOOL CSizableReBar::OnNotify( WPARAM wParam, LPARAM lParam, LRESULT* pResult )
{
    if ( wParam != 1 )
    {
        return FALSE;
    }

    REBARBANDINFO rbbi;
    rbbi.cbSize = sizeof( rbbi );
    rbbi.fMask  = RBBIM_CHILD;

    // Let child windows handle certain messages
    NMHDR* pNMHDR = ( NMHDR* )lParam;
    switch ( pNMHDR->code )
    {
        case RBN_HEIGHTCHANGE:
        case RBN_ENDDRAG:
        {
            CFrameWnd* pFrameWnd = GetParentFrame();
            ASSERT( pFrameWnd != 0 );

            if ( !( ( CFrameWndFriend* )pFrameWnd )->m_bInRecalcLayout )
            {
                pFrameWnd->RecalcLayout();
            }
            else
            {
                PostMessage( WM_RECALCPARENT );
            }
            break;
        }
        case RBN_CHILDSIZE:
        {
            NMREBARCHILDSIZE* lprbcs = ( NMREBARCHILDSIZE* )pNMHDR;
            VERIFY( m_rbCtrl.GetBandInfo( lprbcs->uBand, &rbbi ) );

            ::SendMessage( rbbi.hwndChild, WM_REBAR_CHILDSIZE,
                ( WPARAM )&lprbcs->rcBand,
                ( LPARAM )&lprbcs->rcChild );
            break;
        }
        case RBN_CHEVRONPUSHED:
        {
            NMREBARCHEVRON* lpnm = ( NMREBARCHEVRON* )pNMHDR;
            VERIFY( m_rbCtrl.GetBandInfo( lpnm->uBand, &rbbi ) );

            CRect rcChevron( lpnm->rc );
            m_rbCtrl.ClientToScreen( rcChevron );
            ::SendMessage( rbbi.hwndChild, WM_REBAR_CHEVRONPUSHED,
                ( WPARAM )( LPCRECT )rcChevron, lpnm->lParamNM );
            break;
        }
        default:
            // Forward notifications from the re-bar control to owner/parent
            *pResult = GetParent()->SendMessage( WM_NOTIFY, wParam, lParam );
            break;
    }

    return TRUE;
}
Esempio n. 2
0
LRESULT CToolBarEx::OnReBarChevronPushed( WPARAM wParam, LPARAM /*lParam*/ )
{
    CRect rcChevron( ( LPCRECT )wParam );

    CToolBarPopup menu( this );
    menu.ShowPopup( TPM_LEFTALIGN | TPM_VERTICAL |
            ( CWinAppEx::GetInstance()->IsWin50() ? TPM_VERPOSANIMATION : 0 ),
        CPoint( rcChevron.left, rcChevron.bottom ), rcChevron );

    return 0L;
}
Esempio n. 3
0
BOOL CSizableReBar::OnNotify( WPARAM wParam, LPARAM lParam, LRESULT* pResult )
{
    if ( wParam == AFX_IDW_REBAR )
    {
        REBARBANDINFO rbbi;
        rbbi.cbSize = sizeof( rbbi );
        rbbi.fMask  = RBBIM_CHILD;

        // Let child windows handle certain messages
        NMHDR* pNMHDR = ( NMHDR* )lParam;
        switch ( pNMHDR->code )
        {
            case RBN_CHILDSIZE:
            {
                NMREBARCHILDSIZE* lprbcs = ( NMREBARCHILDSIZE* )pNMHDR;
                VERIFY( m_wndReBar.GetReBarCtrl().GetBandInfo( lprbcs->uBand, &rbbi ) );

                ::SendMessage( rbbi.hwndChild, WM_REBAR_CHILDSIZE,
                    ( WPARAM )&lprbcs->rcBand,
                    ( LPARAM )&lprbcs->rcChild );
                break;
            }
            case RBN_CHEVRONPUSHED:
            {
                NMREBARCHEVRON* lpnm = ( NMREBARCHEVRON* )pNMHDR;
                VERIFY( m_wndReBar.GetReBarCtrl().GetBandInfo( lpnm->uBand, &rbbi ) );

                CRect rcChevron( lpnm->rc );
                m_wndReBar.ClientToScreen( rcChevron );
                ::SendMessage( rbbi.hwndChild, WM_REBAR_CHEVRONPUSHED,
                    ( WPARAM )( LPCRECT )rcChevron, lpnm->lParamNM );
                break;
            }
            default:
                break;
        }

        // Forward notifications from the re-bar control to owner/parent
		m_wndReBar.SendMessage( WM_NOTIFY, wParam, lParam );
        *pResult = GetParent()->SendMessage( WM_NOTIFY, wParam, lParam );
        return TRUE;
    }

    return FALSE;
}