資源描述:
《用VC5 制作應用程序啟動封面》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。
1、用VC5制作應用程序啟動封面很多大型應用程序都有啟動封面,如Word等辦公系列軟件和VC++等編程軟件。通過啟動封面,除了顯示應用程序名稱和版權等提示畫面,還可避免由于應用程序啟動前進行大量數據初始化時,用戶較長時間的等待,給應用程序增添了許多動態(tài)特性和專業(yè)規(guī)范。鑒于VC++開發(fā)工具應用較廣,這里以VC5為例闡述啟動封面的一般實現步驟。----1.制作封面位圖----制作應用程序啟動封面真彩位圖,記錄位圖的高度和寬度,建立所需要的其他聲音等文件。----2.建立應用程序----利用FILE>NEW菜單建立名為START的多文檔
2、應用程序框架,并利用類向導AppWizard增加基類為genericCWnd的新類CSplashWnd,將新類的文件改名為splash.h和splash.cpp,并增加WM-CREATB和WM-PAINT的消息映射函數。----3.定義變量和函數----在splash.h中定義如下成員變量和函數:public:BOOLCreate(CWnd*pParentWnd=NULL);HANDLEhBitsSrc;LPSTRpBitsSrc;UINTiW,iH;----4.建立啟動封面窗口----在splash.cpp中增加Create函
3、數,建立顯示位圖的彈出窗口:#include“windowsx.h”//增加擴展窗口建立……struct{//位圖文件頭結構BITMAPINFOHEADERHeader;}Info;BOOLCSplashWnd::Create(CWnd*pParentWnd){//建立顯示位圖的彈出窗口returnCreateEx(0,AfxRegisterWndClass(0,AfxGetApp()-〉LoadStandardCursor(IDC_ARROW)),NULL,WS_POPUP
4、WS_VISIBLE,0,0,672,480,pPa
5、rentWnd-〉GetSafeHwnd(),NULL);}intCsplashWnd::OnCreate(LPCREATESTRUCTlpCreateStruct){……//TODO:AddyourspecializedcreationcodehereCenterWindow();//使彈出窗口居中return0;}----5.完善析構函數----在splash.cpp中完善析構函數,為顯示位圖作準備:CSplashWnd::CSplashWnd()//完善析構函數{iW=672;iH=480;//位圖的寬度和高度Info.H
6、eader.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(){::GlobalU
7、nlock(hBitsSrc);//解鎖內存::GlobalFree(hBitsSrc);//釋放內存}----6.顯示真彩位圖----在splash.cpp中完善Onpaint函數,實現真彩位圖的顯示:voidCSplashWnd::OnPaint(){……//TODO:AddyourmessagehandlercodehereCFilefbmp;fbmp.Open(“c:\windows\EMC1.BMP”,CFile::modeRead
8、CFile::typeBinary
9、CFile::shareExclusive);
10、//打開文件fbmp.Seek(54,CFile::begin);//位圖文件頭為54字節(jié)fbmp.ReadHuge(pBitsSrc,(long)(iW*iH*3))://讀文件fbmp.Close();//關閉文件HBITMAPhBitmap=::CreateDIBitmap(dc.m_hDC,(BITMAPINFOHEADERFAR*)&(Info.Header),CBM_INIT,pBitsSrc,(LPBITMAPINFO)&Info,DIB_RGB_COLORS);//建立位圖HDChMemDC=::CreateCo
11、mpatibleDC(dc.m_hDC);//建立內存HBITMAPhBitmapOld=SelectBitmap(hMemDC,hBitmap);//選擇對象::StretchBlt(dc.m_hDC,0,0,iW,iH,hMemDC,0,0,iW,iH,SR