MFC设置启动画面

来源:互联网 发布:考研网络视频 编辑:程序博客网 时间:2024/04/29 04:48
首先,在菜单的“项目”中选择“类向导”,生成一个启动画面的Splash类。


 

然后,实现代码主要是在CwzdSplash类的头文件和cpp文件中实现。在CwzdSplash类的头文件中我们添加下面的代码:

 

[cpp] view plaincopy
  1. #pragma once  
  2. // CWzdSplash  
  3. class CWzdSplash : public CWnd  
  4. {  
  5.     DECLARE_DYNAMIC(CWzdSplash)  
  6. public:  
  7.     CWzdSplash();  
  8.     virtual ~CWzdSplash();  
  9. 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文件中我们添加下面的代码:


[cpp] view plaincopy
  1. // WzdSplash.cpp : 实现文件  
  2. //  
  3. #include "stdafx.h"  
  4. #include "TinyPlusCompiler.h"  
  5. #include "WzdSplash.h"  
  6. // CWzdSplash  
  7. IMPLEMENT_DYNAMIC(CWzdSplash, CWnd)  
  8.     CWzdSplash::CWzdSplash()  
  9. {  
  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启动画面了:

 

[c-sharp] view plaincopy
  1. ///////////////显示Splash,2010-10-15///////////////////////////////////  
  2.        CWzdSplash wndSplash;                 //创建启动窗口类的实例  
  3. wndSplash.Create(IDB_SPLASH);  
  4. wndSplash.CenterWindow();  
  5. wndSplash.UpdateWindow();          //send WM_PAINT  
  6. Sleep(1500);  
  7. wndSplash.DestroyWindow();//销毁初始画面窗口  



注明一下要注意的地方:wndSplash.Create(IDB_SPLASH);中的IDB_SPLASH是在添加位图资源时添加进来的资源ID,自己可以定义自己所喜欢的启动图画。


如果不使用Sleep()函数让线程休眠几秒,我们很难看到这个启动画面,但这样存在一个问题,让线程休眠不是一个好的办法,感觉应该用定时器去实现这功能的,但不是很熟悉定时器的使用,研究一下再把它改过来。

0 0
原创粉丝点击