曹朝晖
问题的提出
软件封面是指软件启动加载时显示的背景画面,它不但可以起到吸引用户目光的作用,更重要的是当一些
程序的初始化工作需要数秒钟时,软件封面可以用来向用户提供一些与该软件相关的信息。软件封面一般包含了软件名称、版本、用户名、用户所在的公司名等信息,显示方式一般分为静态画面和动画。软件封面的制作方法有多种,从易到难,由浅到深,编程人员可以根据需要选择不同的制作方法。本文介绍3种软件封面的制作方法。
添加VC组件
添加组件是制作程序加载背景的一种简单方法。首先进入VC的菜单项Project|Add To Project|Components and Control…,选择Splash Screen组件。然后用Windows附带的画图
程序制作一幅位图,在该位图中,可以加入各种各样的信息:如文字、
图片等。最后把该位图的资源标识号改为IDB_SPLASH,并确定显示时间,定位到函数OnCreate()中:
int CsplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
……
CenterWindow();
//添加下述代码
SetTimer(1,2000,NULL);//显示2000个毫秒
return 0;
}
该方法的特点是编程简单,且容易实现。但由于只能加载一幅静态画面,所以显得过于单调。
使用Authorware
我们可以利用多媒体制作软件Authorware制作一个多媒体可执行程序(.exe),再用VC的WinExec函数调用该
程序的方法来实现动画背景的加载。该方法的主要代码如下:
void CStdio1View::OnDraw(CDC* pDC)
{
CStdio1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//添加如下内容
if(m_j==TRUE)
{
//以最大化显示软件动画
WinExec(“YourSofeFace.exe”,SW_MAXIMIZE);
//只在开始时显示
m_j=FALSE;
}
……
}
利用MCIWnd窗口类
MCIWnd是一个控制多媒体设备(如MIDI、数字视频以及CD音频设备等)的窗口类,它提供了一系列的函数、消息和宏,可以非常容易地将多媒体播放和录制功能添加到
程序中。本文介绍两种利用MCIWnd类播放AVI文件实现加载动画背景的方法。
1.一种方法是在开始时就运行AVI动画,用户不能中途干预。主要代码如下:
//初始化函数
BOOL CStdio1App::InitInstance()
{
……
//AVI文件名
CString filename=“mpc.avi”;
DWORD dwMCIWndStyle;
//播放AVI窗口的属性
dwMCIWndStyle=WS_CAPTION|WS_MAXIMIZE|WS_POPUP|WS_VISIBLE|MCIWNDF_NOPLAYBAR|MCIWNDF_NOERRORDLG|MCIWNDF_NOTIFYERROR|
MCIWNDF_NOT IFYMODE;
long lend,lpos;
//建立播放AVI的窗口
m_hwndMCIWnd=MCIWndCreate(m_hWnd,
AfxGetInstanceHandle(),dwMCIWndStyle,filename);
if(m_hwndMCIWnd)
{
//开始播放
MCIWndPlay(m_hwndMCIWnd);
//取得AVI文件结尾
lend=MCIWndGetEnd(m_hwndMCIWnd);
//当前播放的位置
lpos=MCIWndGetPosition(m_hwndMCIWnd);
//
查询是否播放完了
while(lpos<lend)
{
//当前位置
lpos=MCIWndGetPosition(m_hwndMCIWnd);
}
//播放完后注销AVI窗口
MCIWndDestroy(m_hwndMCIWnd);
}
……
}
该方法比较简单,缺点是播放期间只能等待,无法人工干预。
2.第二种方法可以弥补第一种方法的缺陷,即在动画播放时,可以随时进行用户干预。主要代码如下:
BOOL CStdio1App ::InitInstance()
{
……
m_pMainWnd->ShowWindo(SW_SHOWMAXIMIZED);
m_pMainWnd->UpdateWindow();
//
注册MCIWnd窗口类
if(!MCIWndRegisterClass())
return FALSE;
DWORD dwMCIWndStyle;
//AVI窗口的风格
dwMCIWndStyle=WS_CAPTION|