在VC++中利用消息制作启动封面

发表于:2007-07-14来源:作者:点击数: 标签:
1.用Appwizard创建一个空的SDI工程Splash; 2.导入用作启动封面的图片; (1)在创建的新工程Splash中,选择ResourceView面板打开资源编辑器。右击Splash resources,在打开的快捷菜单中选择“Insert”命令,选择其中的“Bitmap”选项,然后单击“Import”按钮
1.用Appwizard创建一个空的SDI工程Splash;

2.导入用作启动封面的图片;

(1)在创建的新工程Splash中,选择ResourceView面板打开资源编辑器。右击"Splash resources",在打开的快捷菜单中选择“Insert”命令,选择其中的“Bitmap”选项,然后单击“Import”按钮,准备导入用做启动封面的BMP图形文件。

(2)在ResourceView面板中,右击刚导入的“IDB_MITMAP1”位图资源,在打开的快捷菜单中选择“properties”命令,将ID值改为便于理解与记忆的“ID_SPLASH”。

3.新建一个对话框资源,在其中添加导入的位图;

(1)在ResourceView面板中,右击“Dialog”资源。在打开的快捷菜单中选择“Insert Dialog”命令,新建一个对话框资源。删除对话框中的“OK”“Cancel”按钮,选择自己喜欢的对话框风格.

(2)在对话框资源中添加一个Picture控件,打开其"Picture properties"属性对话框.选择"General"标签,在"Tpye"下拉框中选择"Bitmap"选项,在"Image"下拉框中选择前面导入的位图资源的ID值"IDB_SPLASH".将对话框的资源的大小调整为和Picture控件大小相同.

(3)右击资源编辑器,在打开的快捷菜单中选择"ClassWizard"命令,弹出"Adding a class"对话框,为新建的对话框资源添加一个新类.在"New Class"对话框的"Name"文本框中输入对话框类名"CsplashDlg",然后顺序单击"OK"按钮关闭"New Class"和"ClassWizard"对话框.

4.编写代码,实现启动封面的功能;

(1)添加一个指针成员变量"*splash".在工程工作区选择"ClassView"面板,展开类树,右击"CMainFrame"类,在弹出的快捷菜单中选择"Add Member Variable..." 命令,打开"Add Member Variable"对话框,然"Variable Type"文本框中输入"CsplashDlg",在"Variable Name"文本框中输入"splash".单击"OK"按钮关闭"Add Member Variable"对话框,在Splash.cpp文件中添加如下包含语句:#include "SplashDlg.h"

(2) 选择"View"下拉菜单中的"ClassWizard"命令,打开"ClassWizard"对话框.选择"Message Maps"标签,在"Class name"下拉框中选择"CMainFrame"类,然后在"Messages:"列表框中选择消息"WM_TIMER".单击"Add Function"按钮添加"OnTimer"函数.

(3)双击"Member Function"列表框中的"OnTimer"函数,编辑该函数.函数清单如下:

void CMainFrame::OnTimer(UINT nIDEvent)
{
if (nIDEvent == 1)
{if (splash->IsWindowVisible())
{//启动封面设置为当前活动窗口;
splash->SetActiveWindow();
splash->UpdateWindow();
//启动封面停留时间;
Sleep(2000);
splash->SendMessage(WM_CLOSE);
}
else
{//应用程序窗口设置为当前活动窗口;
SetActiveWindow();
//清除WM_TIMER事件;
KillTimer(1);
}
}
//CFrameWnd::OnTimer(nIDEvent);
}

(4)在CMainFrame类的OnCreate函数中添加SetTimer函数,并添加显示启动封面的程序代码.修改后的OnCreate函数清单如下:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
//开始显示启动封面;
SetTimer(1,5,NULL);//添加ID号为1 的WM_TIMER事件,响应频率不宜过大;
splash = new CSplashDlg();
//可以添加播放WAV声音的代码;
//sndPlaySound("welcome.wav",SND_ASYNC);
//PlaySound("welcome.wav",NULL,SND_ASYNC);

splash->Create(IDD_DIALOG1);
splash->ShowWindow(SW_SHOW);
splash->UpdateWindow();

if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}

if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}

// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);

//应用程序窗口居中显示;
CenterWindow();

return 0;
}

编译,链接后运行应用程序,显示添加的启动封面.(该程序在VC++ 6.0 中以成功的通过) 

原文转自:http://www.ltesting.net