//=======================================================//
//题目:WINCE应用层设计经验总结-关于程序启动LOGO显示问题
//描述:程序启动LOGO显示实现
//环境:EVC4.0(VS2005上也是相同实现方法)+wince5.0 standard sdk
//作者:Mercury
//时间:2008-07-18
//========================================================//
程序下载
正文:
这个问题去年已经解决。一直拖着没写总结。今天群里有个兄弟问道了。整理了下。
其实真的是没什么东西。主要是个思想。VC6.0下直接SPLASH就OK了。。
但是VS2005下没有 EVC下我没仔细看。也不想去找那个控件顺便就移植过来了。
步骤如下:
0.新建一个工程,加入一个对话框命名为LOGO
1.给新建的对话框建立一个类叫CLogo
2.给这个类重写一个OnInitDialog,用于全屏显示,这里也可以不用全屏,看个人爱好,如果不想全屏这个步骤跳过,如果想全屏就继续下面的代码
BOOL CLogo::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
//======================界面处理==============================//
//add by mercury xu 20080718
int cx, cy;
cx = GetSystemMetrics(SM_CXSCREEN);//获取屏幕的水平尺寸
cy = GetSystemMetrics(SM_CYSCREEN);//获取屏幕的垂直尺寸
SetWindowPos(&wndTopMost, 0, 0, cx, cy, SWP_SHOWWINDOW);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
3.保存调试下,然后回到class CxxxxApp : public CWinApp这里,我的叫class CLogoShowApp : public CWinApp。然后为这个类添加一个函数,函数叫IdleSleep
当然名字可以随便你高兴,但是这个英文的意思更好理解这个函数的内容。
接下来我们实现他:
/
//函数名:IdleSleep
//功能:显示logo延时
//参数:DWORD dwTime, HWND hWnd
//返回:无
//Author:Mercury Xu
//Date:2008-07-18
/
void CLogoShowApp::IdleSleep(DWORD dwTime, HWND hWnd)
{
MSG msg;
DWORD Tstart,Time;
BOOL logoShow;
Tstart = GetTickCount();
for(;;)
{
logoShow = PeekMessage(&msg,hWnd,NULL,NULL,PM_REMOVE);
if(logoShow)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
Time = GetTickCount();
if(Time-Tstart>=dwTime)
return;
Sleep(1);
}
}
}
延时函数。
4.到BOOL CxxxxApp::InitInstance()我的是BOOL CLogoShowApp::InitInstance()
下。调用先前创建的LOGO对话框。
//=============================================
CLogo* showLogo;
showLogo = new CLogo;
showLogo->Create(CLogo::IDD);
showLogo->ShowWindow(SW_SHOW);
IdleSleep(3000,NULL);
showLogo->DestroyWindow();
delete showLogo;
//=============================================
这段加载在 CLogoShowDlg dlg;上面,应为你要先显示LOGO啊。所以很简单。
5.接下来编译下。。。如果你没加这个#include "Logo.h"。。麻烦你加下。就是刚才你创建对话框类的头文件。当然要include下。
6.编译下再看看吧。应该通过了。
如果还是有问题可以参考我上传资源里的代码。
//题目:WINCE应用层设计经验总结-关于程序启动LOGO显示问题
//描述:程序启动LOGO显示实现
//环境:EVC4.0(VS2005上也是相同实现方法)+wince5.0 standard sdk
//作者:Mercury
//时间:2008-07-18
//========================================================//
程序下载
正文:
这个问题去年已经解决。一直拖着没写总结。今天群里有个兄弟问道了。整理了下。
其实真的是没什么东西。主要是个思想。VC6.0下直接SPLASH就OK了。。
但是VS2005下没有 EVC下我没仔细看。也不想去找那个控件顺便就移植过来了。
步骤如下:
0.新建一个工程,加入一个对话框命名为LOGO
1.给新建的对话框建立一个类叫CLogo
2.给这个类重写一个OnInitDialog,用于全屏显示,这里也可以不用全屏,看个人爱好,如果不想全屏这个步骤跳过,如果想全屏就继续下面的代码
BOOL CLogo::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
//======================界面处理==============================//
//add by mercury xu 20080718
int cx, cy;
cx = GetSystemMetrics(SM_CXSCREEN);//获取屏幕的水平尺寸
cy = GetSystemMetrics(SM_CYSCREEN);//获取屏幕的垂直尺寸
SetWindowPos(&wndTopMost, 0, 0, cx, cy, SWP_SHOWWINDOW);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
3.保存调试下,然后回到class CxxxxApp : public CWinApp这里,我的叫class CLogoShowApp : public CWinApp。然后为这个类添加一个函数,函数叫IdleSleep
当然名字可以随便你高兴,但是这个英文的意思更好理解这个函数的内容。
接下来我们实现他:
/
//函数名:IdleSleep
//功能:显示logo延时
//参数:DWORD dwTime, HWND hWnd
//返回:无
//Author:Mercury Xu
//Date:2008-07-18
/
void CLogoShowApp::IdleSleep(DWORD dwTime, HWND hWnd)
{
MSG msg;
DWORD Tstart,Time;
BOOL logoShow;
Tstart = GetTickCount();
for(;;)
{
logoShow = PeekMessage(&msg,hWnd,NULL,NULL,PM_REMOVE);
if(logoShow)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
Time = GetTickCount();
if(Time-Tstart>=dwTime)
return;
Sleep(1);
}
}
}
延时函数。
4.到BOOL CxxxxApp::InitInstance()我的是BOOL CLogoShowApp::InitInstance()
下。调用先前创建的LOGO对话框。
//=============================================
CLogo* showLogo;
showLogo = new CLogo;
showLogo->Create(CLogo::IDD);
showLogo->ShowWindow(SW_SHOW);
IdleSleep(3000,NULL);
showLogo->DestroyWindow();
delete showLogo;
//=============================================
这段加载在 CLogoShowDlg dlg;上面,应为你要先显示LOGO啊。所以很简单。
5.接下来编译下。。。如果你没加这个#include "Logo.h"。。麻烦你加下。就是刚才你创建对话框类的头文件。当然要include下。
6.编译下再看看吧。应该通过了。
如果还是有问题可以参考我上传资源里的代码。