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()就基本用不上了,

以上是本人瞎玩,有错误或者说漏的地方,还请大家多多包涵。

 

你可能感兴趣的:(image)