• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

在VC5下定制多媒体真彩封页

发布: 2007-7-04 20:47 | 作者: admin | 来源:  网友评论 | 查看: 22次 | 进入软件测试论坛讨论

领测软件测试网 辽宁省铁岭市委办公室 宋立波

  在自己的应用程序中定制多媒体真彩封页,可以使应用程序在显示名称和版权特性时丰富程序界面,它可以避免在应用程序启动时由于大量数据初始化而造成的较长时间的空等待过程,另外在给应用程序增加了生动特性和专业特性的同时,也起到了宣传和广告的作用。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;

}

  经过上述八个步骤的处理,整个多媒体真彩启动封页制作完毕。读者还可根据需要增加动画和移动字幕等其他多媒体效果。  

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网