mfc启动画面
目标
用一张位图来作为启动画面,在进入程序时显示。
策略
在应用程序类的I n i t I n s t a n c e ()函数中,在最早时刻创建启动窗口。启动窗口用一个位图类显示在普通窗口中。
步骤
1. 创建一个启动窗口类
1) 用ClassWizard创建一个从一般CWnd类(当然也可以是CFrameWnd类)派生的普通窗口类。如图所示:
2) 添加Create()成员函数到该类,在该函数中装入启动窗口中显示的位图,以及在屏幕中央创建该窗口。
void CWzdSplash::Create(UINT nBitmapID)
{
m_bitmap.LoadBitmap(nBitmapID);
BITMAP bitmap;
m_bitmap.GetBitmap(&bitmap);
int x=(::GetSystemMetrics(SM_CXSCREEN)-bitmap.bmWidth)/2;
int y=(::GetSystemMetrics(SM_CYSCREEN)-bitmap.bmHeight)/2;
CRect rect(x,y,x+bitmap.bmWidth,y+bitmap.bmHeight);
CreateEx(0,AfxRegisterWndClass(0),"",WS_POPUP|WS_VISIBLE|WS_BORDER,rect,NULL,0);
}
3) 用ClassWizard添加一个WM_PAINT消息处理函数到该窗口类中,在这里用BitBlt()把位图绘制到屏幕上。
void CWzdSplash::OnPaint()
{
CPaintDC dc(this); // device context for painting
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);
}
2.把启动窗口类插入到InitInstance()函数中
1) 在应用程序类的InitInstance()函数的开始处,创建该启动类的一个实例,调用它的Create(),并强制它进行绘制。
CWzdSplash wndSplash; //创建启动窗口类的实例
wndSplash.Create(IDB_BITMAP1);
wndSplash.UpdateWindow(); //send WM_PAINT
2) 因为启动窗口类创建在堆栈中,一旦InitInstance()返回,该窗口将被自动销毁,因此,如果应用程序花费大量时间进行初始化,则不必采用在应用程序中加延时的方法,使启动窗口停留足够长的时间以确保读取显示的信息;如果应用程序花费很少时间进行初始化,或者担心高速机器把启动窗口变成影像,添加下面代码行到InitInstance( )的某个地方以对应用程序进行延时处理。
// add if splash screen too short
Sleep(2000);
至此,一个具有启动画面的小程序完成了,大家可以试试看它的运行效果。
mfc启动画面的更多相关文章
- MFC之窗体改动工具栏编程状态栏编程程序启动画面
1窗体外观的改动 (1)改动在CMainFrame::preCreateWindow(CREATESTRUCT& cs) 改动标题:cs.style&=FWS_ADDTOTITLE; ...
- mfc为对话框添加启动画面
新建CwzdSplash类 CwzdSplash.h #pragma once class CWzdSplash : public CWnd { DECLARE_DYNAMIC(CWzdSplash) ...
- 【VC编程技巧】窗口☞3.5对单文档或者多文档程序制作启动画面
(一)概要: 文章描写叙述了如何通过Visual C++ 2012或者Visual C++ .NET,为单文档或者多文档程序制作启动画面.在Microsoft Visual Studio 6.0中对于 ...
- 为你的Web程序加个启动画面
.Net开发者一定熟悉下面这个画面: 这就是宇宙第一IDE Visual Studio的启动画面,学名叫Splash Screen(或者Splash Window).同样,Javar们一定对Eclip ...
- android 之 启动画面的两种方法
现在,当我们打开任意的一个app时,其中的大部分都会显示一个启动界面,展示本公司的logo和当前的版本,有的则直接把广告放到了上面.启动画面的可以分为两种设置方式:一种是两个Activity实现,和一 ...
- Cordova应用程序修改启动画面或者Icon
1) 制作启动画面图片或icon ionic resources //同时生成icon和splash ionic resources --icon //只生成icon ionic resources ...
- iOS7的启动画面设置及asset catalogs简介
如果上网搜索一下“iOS App图标设置”或者“iOS App启动画面设置”肯定能找到不少文章,但内容大多雷同,就是让你按照某种尺寸制作若干张png图片,再按照苹果的命名规范,加入到项目中去,一行代码 ...
- iOS 启动画面 代码自定义
先来看一个可能会遇到的问题: 如果你已经删除了xcode为你的项目自动生成的LaunchScreen.storyboard, 然后你在测试你的app的时候发现,屏幕里出现了黑色的区域,如上图(画红线的 ...
- Qt5 程序启动画面动图效果
2333终于实现动图,先弄了一个窗口去掉标题栏假装就是启动画面了,还是那只萌萌的猫这次会动了! 基类用的是QWidget 类名称MainView #ifndef MAINVIEW_H #define ...
随机推荐
- 技术大牛是如何拿到国内IT巨头offer的?
关键字:技术大牛是如何拿到国内IT巨头offer的? 不是技术牛人,如何拿到国内IT巨头的Offer 不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕敬仰.看看这些牛人, ...
- python redis模块的常见的几个类 Redis 、StricRedis和ConnectionPool
日常写代码过程中,经常需要连接redis进行操作.下面我就介绍下python操作redis模块redis中的几个常见类,包括redis连接池. 一.StrictRedis 类 请看代码:. #!/us ...
- C++堆栈问题
编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配. 解答: (1)代码如下 (2)堆栈分配内存的介绍 一.一个经过编译的C/C++的程序占用的内存分成以下几个部分:1.栈区(stack ...
- Msys+MinGW编译VLC
说明:本文只是对官方文档进行简单的翻译总结,旨在帮助一些英文不太好的朋友.官方文档请见wiki.videolan.org/Win32CompileMSYSNew. Msys是MinGW的一个辅助工 ...
- QQ connect client request's parameters are invalid, invalid openid 问题的解决
很多人的这个问题是POST的时候发生,我的也恰好在POST的时候发生.后来我发现可能是因为QQ的这个后端是采用类PHP的语言开发,在动态语言的获取参数时POST参数和GET参数是可以分开读取的,也就是 ...
- Django1.8文档阅读手记
主要集中在新特性上. Django1.8好像开始推荐使用python3 Django的QuerySet是延迟加载的,这个文档里面一般会明言,通过Connection SQL显示测试,外键对象也是延迟加 ...
- css那些事(一)
一.内边框padding和外边框margin属性缩写 内外边框有四个属性:padding-top,padding-right,padding-bottom,padding-left;margin-to ...
- Spring4托管Hibernate5并利用HibernateTemplate进行数据库操作
时隔半年,再次发布配置类的相关Blog,因为左手受伤原因先做一个简述. 首先利用idea创建一个Spring+SpringMVC+Hibernate项目,注意的是因为我们要完全放弃Hibernate以 ...
- Effective C++ 读书笔记(46-50)
条款四十六:需要类型转换时请为模板定义非成员函数 条款四十七:请使用traits classes 表现类型信息 1.整合重载技术后,traits classes 有可能在编译期对类型执行if...el ...
- 软件及博客的markdown支持度的评测
软件 vscode vscode原生支持markdown,但对数学公式的支持不太好,用 $$包含的数学公式不支持换行,而且在数学公式里面不能输入中文 Typora 非常简洁优美的软件,只有预览页,没有 ...