一段实现字幕移动的代码(VC)

代码如下:


static int nY=5,nH=80;
switch(uMsg)
{
  case WM_INITDIALOG:
    {
    LPSTR lpAboutText=TEXT("\r\n\
游戏之作,呵呵!\r\n主要方便自己做事!\r\n\
2008年 9月 8日\r\n\r\nWritten By Iawen");
    SetDlgItemText(hDlg,IDC_ABOUT,lpAboutText);
    MoveWindow(GetDlgItem(hDlg,IDC_ABOUT),355,nY,120,nH,TRUE);
    SetTimer(hDlg,IAWEN_TIMER_ID,150,NULL);
    }
    return TRUE;
  case WM_TIMER:
    nY+=2;
    if(nY>165)
      nH-=2;
    if(nY>240){
      nY=5;
      nH=80;
    }
    MoveWindow(GetDlgItem(hDlg,IDC_ABOUT),355,nY,120,nH,TRUE);
    return TRUE;
}

方法:
将需要滚动显示的文字设置到一个Static控件里,然后通过计时器不断地移动Static控件位置来实现文字滚动!

实现步骤:
1、先在资源里添加一个static控件,ID这里设为:IDC_ABOUT
2、将需要滚动显示的文字设置到控件里去,即这里的SetDlgItemText()函数调用:


SetDlgItemText(hDlg,IDC_ABOUT,lpAboutText);

3、将窗口移动到首先出现的位置:


MoveWindow(GetDlgItem(hDlg,IDC_ABOUT),355,nY,120,nH,TRUE);

由于显示字幕的纵坐标与高度是变化的,所以这里定义了两个局部变量:
static int nY=5,nH=80;
只所以使用static类型,呵呵,想想就知道了……

4、设置计时器:


SetTimer(hDlg,IAWEN_TIMER_ID,150,NULL);

5、在WM_TIMER消息里更改static控件窗口的位置:


nY+=2;  
if(nY>165)
  nH-=2;
if(nY>240){
  nY=5;
  nH=80;
}
MoveWindow(GetDlgItem(hDlg,IDC_ABOUT),355,nY,120,nH,TRUE);
return TRUE;

nY+=2;是每次移动的距离
而当nY大于165时,即字幕的低一行到达窗口的底部里,需要减少控件的高度,即这里的nH-=2;
而当nY>240时,也即字幕的最上一行都已经到达窗口的底部,这时就需要重复动作了,即重置nY和nH的值!

一个简单的示例:MoveText.rar

发表评论