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

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體:   |    |    |  超大  

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 中以成功的通过)

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航