MFC添加启动画面与CImage结合版
最近做一个启动画面,发现Splash只能加载bitmap,发现bitmap图片效果不太好,所以找了下在C++中有什么可以加载PNG或者JPG等类型的图片,在网上找半天后,发现CImage这个类相当好用,而且还可以和CBitmap相互转换,这样我只要修改一小段代码,就可以实现用位图以外的图片来做启动画面了,在找图片的时候也不这么麻烦,因为CImage基本支持多种图片格式,很好用。详细可以自行百度哦。下面附上代码。
1.在工程中添加C++类,CWzdSplash。基类是CWnd
添加代码:
#ifndef _SPLASH_SCRN_ #define _SPLASH_SCRN_ #pragma once // CWzdSplash class CWzdSplash : public CWnd { DECLARE_DYNAMIC(CWzdSplash) public: CWzdSplash(); virtual ~CWzdSplash(); protected: DECLARE_MESSAGE_MAP() public: CBitmap m_bitmap; // void Create(void); void Create(HBITMAP hbitmap); afx_msg void OnPaint(); }; #endif
CPP
// WzdSplash.cpp : 实现文件 // #include "stdafx.h" #include "test1.h" #include "CwzdSplash.h" // CWzdSplash IMPLEMENT_DYNAMIC(CWzdSplash, CWnd) CWzdSplash::CWzdSplash() { } CWzdSplash::~CWzdSplash() { } BEGIN_MESSAGE_MAP(CWzdSplash, CWnd) ON_WM_PAINT() END_MESSAGE_MAP() // CWzdSplash 消息处理程序 void CWzdSplash::Create(HBITMAP hbitmap) { //m_bitmap.LoadBitmap(nBitmapID); BITMAP bitmap; m_bitmap.Attach(hbitmap); m_bitmap.GetBitmap(&bitmap); //CreateEx(0,AfxRegisterWndClass(0),"",WS_POPUP|WS_VISIBLE|WS_BORDER,0,0,bitmap.bmWidth,bitmap.bmHeight,NULL,0); CreateEx(0, AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)), NULL, WS_POPUP | WS_VISIBLE, 0, 0, bitmap.bmWidth, bitmap.bmHeight, NULL, NULL); CWnd::CenterWindow(); CWnd::UpdateWindow(); } void CWzdSplash::OnPaint() { // TODO: 在此处添加消息处理程序代码 // 不为绘图消息调用 CWnd::OnPaint() CPaintDC dc(this); // device context forpainting BITMAP bitmap; m_bitmap.GetBitmap(&bitmap); CDC dcComp; dcComp.CreateCompatibleDC(&dc); dcComp.SelectObject(&m_bitmap); // draw bitmap dc.BitBlt(0, 0, bitmap.bmWidth, bitmap.bmHeight, &dcComp, 0, 0, SRCCOPY); }
接下来,在OnCreat()函数中添加:
CImage image; image.Load(_T("res/222.jpg")); HBITMAP hbitmap = image.Detach(); //image转换成bitmap CWzdSplash wndSplash; //创建启动窗口类的实例 wndSplash.Create(hbitmap); Sleep(1500); wndSplash.DestroyWindow();//销毁初始画面窗口
这个就大功告成了。
这类splash我减去了OnTime()函数,因为我发现多了也用不上,毕竟是我收到添加的代码,
并且为了让画面出来的效果好些,用了Sleep()函数让对话框睡眠,所以OnTime()就基本用不上了,
以上是本人瞎玩,有错误或者说漏的地方,还请大家多多包涵。