MFC 创建启动画面的实现

来源:互联网 发布:软件测试费 编辑:程序博客网 时间:2024/04/28 23:46

今天闲来无事,就研究了下启动画面的创建过程,现在向大家展示下实现过程。

一:首先要准备一个位图资源,自己可以在画图程序里面画一个,或者从网上DOWN一个,这个就不多说了。

二:创建一个C++位图类,继承与CBitmap类,姑且命名为CWszBitmap

三:创建一个启动窗口类,继承与CWnd类,命名为CWzSplash 类,  然后为该类添加一个CWszBitmap的对象m_bitmap.

      然后为该类添加一个成员函数Create用来创建启动窗口,代码如下:

void CWzSplash::Create(UINT nbitmapID)
{
m_bitmap.LoadBitmapW(nbitmapID);
BITMAP bitmap;
m_bitmap.GetBitmap(&bitmap);
int x=(::GetSystemMetrics(SM_CXSCREEN)-bitmap.bmWidth)/2;
        int y=(::GetSystemMetrics(SM_CYSCREEN)-bitmap.bmHeight)/2;
        CRect rect(x,y,x+bitmap.bmWidth,y+bitmap.bmHeight);
        CreateEx(0,AfxRegisterWndClass(0),L"Hello",WS_POPUP|WS_VISIBLE,rect,NULL,0);
SetTimer(1,1,NULL);//定时器用来控制什么时刻销毁该启动窗口
}

  为了使位图资源在启动窗口中不消失,我们还要为该类添加WM_PAINT消息响应函数来重绘窗口,代码如下:

void CWzSplash::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CWnd::OnPaint()
BITMAP bitmap;
m_bitmap.GetBitmap(&bitmap);
CDC bitmapDC;
bitmapDC.CreateCompatibleDC(&dc);
bitmapDC.SelectObject(m_bitmap);
dc.BitBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,&bitmapDC,0,0,SRCCOPY);
}

    然后为该类设置一个定时器响应函数,代码如下:

 void CWzSplash::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
DestroyWindow(); //销毁初始画面窗口
        AfxGetMainWnd()->UpdateWindow();//刷新主窗口
CWnd::OnTimer(nIDEvent);
}

 四 每个类中包含其他类的头文件大家自己写吧,在此不多说了。

 五: 最后我们在应用程序InitInstance()初始化函数中添加如下代码,代码要写在函数内开始处,

        CWzSplash ws;
        ws.Create(IDB_BITMAP_BEGIN);//IDB_BITMAP_BEGIN位图资源ID
        ws.UpdateWindow();
        Sleep(2000);

到此一个基于对话框程序的启动窗口就写完了,大伙可以自己动手看看效果吧!


原创粉丝点击