用VC5制作應用程序啟動封面

發表于:2007-07-14來源:作者:點擊數: 標簽:
很 多 大 型 應 用 程 序 都 有 啟 動 封 面, 如Word 等 辦 公 系 列 軟件 和VC + + 等編 程 軟 件。 通 過 啟 動 封 面, 除 了 顯 示 應 用程 序 名 稱 和 版 權 等 提 示 畫 面,還 可 避 免 由 于 應 用 程 序啟 動 前 進 行 大 量 數 據 初 始 化 時
很 多 大 型 應 用 程 序 都 有 啟 動 封 面, 如Word 等 辦 公 系 列 軟件 和VC + + 等編 程 軟 件。 通 過 啟 動 封 面, 除 了 顯 示 應 用程 序 名 稱 和 版 權 等 提 示 畫 面,還 可 避 免 由 于 應 用 程 序啟 動 前 進 行 大 量 數 據 初 始 化 時, 用 戶 較 長 時 間 的等待, 給 應 用 程 序 增 添 了 許 多 動 態 特 性 和 專 業 規 范。 鑒于VC + + 開 發 工 具 應 用 較 廣, 這 里 以VC5 為 例 闡 述 啟 動封 面 的 一 般 實 現 步 驟。

---- 1. 制 作 封 面 位 圖

---- 制 作 應 用 程 序 啟 動 封 面 真 彩 位 圖, 記 錄 位 圖 的 高度 和 寬 度, 建 立 所 需要 的 其 他 聲 音 等 文 件。

---- 2. 建 立 應 用 程 序

---- 利 用FILE ?>NEW 菜 單 建 立 名 為START 的 多 文 檔 應 用 程 序框 架, 并 利 用 類 向導AppWizard 增 加 基 類 為generic CWnd 的 新 類CSplashWnd,將 新 類 的 文 件 改 名 為splash.h 和splash.cpp, 并 增 加WM -CREATB 和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
{ … …
pubIic:
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