二、 滚动效果
滚动的原理都一样,就是将滚动条字幕的宽度与窗体的宽度对比,一旦超出范围又重新回到初始位置。
VB滚动字幕实例:
l 在Form1中的控件:
(1)Label1
Caption="滚动字幕"
Autosize=True
(2)为构成一种阴影效果,再复制一个Label2,调整Label2的位置使其比Label1略高,并将它的文字颜色改得淡一些(设置为蓝色或红色)。
(3)Timer1
Interval=100 (0.1秒)
l 程序代码:
Private Sub Form_Load()
Label1.ForeColor = RGB(128, 128, 128) '文字阴影设为深灰色
Label2.ForeColor = RGB(255, 0, 255) '文字颜色设为粉红色
Label1.Left = Width + 50 '文字的初始位置:在窗体右端外
Label2.Left = Width
End Sub
Private Sub Timer1_Timer()
If Label1.Left < 0 - Label1.Width Then '如果文字移到窗体左端之外,
Label1.Left = Width + 50 '则将它的位置立即移回到初始位置
Label2.Left = Width '又进入窗体
End If
Label1.Left = Label1.Left - 100 '否则文字位置向左移100个单位
Label2.Left = Label2.Left - 100
End Sub
如果要改进滚动效果,使文字的左面一部分从窗体左端出去以后,立即从右端进入窗体,则可将程序代码作如下修改:
Private Sub Form_Load()
Label1.ForeColor = RGB(255, 0, 255) '取消阴影,使两段文字完全相同
Label2.ForeColor = RGB(255, 0, 255)
Label1.Left = 0 '一段文字放在最左端
Label2.Left = -Width '一段文字放在最左端的外面,与Label1
End Sub '相差一个窗体距离
Private Sub Timer1_Timer()
Label1.Left = Label1.Left - 50 '两段文字同时向左移
Label2.Left = Label2.Left - 50
If Label1.Left <= -Width Then '当文字在窗体外再走完一个窗体的距离时,
Label1.Left = Width '又进入窗体
End If
If Label2.Left <= -Width Then
Label2.Left = Width
End If
End Sub
DELPHI:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
If Label1.Left < 0 ? Label1.Width Then
begin
Label1.Left := Panel1.Width ;
end
else
Label1.Left := Label1.Left - 1 ;
end;
VC:
在状态条中显示滚动文本。
1. 从CCstatusBar派生MyStatusBar。
2. 在MainFrm.h中,改变状态条的类型:
CMyStatusBar m_wndStatusBar;
3. 在MainFrm.cpp中,改变indicator数组:
static UINT indicators[] =
{
ID_SEPARATOR,
IDS_SCROLL_PANE,//scrolling text
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
4. 在资源编辑器中,增加IDS_SCROLL_PANE字符串,其内容为若干空格。窗格的大小由要显示的滚动文本来决定。
5. 增加下面成员到CMyStatusBar: Cstring m_strScrollText;
6. 增加Add OnTimer()到CMyStatusBar:
void CMyStatusBar::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if (m_strScrollText.IsEmpty())
{
KillTimer(1);
SetPaneText(CommandToIndex(IDS_SCROLL_PANE), "");
return;
}
static UINT str_idx = 0; //offset into string
//if end of string, return to top
if (str_idx >= (UINT) (m_strScrollText.GetLength() / 2) - 1)
{
str_idx = 0;
}
//display string
SetPaneText(CommandToIndex(IDS_SCROLL_PANE), ((LPCSTR)
m_strScrollText)+str_idx);
//scroll one character
str_idx = str_idx + 1;
CStatusBar::OnTimer(nIDEvent);
}
7. 撤除定时器:
void CMyStatusBar::OnDestroy()
{
CStatusBar::OnDestroy();
// TODO: Add your message handler code here
KillTimer(1);
}
8. 增加显示滚动文本的方法,该方法必须在主框架窗口创建后调用,通常在 CWinApp::InitInstance()中调用:
void CMyStatusBar::StartDisplay(void)
{
//set text for scrolling
m_strScrollText = " Hello! World. "
//to make it circular scroll
m_strScrollText += m_strScrollText;
KillTimer(1);
VERIFY(SetTimer(1, 200, NULL) != 0); //timer
}
三、 添加图片
添加位图没什么好说的,都可以直接导入。VC稍微麻烦点,可以在insert resource 中选import bitmap,在导入资源对话框中选择文件类型为所有文件(*.*),打开方式为AUTO,然后选择要导入的BMP图片既可。
四、 背景音乐
XM是一种比较小的音乐,非常适合做注册机音乐。论坛中也有很多相关的文章,尤其是其中的uFMOD v1.08工具,非常好用,自动转化XM文件为各种程序的OBJ文件。eff.exe工具可以直接转XM音乐为DELPHI的PAS文件,和C语言的.C文件以及汇编的.ASM文件,还生成eff.inc库文件。可以直接到论坛下载该工具,里面都有源码和说明。
另外,论坛会员tankaiha写的文章“在VC6的工程中加入播放xm音乐的功能”讲的非常详细,可以对照那个在MFC中加入音乐。
附件中是我做的三种语言的最终编译后的效果,大家可以看一下。