我用CToorBarCtrl控件在对话框上添加了工具栏,现在想在工具栏上加入一个LOGO动画,即在工具栏上添加创建一个CAnimateCtrl控件用来播放动画。
可是,现有的程序都是在Rebar做的工具栏上添加的,如代码所示:
if (!m_wndToolBar.CreateEx(this) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1;      // fail to create
} if (!m_wndAnimate.Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 10, 10), this, AFX_IDW_TOOLBAR + 2) ||
!m_wndAnimate.Open(IDR_MFCAVI))
{
TRACE0("Failed to create aimation\n");
return -1;      // fail to create
} if (!m_wndReBar.Create(this) ||
!m_wndReBar.AddBar(&m_wndToolBar) ||
!m_wndReBar.AddBar(&m_wndAnimate, NULL, NULL, RBBS_FIXEDSIZE | RBBS_FIXEDBMP))
{
TRACE0("Failed to create rebar\n");
return -1;      // fail to create
} if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
  sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1;      // fail to create
} // TODO: Remove this if you don't want tool tips
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY); m_wndAnimate.Play(0, -1, -1);其中的rebar是例子程序(单文档的)在wizard选用的rebar风格的工具栏。 可是如何在对话框的CToolBarCtrl做的工具栏上添加动画呢?谁知道该如何实现?200分也行!!

解决方案 »

  1.   

    其实一般logo动画都比较简单,为什么不做成几个Icon,然后做个定时器,每隔一会换一个
      

  2.   

    如果你知道如何在工具条上添加下拉框的话(很多地方都有例子),你将AVI控件当成下拉框就可以了!——注意Create时的父窗口一定要是你的ToolBarCtrl。
      

  3.   

    : BinaryPoet(二进制诗人) 
    我试试
    thanks
      

  4.   


    添加ActiveX的Flash控件。
    最cool 的做法 !
      

  5.   

    Don't use Rebar,You could do following this:
    if (!m_wndToolBar.CreateEx(this) ||
    !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
    {
    TRACE0("Failed to create toolbar\n");
    return -1;      // fail to create
    }
    CControlBar* pTopDockBar = GetControlBar(AFX_IDW_DOCKBAR_TOP); if (!m_wndAnimate.Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 10, 10), pTopDockBar , IDC_LOGO_BUTTON) )
    {
    TRACE0("Failed to create aimation\n");
    return -1;      // fail to create
    }--------------------------------------------------------------------
    CWnd* pParentWnd =m_wndAnimate.GetParent();
    if(!pParentWnd || !pParentWnd->IsKindOf(RUNTIME_CLASS(CDockBar)))
    return -1;
    CRect m_rectToolbar,m_rectLogo;
    m_wndAnimate.GetWindowRect(&m_rectLogo);
    pParentWnd->ScreenToClient(&m_rectLogo);
    pParentWnd->GetClientRect(&m_rectToolbar);int nLeft = m_rectToolbar.right-m_rectLogo.Width()-::GetSystemMetrics(SM_CXEDGE);
    int nTop = m_rectToolbar.top;if(nLeft != m_rectLogo.left || nTop != m_rectLogo.top)
    SetWindowPos(NULL,nLeft,nTop,0,0,SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE);
    m_wndAnimate.Open(IDR_MFCAVI)
      

  6.   

    Whether the app is Dialog base or Frame base ,I think it is the same.
    My code isn't much rely on the FrameWnd.
      

  7.   

    if (!m_wndAnimate.Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 10, 10), this, AFX_IDW_TOOLBAR + 2) ||
    !m_wndAnimate.Open(IDR_MFCAVI))
    {
    TRACE0("Failed to create aimation\n");
    return -1;      // fail to create
    }
    把this换成: &m_wndToolBar
      

  8.   


    在对话框上创建一个Animate动画,在OnInitDialog()中加入如下代码:
    CRect m_rectLogo;
    m_animatemine.GetWindowRect(&m_rectLogo);
             m_animatemine.Create(WS_CHILD | WS_VISIBLE, m_rectLogo,this,IDC_ANIMATE1);   
    m_animatemine.Open(IDR_ANIMATE1);
    m_animatemine.Play(0,-1,-1);为什么不能播放,而且出现Assert错误,程序被强行终止。