MFC创建Splash主要步骤

 创建Splash窗口(程序LOGO样子的)可用两种 ,一种是派生自CDialog,较简单;另一种派生自CWnd。这里记录后一种方式:

1. 派生CMySplashWnd自CWnd;
2. 重载一个Create函数,如:
public:
      BOOL Create(CWnd* pParentWnd = NULL);

在Create函数中可以做创建m_bitmap的工作,根据自己需要。然后调用CreateEx函数,注意样式参数,可以这样调用:
CreateEx(0, 
AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_WAIT)),
_T("Whatever you want"),
WS_POPUP | WS_VISIBLE,
0, 0, bm.bmWidth, bm.bmHeight,
pParentWnd->GetSafeHwnd(),
NULL);
3. 重载WM_PAINT消息,进行背景图的绘制,比如:
void CMySplashWnd::OnPaint()
{
      CPaintDC dc(this); // device context for painting
      // TODO: 在此处添加消息处理程序代码
      // 不为绘图消息调用 
      CDC dcImage;
      if(!dcImage.CreateCompatibleDC(&dc)) return;
      BITMAP bm;
      m_bitmap.GetBitmap(&bm);
      CBitmap* pOldBitmap=dcImage.SelectObject(&m_bitmap);
      dc.SetStretchBltMode(COLORONCOLOR);
      dc.StretchBlt(0,0,bm.bmWidth,bm.bmHeight,&dcImage,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
      dcImage.SelectObject(pOldBitmap);
}

4.其他步骤:
如果需要Splash定时关闭,可以在OnCreate函数中SetTimer,并在OnTimer中调用DestroyWindow();
如果要在OnTimer中调用DestroyWindow销毁窗口,可在PostNcDestroy中delete this;
如果即不再此处delete,也不再外部delete,虽可以运行,但会有内存泄露。

备注:
  • AfxRegisterWndClass可注册默认窗口类,其参数可编辑指针等;
  • AfxGetMainWnd可得到主窗口;
  • AfxGetApp()->LoadStandardCursor(IDC_WAIT),加载标准WAIT指针;
  • GetSafeHwnd得到窗口的Safe句柄;
  • OnEraseBkgnd是否有必要直接return TRUE,再考虑;
  • UpdateWindow可以更新窗口,还可以显示窗口至顶层(在改程序处于激活状态时)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值