这在VB6里很容易实现:设置一个Picture容器控件,再放一个Label控件在里面,定时改变Label控件的Left属性,效果就出来了。但是在VC6里没有容器控件,该怎么实现?主要是没有思路。

解决方案 »

  1.   

    这在VC里很容易实现:设置一个Static Text控件,定时改变Static Text控件的位置,效果就出来了。
      

  2.   

    OnPaint里,定时的在Dialog的一个CRect区域中绘图,每次调整一个位移,可以做个计时器,在OnTimeer中,定时的this->InvalidateRect(rect)
      

  3.   

    m_rect1 static text 矩形
    m_rect2 偏移的矩形
    if(m_rect2.right < 0)   
    {
    m_rect2.OffsetRect(2 * m_rect1.right, 0);   
    m_DlgGame->GetWindowDC()->DrawText(" ", m_rect2, DT_RIGHT); 
    }
    else
    {
    m_rect2.OffsetRect(-1 * m_nMove, 0);
    m_DlgGame->GetWindowDC()->TextOut(m_rect2.left, m_rect2.top, "跑马灯内容");
    }
    但是问题是移动后背景是白色的.
      

  4.   

    Mackz ,改变static text位置,它不是会在窗口中乱跑吗?
    我试了给它的Parent属性指向一个控件,这样虽然实现了“父子关系”,也确实在一个控件中跑起来,但是跑的时候无法擦除原来的图像。要么请各位大侠给段简短的代码看看?
      

  5.   

    m_label.MoveWindow(10,10,100,20);
    m_frame.Invalidate();
    label是字符串
    frame是父控件
    我用了这两行重绘,还是会重叠,没用
      

  6.   

    既然用控件,就不要去绘制了,定时器中MoveWindow改变位置好了,也不会有重绘的问题。
      

  7.   

    Mackz ,我就是用了MoveWindow,出现了重绘问题,你看我在8楼的发言
      

  8.   

    我自己解决了,源代码如下:
    void CTestDlg::OnTimer(UINT nIDEvent) 
    {
    // TODO: Add your message handler code here and/or call default CRect rect;
    mPmd.GetWindowRect(&rect);
    mKj.ScreenToClient(&rect);
    rect.left+=5;
    rect.right+=5;
    mPmd.MoveWindow(&rect); CDialog::OnTimer(nIDEvent);
    }
    原来是用错了控件,用成Group Box就不会重绘客户区,现在用static text就会自动重绘,谢谢各位的帮忙