您的位置:首页 > 其它

闪屏,我们自己动手做,相当简单

2008-08-07 20:43 351 查看
闪屏,就是在主对话框弹出之前先在屏幕上显示一张图片,或一小段动画以介绍产品的信息等。

初一看,在屏幕上显示一张图片或动画是不太容易的事情,但我们仔细一想便会发现,其实是挺简单的。

我们应该这样来考虑,在屏幕上显示一个对话框估计只要学过MFC的人都会做,我们可以将对话框的边框和按钮都去掉,只剩下一个面板,而且这个面板上只有一张图片,这个也不算太难(别忘了设置对话框的visible属性)。然后再用classWizzard为这个对话框新建一个类,比如叫CMySplash吧。好,至此准备工作已经做完。下面我们就将这个伪图片做成闪屏。

1.要想让这张图片在主对话框出现之前出现,首先我们得知道主对话框是在哪里弹出的。

观察BOOL CMyClassApp::InitInstance()中的代码,我们不难发现有这样一段:

CMyClassDlg dlg;
m_pMainWnd = &dlg;

int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}

很明显,这段代码的意思是弹出主对话框。所以我们的闪屏对话框的出现和消息代码应该在它之前出现。

2.建立一个非模态对话框,来显示我们的闪屏对话框。为什么要建立一个非模态对话框呢?因为非模态对话框不会阻断我们代码的运行,这样我们就可以通过Sleep函数来轻松控制闪屏显示的时间了。(当然可能模态对话框也可以)

在上面的那段代码之前加上如下代码(紧挨着加就行了):

CMySplash spDlg;
spDlg.Create(IDD_DIALOG_MySplash);
spDlg.ShowWindow(SW_SHOW);
Sleep(2000);
spDlg.DestroyWindow();

当然你也可以用指针来实现,但是要记住用 new产生的指针在不用时要销毁掉。

CMySplash spDlg;
spDlg.Create(IDD_DIALOG_MySplash);
spDlg.ShowWindow(SW_SHOW);
Sleep(2000);
spDlg.DestroyWindow();

CMySplash* spDlg;
spDlg=new CMySplash;
spDlg->Create(IDD_DIALOG_MySplash);//通过Create函数将对话框ID与对象相关联
spDlg->ShowWindow(SW_SHOW);//显示窗口
Sleep(2000);//停留2秒
spDlg->DestroyWindow();//销毁窗口

下面在响应WM_NCDESTROY的函数OnNcDestroy()中来销毁指针

void CMySplash::OnNcDestroy()
{
CDialog::OnNcDestroy();

// TODO: Add your message handler code here
/ delete this;
}

至此再运行你的程序看一下,是不是在你主对话框出现之前弹出了闪屏?当然你也可以在闪屏对话框中响应计时器消息来制作动态的闪屏,这里就不再举例了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐