VS2012中,为MFC程序添加启…

2024-06-04 18:58
文章标签 程序 mfc vs2012

本文主要是介绍VS2012中,为MFC程序添加启…,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址:VS2012中,为MFC程序添加启动画面 作者:李小潴_MrJ
本文是读者在学习孙鑫的《VC++深入详解》时,对一些在VS2012与VC6.0不同地方,需要修改的代码进行整理得到的。
在VC6.0时代,我们通过在MFC工程中插入Splash组件来简单方便的实现这个功能,但在VS2012没有这个功能,所以如果想给自己的程序添加一个显示Logo的启动画面,就需要自己添加代码来实现,参考了下VC6.0中这个Splash组件添加后的代码,就很容易在自己的项目里实现这个功能。
首先,在菜单的“项目”中选择“类向导”,“添加类”,生成一个启动画面的Splash类。
[转载]VS2012中,为MFC程序添加启动画面
[转载]VS2012中,为MFC程序添加启动画面

然后,实现代码主要是在CSplashWnd类的头文件和源文件中实现。在 CSplashWnd 类的头文件中我们添加下面的代码:
#pragma once
#include "afxwin.h"

class CSplashWnd :
 public CWnd
{
public:
 CSplashWnd(void);
 ~CSplashWnd(void);
 CBitmap m_bitmap;
 static void ShowSplashScreen(CWnd* pParentWnd = NULL);
protected:
 BOOL Create(CWnd* pParentWnd = NULL); 
 static CSplashWnd* c_pSplashWnd;
public:
 DECLARE_MESSAGE_MAP()
 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
 afx_msg void OnPaint();
 afx_msg void OnTimer(UINT_PTR nIDEvent);
};



CSplashWnd类的源文件中我们添加下面的代码:
#include "stdafx.h"
#include "SplashWnd.h"
#include "resource.h"

CSplashWnd* CSplashWnd::c_pSplashWnd;

BEGIN_MESSAGE_MAP(CSplashWnd, CWnd)
 ON_WM_CREATE()
 ON_WM_PAINT()
 ON_WM_TIMER()
END_MESSAGE_MAP()

CSplashWnd::CSplashWnd(void)
{
}

CSplashWnd::~CSplashWnd(void)
{
}

void CSplashWnd::ShowSplashScreen(CWnd* pParentWnd)
{
 c_pSplashWnd = new CSplashWnd;
 if (!c_pSplashWnd->Create(pParentWnd))
  delete c_pSplashWnd;
 else
  c_pSplashWnd->UpdateWindow();
}

BOOL CSplashWnd::Create(CWnd* pParentWnd)
{
 if (!m_bitmap.LoadBitmap(IDB_BITMAP1))
  return FALSE;

 BITMAP bm;
 m_bitmap.GetBitmap(&bm);

 return CreateEx(0,
  AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)),
  NULL, WS_POPUP | WS_VISIBLE, 0, 0, bm.bmWidth, bm.bmHeight, pParentWnd->GetSafeHwnd(), NULL);
 return 0;
}

int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CWnd::OnCreate(lpCreateStruct) == -1)
  return -1;

 // TODO:  在此添加您专用的创建代码
 // Center the window.
 CenterWindow();

 // Set a timer to destroy the splash screen.
 SetTimer(1, 3000, NULL);    

 return 0;
}

void CSplashWnd::OnPaint()
{
 CPaintDC dc(this); // device context for painting
 // TODO: 在此处添加消息处理程序代码
 // 不为绘图消息调用 CWnd::OnPaint()
 CDC dcImage;
 if (!dcImage.CreateCompatibleDC(&dc))
  return;

 BITMAP bm;
 m_bitmap.GetBitmap(&bm);

 // Paint the image.
 CBitmap* pOldBitmap = dcImage.SelectObject(&m_bitmap);
 dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcImage, 0, 0, SRCCOPY);
 dcImage.SelectObject(pOldBitmap);
}

void CSplashWnd::OnTimer(UINT_PTR nIDEvent)
{
 // TODO: 在此添加消息处理程序代码和/或调用默认值
 DestroyWindow();
 AfxGetMainWnd()->UpdateWindow();

 CWnd::OnTimer(nIDEvent);
}

使用方法: 
再app和mainFram对应的cpp文件中包含头文件SplashWnd.h,需 在MFC工程中的CMainFrame类中添加消息OnCreate,并在函数定义中添加语句CSplashWnd::ShowSplashScreen(this); 同时把位图资源添加进去,并设置好logo消隐时间即可。

这篇关于VS2012中,为MFC程序添加启…的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1030844

相关文章

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

一道经典Python程序样例带你飞速掌握Python的字典和列表

Python中的列表(list)和字典(dict)是两种常用的数据结构,它们在数据组织和存储方面有很大的不同。 列表(List) 列表是Python中的一种有序集合,可以随时添加和删除其中的元素。列表中的元素可以是任何数据类型,包括数字、字符串、其他列表等。列表使用方括号[]表示,元素之间用逗号,分隔。 定义和使用 # 定义一个列表 fruits = ['apple', 'banana

美容美发店营销版微信小程序源码

打造线上生意新篇章 一、引言:微信小程序,开启美容美发行业新纪元 在数字化时代,微信小程序以其便捷、高效的特点,成为了美容美发行业营销的新宠。本文将带您深入了解美容美发营销微信小程序,探讨其独特优势及如何助力商家实现业务增长。 二、微信小程序:美容美发行业的得力助手 拓宽客源渠道:微信小程序基于微信社交平台,轻松实现线上线下融合,帮助商家快速吸引潜在客户,拓宽客源渠道。 提升用户体验:

程序人生--拔丝地瓜

一个会享受生活的人,难免会执迷于探索“三餐茶饭,四季衣裳”的朴素涵义。如今在这繁杂喧闹、竞争激烈的社会环境里,如何才能从周而复始的生活中挖掘出一点儿期待!这是一个仁者见仁智者见智的开放性话题。对于大部分的人来说,看电影、运动、旅游、美食、加班....是假日的备选安排。 春节临走之前,再次尝试“拔丝地瓜”,为何要强调“再次”二字?因为这道甜菜我已经尝试过很多次,失败与成功都经历过。十几年的烧饭经历

VS2012加载失败

1、通过命令提示行工具进入VS安装目录下的Common7\IDE 2、执行devenv.exe /setup /resetuserdata /resetsettings 3、重启VS

vscode python pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

在vscode中控制台运行python文件出现:无法将"pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 使用vscode开发python,需要安装python开发扩展: 本文已经安装,我们需要找的是python安装所在目录,本文实际路径如下: 如果在本文路径中没有此目录,请尝试在C盘中搜索 python,搜索到相关python目录后,点击Python 3.9进入目录,

2_为MFC程序添加菜单

在MFC中添加菜单栏 1,双击资源文件,显示资源视图,点击Menu插入Menu菜单,编辑菜单的ID,自己取名字。 2,点击“请在此处键入”添加菜单选项,输入&E,E的下面就会产生下划线;在产生的弹出菜单中继续编辑,并且可以添加事件处理函数; 在弹出菜单的任意位置,鼠标右键,弹出的菜单中选择“插入分隔符”,即可产生分隔符 3,在你设计的Dialog窗口的属性栏,选择Menu后面的

在Ubuntu 14.04上安装和配置SNMP守护程序和客户端的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 介绍 作为系统管理员的重要工作之一是收集关于服务器和基础设施的准确信息。有许多工具和选项可用于收集和处理这种类型的信息。其中许多工具都是建立在一种叫做 SNMP 的技术之上。 SNMP 代表简单网络管理协议。它是服务器可以共享关于其当前状态的信息的一种方式,也是管理员可以修改预定义值的通道。虽

第一个PSpice程序

环境cadence 16.6 PSpice A/D PSpice程序开发已经逐渐淡出我们的视线,可是却不能忽视其对电子设计开发的重大作用,在学习的过程中偶然看到PSpice应用,却全部是图形输入,而怀着想知道为什么的好奇心,找遍图书馆唯一一本的PSpice程序设计与仿真的书(虽然也有英文的,但是好几本书,等需要时再看了)终于还是被我找到,经过不断的努力,加上偶然的原因终于成功运行了。 步骤: