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

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

 

posted @ 2014-08-17 00:15  学需持  阅读(748)  评论(0编辑  收藏  举报