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 ...
随机推荐
- Java 学习资料整理
Java 学习资料整理 Java 精品学习视频教程下载汇总 Java视频教程 孙鑫Java无难事 (全12CD) Java视频教程 即学即会java 上海交大 Java初级编程基础 共25讲下载 av ...
- zookeeper 分布式管理
分布式框架: Zookeeper与paxos算法 一. zookeeper是什么 官方说辞:Zookeeper 分布式服务框架是Apache Hadoop 的一个子项目,它主要是 ...
- 一款C++写的tcp性能测试(压力测试)工具
基线终于开发完了,自己写的服务器性能和压力承受能力到底怎么样,在网上没有找到合适的测试工具可以用.于是自己基于MFC写了一款测试工具. 启动界面如下: 设置参数后,运行如下: 运行完界面如下: 源码路 ...
- jdk的配置
在新建页面系统变量,输入变量名"JAVA_HOME":变量值"你的jdk的路径 在系统变量区域,选择"新建",输入变量名"CLASSPATH ...
- 三级菜单python写法(递归写法)
数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, ...
- 并发编程(十):AQS
AQS全称为AbstractQueuedSynchronizer,是并发容器中的同步器,AQS是J.U.C的核心,它是抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类都 ...
- The more,the better。
贪婪是好的, 贪婪是对的, 贪婪是有用的, 贪婪是可以清理一切的, 贪婪是不断进化和进步的精华所在, 贪婪就是一切形式所在: 对于生活,对于爱情,对于知识我们一定要贪婪, 贪婪就是人们的动力. The ...
- 洛谷 P1490 解题报告
P1490 买蛋糕 题目描述 野猫过生日,大家当然会送礼物了(咳咳,没送礼物的同志注意了哈!!),由于不知道送什么好,又考虑到实用性等其他问题,大家决定合伙给野猫买一个生日蛋糕.大家不知道最后要买的蛋 ...
- display的属性值测试
由于在学习CSS的display的属性值只针对block.inline.inline-block和flex进行过了解,并且自己观察得知列表中li的display属性是list-item,而想要触发BF ...
- .net Core 微服务框架 surging 使用
surging 是一个分布式微服务框架,提供高性能RPC远程服务调用,采用Zookeeper.Consul作为surging服务的注册中心, 集成了哈希,随机,轮询作为负载均衡的算法,RPC集成采用的 ...