代码如下:
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