« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
|
公告 |
本站技术贴除标明为“原创”的之外,其余均为网上转载,文中我会尽量保留原作者姓名,若有侵权请与我联系,我将第一时间做出修改。谢谢!
——既瑜 |
统计 |
blog名称:★既瑜★ 日志总数:183 评论数量:636 留言数量:-25 访问次数:1406161 建立时间:2005年3月12日 |
OICQ:215768265
njucs2001@hotmail.com
erichoo1982@gmail.com |
|
W3CHINA Blog首页 管理页面 写新日志 退出
[【技术文档】]浅议软件封面的制作方法 |
浅议软件封面的制作方法 曹朝晖 问题的提出 软件封面是指软件启动加载时显示的背景画面,它不但可以起到吸引用户目光的作用,更 重要的是当一些程序的初始化工作需要数秒钟时,软件封面可以用来向用户提供一些与该 软件相关的信息。软件封面一般包含了软件名称、版本、用户名、用户所在的公司名等信 息,显示方式一般分为静态画面和动画。软件封面的制作方法有多种,从易到难,由浅到 深,编程人员可以根据需要选择不同的制作方法。本文介绍3种软件封面的制作方法。 添加VC组件 添加组件是制作程序加载背景的一种简单方法。首先进入VC的菜单项Project|Add To Pro ject|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|MCI WNDF_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|WS_MAXIMIZE|WS_POPUP|WS_VISIBLE|MCIWNDF_NOPLAYBAR|MCI WNDF_NOERRORDLG |MCIWNDF_NOTIFYERROR|MCIWNDF_NOTIFYMODE; //建立MCIWnd 窗口 aviWnd=::MCIWndCreate(m_pMainWnd-> m_hWnd,AfxGetInstanceHandle(),dwMCIWndStyle,“mpc.avi”); //表示MCIWnd 窗口存在 nFlag=TRUE; //取开始时间 CTime m_dwSplashTime=::GetCurrentTime(); //播放 MCIWndPlay(aviWnd); m_pMainWnd->DragAcceptFiles(); return TRUE; } 注销一个正在播放的动画窗口有两种方法,一种是设定播放时间,另一种是接受用户命令 直接注销。为设定播放时间,可在程序中添加消息OnIdle,设定经过一段时间后,就注销 动画窗口: BOOL CStdio1App ::OnIdle(LONG lCount) { BOOL bResult=CWinApp::OnIdle(lCount); //提取当前时间 CTime t=CTime::GetCurrentTime(); if(nFlag) { //设定播放时间为10000毫秒 if(t-m_dwSplashTime>10000) { //销毁MCIWnd 窗口 DestroyWindow(aviWnd); //显示程序的主框架窗口 m_pMainWnd->ShowWindow(SW_NORMAL); m_pMainWnd->UpdateWindow(); nFlag=FALSE; } else{ bResult=TRUE; } return bResult; } return TRUE; } 当由用户直接键入命令结束播放时,使用映射消息PreTranslateMessage接受用户的键盘或 鼠标输入: BOOL :: CStdio1App PreTranslateMessage(MSG* pMsg) { if(aviWnd!=NULL&&(pMsg->message== WM_KEYDOWN) || pMsg->message== WM_SYSKEYDOWN || pMsg->message== WM_LBUTTONDOWN || pMsg->message== WM_RBUTTONDOWN || pMsg->message== WM_MBUTTONDOWN || pMsg->message== WM_NCLBUTTONDOWN || pMsg->message== WM_NCRBUTTONDOWN||WM_NCMBUTTONDOWN)) { //注销 DestroyWindow(aviWnd); m_pMainWnd->ShowWindow(SW_MAXIMIZE); m_pMainWnd->UpdateWindow(); nFlag=FALSE; aviWnd=NULL; } return CWinApp::PreTranslateMessage(pMsg); } 小 结 上述3种软件封面的制作方法中,一般大型软件采用第一种静态画面的方法,因为此时程序 本身比较大,如果再用一个消耗大量内存的动画作为封面,就有可能造成计算机内存容量 不足,影响软件的正常运行。对于面向大众化的多媒体软件,一般为了先声夺人,引人入 胜,大多采用AVI动画作为软件封面。而面向学生的多媒体教学课件,一般用Authorware做 一个动画程序,再用 WinExec函数调用即可,既简单,效果又好。
|
阅读全文(2263) | 回复(0) | 编辑 | 精华 |
|