首页 > 代码库 > MFC添加启动画面与CImage结合版
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()就基本用不上了,
以上是本人瞎玩,有错误或者说漏的地方,还请大家多多包涵。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。