MFC实现阻塞等待动画

等待动画是友好的用户交互不可获取的功能,本文实现了基于MFC的等待动画。首先进行分析:

  1. 等待动画需要独立于业务
  2. 等待动画需要阻塞当前窗口
  3. 动画背景透明(非必须)

为了达到以上效果我们选用模式对话框+线程的方式来实现。

思路是:模式对话框显示动画效果,业务线程绑定到模态对话框上,线程结束时模态对话框随之结束。首先展示效果:

 

为了进行线程的绑定,我们使用《一种实用的c++线程管理方式》章节提供的线程管理的方法,极大的方便了线程的绑定和业务处理。

下面是模态对话框的核心代码:

COLORREF maskColor = RGB(255,255,255);  //掩码颜色

    SetWindowLong(this->GetSafeHwnd(),  GWL_EXSTYLE,   GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)| 0x80000);  

    SetLayeredWindowAttributes(maskColor,0,LWA_COLORKEY);//设置背景透明

    m_PictureEx.MoveWindow(0,0,108,114);

    m_PictureEx.Load(_T("waitimage.gif"));

    m_PictureEx.Draw();//使用CPictureEx加载动画

    m_ThreadManager.Start();//开启线程

 

定义进度条测试线程:

    DWORD CJCTestWaitDlgDlg::ProgressThreadProc(JCThreadManager* pThreadManager)

{

    CProgressCtrl* pCtrl = (CProgressCtrl*)pThreadManager->GetParam();

    for (int i=0;i<100;i++)

    {

        pCtrl->SetPos(i);

        Sleep(100);

    }

    return 0;

}

 

使用代码非常简单:

CJCWaitDlg wd(this);

    wd.Start(ProgressThreadProc,&m_ProgressCtrl);

    wd.DoModal();

 

   

    JCThreadManager实现了线程的各种操作,CJCWaitDlg实现等待动画和线程的绑定。下面提供源代码:

    CSDN源码:https://download.csdn.net/download/u011736517/12315130

   GITHUB源码:https://github.com/ljc2266/JCWaitDlg.git

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值