在自己的應用程序中定制多媒體真彩封頁,可以使應用程序在顯示名稱和版權特性時豐富程序界面,它可以避免在應用程序啟動時由于大量數據初始化而造成的較長時間的空等待過程,另外在給應用程序增加了生動特性和專業特性的同時,也起到了宣傳和廣告的作用。VC5中的實現步驟如下:
一、制作封頁位圖:制作應用程序多媒體啟動封頁真彩位圖,記錄位圖的高度和寬度,建立所需要的其他多媒體聲音等文件。
二、建立應用程序:利用FILE->NEW菜單建立名為START的多文檔應用程序框架,并利用類向導AppWizard增加基類為genericCWnd的新類CSplashWnd,將新類的文件改名為splash.h和splash.cpp,并增加WM_CREATE和WM_PAint`的消息映射函數。
三、定義變量和函數:在splash.h中定義如下成員變量和函數。
public:
BOOL`Create(CWnd`*pParentWnd=NULL);
HANDLE`hBitsSrc;
LPSTR`pBitsSrc;
Uint`iW,iH;
四、建立啟動封頁窗口:在splash.cpp中增加Create函數,建立顯示位圖的彈出窗口。
#include`“windowsx.h"//`增加擴展窗口建立
……
struct{//`位圖文件頭結構
BITMAPINFOHEADER`Header;
}Info;
BOOL`CSplashWnd::Create(CWnd`*pParentWnd)
{//`建立顯示位圖的彈出窗口
return`CreateEx(0,AfxRegisterWndClass(0,AfxGetApp()->LoadStandardCursor(IDC_ARROW)),NULL,WS_POPUP|WS_VISIBLE,0,0,672,480,
pParentWnd->GetSafeHwnd(),NULL);
}
int`CSplashWnd::OnCreate(LPCREATESTRUCT`lpCreateStruct)
{……
//`TODO:Add`your`specialized`creation`code`here
CenterWindow();//`使彈出窗口居中
return`0;
}
五、完善析構函數:在splash.cpp中完善析構函數,為顯示位圖作準備。
CSplashWnd::CSplashWnd()//`完善析構函數
{`iW=672;iH=480;//`位圖的寬度和高度
Info.Header.biSize=sizeof(BITMAPINFOHEADER);
Info.Header.biWidth=iW;
Info.Header.biHeight=iH;
Info.Header.biPlanes=1L;
Info.Header.biBitCount=24L;
hBitsSrc=::GlobalAlloc(GHND,(long)(iW`*iH`*3));//`分配內存
pBitsSrc=(LPSTR)::GlobalLock(hBitsSrc);//`加鎖內存
}
CSplashWnd::~CSplashWnd()
{`::GlobalUnlock(hBitsSrc);//`解鎖內存
::GlobalFree(hBitsSrc);//`釋放內存
}
六、顯示真彩位圖:在splash.cpp中完善Onpaint`函數,實現真彩位圖的顯示。
void`CSplashWnd::OnPaint()
{……//`TODO:Addyourmessagehandlercodehere
CFilefbmp;
fbmp.Open(“c:\\windows\\EMC1.BMP",CFile::modeRead|
CFile::typeBinary|CFile::shareExclusive);//`打開文件
fbmp.Seek(54,CFile::begin);//`位圖文件頭為54字節
fbmp.ReadHuge(pBitsSrc,(long)(iW`*iH`*3));//`讀文件
fbmp.Close();//`關閉文件
HBITMAP`hBitmap=::CreateDIBitmap(dc.m_hDC,
(BITMAPINFOHEADERFAR`*)`&(Info.Header),CBM_INIT,pBitsSrc,(LPBITMAPINFO)`&Info,DIB_RGB_COLORS);
//`建立位圖
HDC`hMemDC=::CreateCompatibleDC(dc.m_hDC);
//`建立內存
HBITMAP`hBitmapOld=SelectBitmap(hMemDC,hBitmap);
//`選擇對象
::StretchBlt(dc.m_hDC,0,0,iW,iH,hMemDC,0,0,iW,iH,SRCCOPY);//`顯示真彩位圖
::DeleteObject(SelectObject(hMemDC,hBitmapOld));
//`刪除位圖
}
七、彈出窗口類聲明:在Mainfrm.h中增加代碼,為顯示和撤銷彈出窗口作準備。
class`CsplashWnd;//`閃爍窗口類
……
class`CMainFrame:public`CMDIFrameWnd
{……
public:
CSplashWnd`SplashWnd;//`聲明類
八、真彩封頁的實現:在Mainfrm.cpp中增加顯示彈出窗口、播放音樂、延時功能和撤銷彈出窗口的代碼,以實現真彩封頁的整個處理過程。
#include`“splash.h"//`新類支持
#include`“mmsystem.h"//`多媒體支持
#pragma`comment(lib,“WINMM.LIB")//`多媒體支持
……
int`CMainFrame::OnCreate(LPCREATESTRUCT`lpCreateStruct)
{
SplashWnd.Create(this);//`創建彈出窗口
SplashWnd.ShowWindow(SW_SHOW);
//`顯示彈出窗口
SplashWnd.UpdateWindow();//`更新彈出窗口
int`dd=sndPlaySound(“c:\\windows\\reminder.wav",
SND_ASYNC|SND_LOOP);
//`異步播放WAV文件
if(dd==FALSE){
//`參數SND_ASYNC|SND_LOOP可循環播放
AfxMessageBox(“播放WAV文件錯誤~");
}
::Sleep(2000);//`進程休眠2秒
……//`應用程序初始化工作
dd=sndPlaySound(“",SND_ASYNC);
//`終止播放.WAV文件
SplashWnd.DestroyWindow();//`撤消彈出窗口
return`0;
}
經過上述八個步驟的處理,整個多媒體真彩啟動封頁制作完畢。讀者還可根據需要增加動畫和移動字幕等其他多媒體效果?!?nbsp;