如何在VC5下定制多媒體真彩封頁

發表于:2007-07-14來源:作者:點擊數: 標簽:
在自己的應用程序定制多媒體真彩封頁,可以使應用程序在顯示名稱和版權特性時豐富程序界面,避免由于應用程序啟動前進行大量數據初始化時用戶進行較長時間的空等待過程,在給應用程序增加了生動特性和專業特性的同時,也起到了宣傳和廣告的作用。雖然VC5中具
在自己的應用程序定制多媒體真彩封頁,可以使應用程序在顯示名稱和版權特性時豐富程序界面,避免由于應用程序啟動前進行大量數據初始化時用戶進行較長時間的空等待過程,在給應用程序增加了生動特性和專業特性的同時,也起到了宣傳和廣告的作用。雖然VC5中具有特定的類來實現這一功能,但通過定制自己的應用程序多媒體啟動封頁,還可使自己的應用程序別具一格。VC5中的實現步驟:
1.制作封頁位圖:制作應用程序多媒體啟動封頁真彩位圖,記錄位圖的高度和寬度,建立所需要的其它多媒體聲音等文件;
2.建立應用程序:利用FILE->NEW菜單建立名為START的多文檔應用程序框架,并利用類向導AppWizard增加基類為generic CWnd 的新類CSplashWnd,將新類的文件改名為splash.h和splash.cpp,并增加WM_CREATE和WM_PAINT的消息映射函數;
3.定義變量和函數:在splash.h中定義如下成員變量和函數:
public:
BOOL Create(CWnd* pParentWnd=NULL);
HANDLE hBitsSrc;
LPSTR pBitsSrc;
UINT iW,iH;
4.建立啟動封頁窗口:在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;
}
5.完善析構函數:在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);//釋放內存
}

6.顯示真彩位圖:在splash.cpp中完善Onpaint函數,實現真彩位圖的顯示:
void CSplashWnd::OnPaint()
{......// TODO: Add your message handler code here
CFile fbmp;
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,
(BITMAPINFOHEADER FAR*)&(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));//刪除位圖
}
7.彈出窗口類聲明:在Mainfrm.h中增加代碼,為顯示和撤銷彈出窗口作準備:
class CsplashWnd;//閃爍窗口類
......
class CMainFrame : public CMDIFrameWnd
{......
public:
CSplashWnd SplashWnd;//聲明類
8.真彩封頁的實現:在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;
}
經過上述八個步驟的處理,整個多媒體真彩啟動封頁制作完畢。

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

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