小标
2018-09-04
来源 :
阅读 1339
评论 0
摘要:本文主要向大家介绍了VC编程之VC++ 轻松实现“闪屏” SplashWnd,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。
本文主要向大家介绍了VC编程之VC++ 轻松实现“闪屏” SplashWnd,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。
我们平时使用的好多软件在运行启动时都会有一个“闪屏”画面显示,一般用于标识软件的一些信息,如软件版本名称、公司等,通过查找资料发现,其实实现起来很简单,一个类就能搞定!
SplashWnd.h
C++ Code
#if !defined(AFX_SPLASHWND_H__18C1CB0F_1CFF_483B_872E_E5A78BC1239E__INCLUDED_)
#define AFX_SPLASHWND_H__18C1CB0F_1CFF_483B_872E_E5A78BC1239E__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// SplashWnd.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CSplashWnd window
class CSplashWnd : public CWnd
{
DECLARE_DYNAMIC(CSplashWnd)
public:
CSplashWnd();
virtual ~CSplashWnd();
protected:
virtual void PostNcDestroy();
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnTimer(UINT_PTR nIDEvent);
afx_msg void OnPaint();
BOOL Create(CWnd* pParentWnd=NULL);
void HideSplashScreen(void);
DECLARE_MESSAGE_MAP()
protected:
CBitmap m_bitmap;
static CSplashWnd* c_pSplashWnd;
static BOOL c_bShowSplashWnd;
public:
static void EnableSplashScreen(BOOL bEnable=TRUE);
static void ShowSplashScreen(CWnd* pParentWnd=NULL);
static BOOL PreTranslateAppMessage(MSG* pMsg);
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_SPLASHWND_H__18C1CB0F_1CFF_483B_872E_E5A78BC1239E__INCLUDED_)
SplashWnd.cpp
C++ Code
// SplashWnd.cpp : implementation file
//
#include "stdafx.h"
#include "SplashWnd.h"
#include "resource.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSplashWnd
CSplashWnd* CSplashWnd::c_pSplashWnd;
BOOL CSplashWnd::c_bShowSplashWnd;
IMPLEMENT_DYNAMIC(CSplashWnd, CWnd)
CSplashWnd::CSplashWnd()
{
}
CSplashWnd::~CSplashWnd()
{
ASSERT(c_pSplashWnd == this);
c_pSplashWnd = NULL;
}
BEGIN_MESSAGE_MAP(CSplashWnd, CWnd)
ON_WM_CREATE()
ON_WM_TIMER()
ON_WM_PAINT()
END_MESSAGE_MAP()
// CSplashWnd Message handler
void CSplashWnd::EnableSplashScreen(BOOL bEnable)
{
c_bShowSplashWnd = bEnable;
}
void CSplashWnd::ShowSplashScreen(CWnd* pParentWnd)
{
if ( !c_bShowSplashWnd || c_pSplashWnd != NULL )
{
return;
}
c_pSplashWnd = new CSplashWnd;
if ( !c_pSplashWnd->Create(pParentWnd) )
{
delete c_pSplashWnd;
}
else
{
c_pSplashWnd->UpdateWindow();
}
}
BOOL CSplashWnd::PreTranslateAppMessage(MSG* pMsg)
{
if ( c_pSplashWnd == NULL )
{
return FALSE;
}
if ( pMsg->message == WM_KEYDOWN
|| pMsg->message == WM_SYSKEYDOWN
|| pMsg->message == WM_LBUTTONDOWN
|| pMsg->message == WM_RBUTTONDOWN
|| pMsg->message == WM_MBUTTONDOWN
|| pMsg->message == WM_NCLBUTTONDOWN
|| pMsg->message == WM_NCRBUTTONDOWN
|| pMsg->message == WM_NCMBUTTONDOWN)
{
c_pSplashWnd->HideSplashScreen();
return TRUE;
}
return FALSE;
}
void CSplashWnd::PostNcDestroy()
{
delete this;
}
int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if ( CWnd::OnCreate(lpCreateStruct) == -1 )
{
return -1;
}
CenterWindow();
SetTimer(1, 3000, NULL);
return 0;
}
void CSplashWnd::OnTimer(UINT_PTR nIDEvent)
{
if ( nIDEvent == 1 )
{
HideSplashScreen();
}
}
void CSplashWnd::OnPaint()
{
CPaintDC dc(this);
CDC dcImg;
if ( !dcImg.CreateCompatibleDC(&dc) )
{
return;
}
BITMAP bm;
m_bitmap.GetBitmap(&bm);
CBitmap* pOldBit = dcImg.SelectObject(&m_bitmap);
dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcImg, 0, 0, SRCCOPY);
dcImg.SelectObject(pOldBit);
}
BOOL CSplashWnd::Create(CWnd* pParentWnd)
{
if ( !m_bitmap.LoadBitmap(IDB_BITMAP_SPLASH) )
{
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);
}
void CSplashWnd::HideSplashScreen()
{
DestroyWindow();
AfxGetMainWnd()->UpdateWindow();
}
在应用程序类的InitInstance中添加代码:
C++ Code
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// add EnableSplashScreen
CSplashWnd::EnableSplashScreen(cmdInfo.m_bShowSplash);
在应用程序主框架窗口OnCreate中返回之前添加代码:
C++ Code
// Show Splash Window
CSplashWnd::ShowSplashScreen(this);
希望大家能把自己的所学和他人一起分享,不要去鄙视别人索取时的贪婪,因为最应该被鄙视的是不肯分享时的吝啬。
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言VC/MFC频道!
喜欢 | 1
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号