淺議軟件封面的制作方法

發表于:2007-07-14來源:作者:點擊數: 標簽:
曹朝暉 問題的提出 軟件封面是指軟件啟動加載時顯示的背景畫面,它不但可以起到吸引用戶目光的作用,更重要的是當一些程序的初始化工作需要數秒鐘時,軟件封面可以用來向用戶提供一些與該軟件相關的信息。軟件封面一般包含了軟件名稱、版本、用戶名、用戶所
曹朝暉

問題的提出
軟件封面是指軟件啟動加載時顯示的背景畫面,它不但可以起到吸引用戶目光的作用,更重要的是當一些程序的初始化工作需要數秒鐘時,軟件封面可以用來向用戶提供一些與該軟件相關的信息。軟件封面一般包含了軟件名稱、版本、用戶名、用戶所在的公司名等信息,顯示方式一般分為靜態畫面和動畫。軟件封面的制作方法有多種,從易到難,由淺到深,編程人員可以根據需要選擇不同的制作方法。本文介紹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|WS_MAXIMIZE|WS_POPUP|WS_VISIBLE|MCIWNDF_NOPLAYBAR|MCIWNDF_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->DragAclearcase/" target="_blank" >cceptFiles();
 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函數調用即可,既簡單,效果又好。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97