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

来源:互联网 发布:淘宝 在异地 被起诉 编辑:程序博客网 时间:2024/05/01 04:43

闪屏,就是在主对话框弹出之前先在屏幕上显示一张图片,或一小段动画以介绍产品的信息等。

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

我们应该这样来考虑,在屏幕上显示一个对话框估计只要学过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;
}

 

至此再运行你的程序看一下,是不是在你主对话框出现之前弹出了闪屏?当然你也可以在闪屏对话框中响应计时器消息来制作动态的闪屏,这里就不再举例了。

 

原创粉丝点击