用VC5 制 作 应 用 程 序 启 动 封 面

原创 2001年06月19日 18:38:00
用VC5 制 作 应 用 程 序 启 动 封 面

   用VC5 制 作 应 用 程 序 启 动 封 面 

很 多 大 型 应 用 程 序 都 有 启 动 封 面, 如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;
}

---- 至 此 整 个 真 彩 启 动 封 面 制 作 完 毕, 如 果 需 要 还 可以 增 加 动 画 和 移 动 
字 幕 等 其 他 多 媒 体 功 能。 



--------------------------------------------------------------------------------

百度 阿里 华为 腾讯 谷歌面试笔试题及解析

8月15日,百度2道面试题: 1、来自《编程之美》的概率题:一个桶里面有白球、黑球各100个,现在按下述规则取球:的     i 、每次从通里面拿出来两个球;     ii、如果取出的是两个同色...
  • xiaozz_m608c
  • xiaozz_m608c
  • 2013年10月11日 21:27
  • 2568

携程实习现场面试

继上个星期电话面试之后,今天终于引来了去携程总部技术现场面试,这个星期这几天刷了好几天的论坛和别人关于ios面试的技术总结。因为是第一次去SOHO哪里,从学校到哪里还是用了一个多小时,真心被携程的大楼...
  • sundaowei1990
  • sundaowei1990
  • 2017年03月14日 21:12
  • 597

重装MySQL出现start service故障问题解决及10061问题

由于电脑出现了Can't connect to MySQL server on 'localhost' (10061),我冒失地重装了MySQL数据库,于是在安装的最后一步execute时start ...
  • joseph_lee2012
  • joseph_lee2012
  • 2013年12月19日 10:28
  • 1279

自己动手写编译器之序

偶然的机会,我得知王博俊在工作之余,写了一本以简化的C语言为例子讲述编译器和链接器实践的书。浏览了初稿之后,感觉全书内容简明,容易上手,又不失全面和系统,正好弥补了这方面的空白。特向大家推荐。...
  • u013407592
  • u013407592
  • 2015年02月10日 09:56
  • 1679

[C++]封装排序二叉树&随机数生成(c++11)

封装排序二叉树&随机数生成(c++11)本文,我尝试着把排序二叉树封装为一个模板类,并且用C++11给出的随机数生成函数来对这个类进行测试。排序二叉树封装 这个二叉树的特征是,左子数的值肯定比父节...
  • stary_yan
  • stary_yan
  • 2016年05月09日 13:41
  • 711

keras画acc和loss曲线图

keras画acc和loss曲线图 原文:http://blog.csdn.net/u013381011/article/details/78911848 #加载keras模块 from ...
  • jacke121
  • jacke121
  • 2018年01月04日 22:33
  • 65

二叉树的建树、遍历(先序、中序、后序、层次)(递归和非递归)--Java实现

什么是树?什么是二叉树? 树:除了根节点之外的所有节点都有且只有一个父节点,根节点没有父节点;除了叶结点以外的所有节点,都有一个或多个子节点,叶结点没有子节点。 二...
  • u014039577
  • u014039577
  • 2015年12月24日 17:55
  • 1871

软件 工 程 作 业01

package High_frequency_word; import java.io.BufferedInputStream; import java.io.BufferedReader; imp...
  • cquptsjs111
  • cquptsjs111
  • 2014年03月19日 12:45
  • 117

Android 4.4 在启动到 ANDROID 闪光字的时候图像错乱的解决过程

问题现象,接手移植后发现LCD在启动到 Android 闪光字的时候图像错乱。     1.实验一 对比framebuffer参数     利用Framebuffer原理、使用、测试系列文章中的dem...
  • kangear
  • kangear
  • 2014年09月03日 22:24
  • 3018

sqlserver本地订阅无法正常工作几个问题的总结

首先可能会出现无法执行sp_replcmds的错误提示,这个问题主要需要将发布数据库的Owner设置为sa,并且执行下面的脚本。 use 数据名 EXEC sp_repldone @xacti...
  • yjlwl1213
  • yjlwl1213
  • 2013年12月05日 16:30
  • 6916
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用VC5 制 作 应 用 程 序 启 动 封 面
举报原因:
原因补充:

(最多只允许输入30个字)