给VS2008/VS2010 MFC项目添加启动画面
在VC6.0时代,我们通过在MFC工程中插入Splash组件来简单方便的实现这个功能,但在VS2008以后就没有了这个功能,所以如果想给自己的程序添加一个显示Logo的启动画面,就需要自己添加代码来实现,参考了下VC6.0中这个Splash组件添加后的代码,就很容易在自己的项目里实现这个功能。如下图。
首先,在菜单的“项目”中选择“类向导”,生成一个启动画面的Splash类。
然后,实现代码主要是在CwzdSplash类的头文件和cpp文件中实现。在CwzdSplash类的头文件中我们添加下面的代码:
view plaincopy to clipboardprint?
01.#pragma once
02.// CWzdSplash
03.class CWzdSplash : public CWnd
04.{
05. DECLARE_DYNAMIC(CWzdSplash)
06.public:
07. CWzdSplash();
08. virtual ~CWzdSplash();
09.protected:
10. DECLARE_MESSAGE_MAP()
11.public:
12. CBitmap m_bitmap;
13.// void Create(void);
14. void Create(UINT nBitmapID);
15. afx_msg void OnPaint();
16. afx_msg void OnTimer(UINT_PTR nIDEvent);
17.};
在CwzdSplash类的cpp文件中我们添加下面的代码:
view plaincopy to clipboardprint?
01.// WzdSplash.cpp : 实现文件
02.//
03.#include "stdafx.h"
04.#include "TinyPlusCompiler.h"
05.#include "WzdSplash.h"
06.// CWzdSplash
07.IMPLEMENT_DYNAMIC(CWzdSplash, CWnd)
08. CWzdSplash::CWzdSplash()
09.{
10.}
11.CWzdSplash::~CWzdSplash()
12.{
13.}
14.BEGIN_MESSAGE_MAP(CWzdSplash, CWnd)
15. ON_WM_PAINT()
16. ON_WM_TIMER()
17.END_MESSAGE_MAP()
18.// CWzdSplash 消息处理程序
19.void CWzdSplash::Create(UINT nBitmapID)
20.{
21. m_bitmap.LoadBitmap(nBitmapID);
22. BITMAP bitmap;
23. m_bitmap.GetBitmap(&bitmap);
24. //CreateEx(0,AfxRegisterWndClass(0),"",WS_POPUP|WS_VISIBLE|WS_BORDER,0,0,bitmap.bmWidth,bitmap.bmHeight,NULL,0);
25. CreateEx(0,
26. AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)),
27. NULL, WS_POPUP | WS_VISIBLE, 0, 0, bitmap.bmWidth, bitmap.bmHeight, NULL , NULL);
28.}
29.void CWzdSplash::OnPaint()
30.{
31. // TODO: 在此处添加消息处理程序代码
32. // 不为绘图消息调用 CWnd::OnPaint()
33. CPaintDC dc(this); // device context forpainting
34. BITMAP bitmap;
35. m_bitmap.GetBitmap(&bitmap);
36. CDC dcComp;
37. dcComp.CreateCompatibleDC(&dc);
38. dcComp.SelectObject(&m_bitmap);
39. // draw bitmap
40. dc.BitBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,&dcComp,0,0,SRCCOPY);
41.}
42.void CWzdSplash::OnTimer(UINT_PTR nIDEvent)
43.{
44. // TODO: 在此添加消息处理程序代码和/或调用默认值
45. //CWnd::OnTimer(nIDEvent);
46. DestroyWindow(); //销毁初始画面窗口
47.}
最后在项目的主窗口视图的Create函数中添加下面的实例化过程就可以显示出我们自定义的Logo启动画面了:
view plaincopy to clipboardprint?
01.///////////////显示Splash,2010-10-15///////////////////////////////////
02. CWzdSplash wndSplash; //创建启动窗口类的实例
03.wndSplash.Create(IDB_SPLASH);
04.wndSplash.CenterWindow();
05.wndSplash.UpdateWindow(); //send WM_PAINT
06.Sleep(1500);
07.wndSplash.DestroyWindow();//销毁初始画面窗口
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/libenqing/archive/2010/10/24/5961991.aspx