在VC++中制作启动屏幕的新方法.docx

上传人:b****1 文档编号:2416642 上传时间:2022-10-29 格式:DOCX 页数:8 大小:94.86KB
下载 相关 举报
在VC++中制作启动屏幕的新方法.docx_第1页
第1页 / 共8页
在VC++中制作启动屏幕的新方法.docx_第2页
第2页 / 共8页
在VC++中制作启动屏幕的新方法.docx_第3页
第3页 / 共8页
在VC++中制作启动屏幕的新方法.docx_第4页
第4页 / 共8页
在VC++中制作启动屏幕的新方法.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

在VC++中制作启动屏幕的新方法.docx

《在VC++中制作启动屏幕的新方法.docx》由会员分享,可在线阅读,更多相关《在VC++中制作启动屏幕的新方法.docx(8页珍藏版)》请在冰豆网上搜索。

在VC++中制作启动屏幕的新方法.docx

在VC++中制作启动屏幕的新方法

在VC++.net中制作启动屏幕的新方法

在利用VC++.net编程过程中,遇到制作启动屏幕的问题,几经试验,得出一种方便简单的制作方法。

  基本原理是利用对话框窗口的特性,在启动时首先创建对话框,设置一个获得位图文件的句柄,利用Picture控件的SetBitmap(HBITMAPhBitmap)方法,使位图文件充满整个Picture控件窗口,最后设置定时器,整个启动屏幕就制作完成。

  下面介绍具体实现步骤。

  1.打开VS.net的开发环境,新建VC++.net中的MFC应用程序,输入工程名称MySample,点击“确定”,“完成”;

  2.打开资源视图,添加对话框,更改ID为ID_DIALOG_SPLASH,设置对话框Center属性为True,Border属性为“无”;

  3.在对话框中添加Picture控件,设置Picture控件的ID号为ID_PIC,Type属性为“位图”,Centerimage属性为True,然后调整标尺使对话框没有外框,调整对话框的大小以适应启动屏幕的要求,调整Picture的宽高使其充满整个对话框窗口;

  4.双击对话框窗口,弹出类向导对话框,在类名中键入CSplash,选择基类为Cdialog,点击确定,定义控件Picture的控件变量为m_pic;

  5.在Csplash类中重载OnInitDialog()函数,添加消息WM_CHAR,WM_TIMER,WM_LBUTTONUP,WM_MBUTTONUP,WM_RBUTTONUP;

  6.在OnInitDialog()函数中添加代码如下:

BOOLCSplash:

:

OnInitDialog()

{  

  CDialog:

:

OnInitDialog();

  //设置启动窗口背景,在整个窗口中充满位图

  CRectlRect;

  m_pic.GetClientRect(&lRect);//得到Picture控件的窗口大小

  lRect.NormalizeRect();  

  //设置位图句柄

  HBITMAPhbitmap=(HBITMAP)LoadImage(NULL,"splash.bmp",//更改你喜欢的位图文件

      IMAGE_BITMAP,lRect.Width(),lRect.Height(),

      LR_LOADFROMFILE|LR_CREATEDIBSECTION);

  m_pic.SetBitmap(hbitmap);

  //设置定时器

  SetTimer(1,500,NULL);  

  returnTRUE; 

}

  7.在OnTimer(UINTnIDEvent)函数中添加代码如下:

voidCSplash:

:

OnTimer(UINTnIDEvent)

{

  staticinti;

  i++;

  if(i>3)

  {

    //销毁定时器

    KillTimer

(1);

    this->OnOK();

  }

  CDialog:

:

OnTimer(nIDEvent);

}

  8.在OnLButtonUp,OnLButtonUp,OnLButtonUp,OnChar函数中加入以下代码:

{

  KillTimer

(1);

  this->OnOK();

}

  9.在MySample.Cpp中引入头文件

#include"Splash.h"

  在InitInstance()函数中加入代码:

BOOLCMySampleApp:

:

InitInstance()

{

  …

  AfxEnableControlContainer();

  CSplashsplash;

  splash.DoModal();

}

  至此,启动屏幕就Ok了!

VC++工程中加入SplashScreen

摘要

本文旨在剖析VC++工程中加入SplashScreen的原理,并给出在VC++MFC(exe)工程中加入SplashScreen的步骤。

关键字SplashScreen,原理

环境:

Windows98SE/2000,VC++6.0

SplashScreen-我们使用Word之类的软件在启动的短暂时间里就会看到它的身影。

它通常用以在程序启动时显示程序及用户名称,版权信息等。

我也不知道它准确的名称是什么(是闪屏吗?

),就这样称呼吧。

也许你也想在自己的工程里加入这样的特性,本文将以创建实际工程的方式逐步剖析其实现原理。

注意:

为避免实际所使用工程名给类或对象名带来的干扰,除非特别说明,在本文中将使用基类名如CWinApp、CMainFrame、CDialog来代替实际工程中的相应派生类名进行描述。

VisualC++是一个相当强大的C++开发工具,它内嵌了对SplashScreen的支持。

但是在MFCEXE类型工程中只是对带有主框架类的SDI或MDI工程提供了这一支持,基于对话框类的工程则被排除在外。

现在让我们开始吧。

第一步是在SDI工程中加入SplashScreen。

首先利用AppWizard生成一个SDI工程,除了其中DockingToolBar必须选择外(我认为这是MFC的一个Bug,当然这与本文讨论的SplashScreen没有关系),其他的文档-视图支持、状态条之类的都可以不要,这样可以尽量减少无用的代码。

通过IDE中的菜单Project->AddtoProject->ComponentsandControls,我们就可以从VisualC++Components中选择SplashScreen这个组件插入工程。

在点击了"Insert"后会弹出一个如下图所示的对话框,这是设置插入该工程中的SplashScreen的类名、显示用位图的ID及文件名,采用缺省值即可。

通过以上几步的操作,就会在工程目录下生成Splash.CPP和Splash.H文件,这便是CSplashWnd类的实现文件与头文件。

同时工程中CWinApp与CMainFrame类中的部分代码也会被修改,以实现CSplashWnd窗口的消息处理。

接着我们来看看CSplashWnd类的声明与主要的代码(已经过删减):

//类的声明

classCSplashWnd:

publicCWnd

{

  CSplashWnd();

  ~CSplashWnd();

  virtualvoidPostNcDestroy();

  staticvoidEnableSplashScreen(BOOLbEnable=TRUE);

  staticvoidShowSplashScreen(CWnd*pParentWnd=NULL);

  staticBOOLPreTranslateAppMessage(MSG*pMsg);

  BOOLCreate(CWnd*pParentWnd=NULL);

  voidHideSplashScreen();

  afx_msgintOnCreate(LPCREATESTRUCTlpCreateStruct);

  afx_msgvoidOnPaint();

  afx_msgvoidOnTimer(UINTnIDEvent);

  CBitmapm_bitmap;   //SplashScreen窗口显示用的位图对象

  staticBOOLc_bShowSplashWnd;//是否要显示SplashScreen的标志量

  staticCSplashWnd*c_pSplashWnd;

};

//是否使用SplashScreen

voidCSplashWnd:

:

EnableSplashScreen(BOOLbEnable)

{

  c_bShowSplashWnd=bEnable;

}

//创建CsplashWnd对象,并调用Create()创建窗口

voidCSplashWnd:

:

ShowSplashScreen(CWnd*pParentWnd)

{

  //如果不要显示SplashScreen或SplashWnd对象已经被创建则返回

  if(!

c_bShowSplashWnd||c_pSplashWnd!

=NULL)

    return;

  c_pSplashWnd=newCSplashWnd;

  if(!

c_pSplashWnd->Create(pParentWnd))

    deletec_pSplashWnd;

  else

    c_pSplashWnd->UpdateWindow();

}

//装入SplashScreen欲显示位图,通过CreateEx()激发OnCreate()完成窗口创建与设置

BOOLCSplashWnd:

:

Create(CWnd*pParentWnd)

{

  if(!

m_bitmap.LoadBitmap(IDB_SPLASH))

    returnFALSE;

  BITMAPbm;

  m_bitmap.GetBitmap(&bm);

  returnCreateEx(0,

      AfxRegisterWndClass(0,AfxGetApp()->LoadStandardCursor(IDC_ARROW)),

      NULL,

      WS_POPUP|WS_VISIBLE,

      0,

      0,

      bm.bmWidth,

      bm.bmHeight,

      pParentWnd->GetSafeHwnd(),

      NULL);

}

//销毁窗口,刷新框架

voidCSplashWnd:

:

HideSplashScreen()

{

  DestroyWindow();

  AfxGetMainWnd()->UpdateWindow();

}

//利用窗口创建结构创建窗口,并设置定时器在750ms后触发OnTimer()

intCSplashWnd:

:

OnCreate(LPCREATESTRUCTlpCreateStruct)

{

  if(CWnd:

:

OnCreate(lpCreateStruct)==-1)

    return-1;

  CenterWindow();//窗口居中显示

  SetTimer(1,750,NULL);//设置定时器

  return0;

}

//将键盘和鼠标消息传递给CSplashWnd对象,以销毁窗口

BOOLCSplashWnd:

:

PreTranslateAppMessage(MSG*pMsg)

{

  if(c_pSplashWnd==NULL)

    returnFALSE;

  if(pMsg->message==WM_KEYDOWN||

    pMsg->message==WM_SYSKEYDOWN||

    pMsg->message==WM_LBUTTONDOWN||

    pMsg->message==WM_RBUTTONDOWN||

    pMsg->message==WM_MBUTTONDOWN||

    pMsg->message==WM_NCLBUTTONDOWN||

    pMsg->message==W

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1