日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC++ 轻松实现“闪屏” SplashWnd

發布時間:2024/6/21 c/c++ 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC++ 轻松实现“闪屏” SplashWnd 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  我們平時使用的好多軟件在運行啟動時都會有一個“閃屏”畫面顯示,一般用于標識軟件的一些信息,如軟件版本名稱、公司等,通過查找資料發現,其實實現起來很簡單,一個類就能搞定!

SplashWnd.h?

C++ Code?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
? #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?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
? //?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?
1
2
3
4
? CCommandLineInfo?cmdInfo;
ParseCommandLine(cmdInfo);
//?add?EnableSplashScreen
CSplashWnd::EnableSplashScreen(cmdInfo.m_bShowSplash);

  在應用程序主框架窗口OnCreate中返回之前添加代碼:

C++ Code?
1
2
? //?Show?Splash?Window?
CSplashWnd::ShowSplashScreen(this);??

轉載于:https://www.cnblogs.com/MakeView660/p/6915975.html

總結

以上是生活随笔為你收集整理的VC++ 轻松实现“闪屏” SplashWnd的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。