类似360安全卫士那种,当发现病毒时弹出一个报警窗口的,但是又没有抢夺主窗口的焦点,隔短时间就自动消失了的?是个CSplandWnd吗?教一下吧,谢谢!

解决方案 »

  1.   

    搞个非模态对话框,SetTimer,然后MoveWindow从屏幕右下角往上移动,显示一段时间,然后往下移动,或者自动消失
      

  2.   

    vs2008的sp1里就自带了 CMFCAlertWnd 和CMFCAlertDialog, 实现了多种风格和自定义的功能, 就像msn一样, 有渐入渐出, 有滑动, 透明等等。 
      

  3.   


    想做成什么样子都行, 这个类只是帮你处理如何显示(显示的位置, 显示的方式), 然后有个dialog资源, 你随便托按钮就ok了。 做成360这个垃圾的样子 绝对没问题。 
      

  4.   

    SPY++试试,看看它的class名字,不是一定要是对话框的,也可以是自己注册的窗口类再以此创建的窗口。
      

  5.   

    用AnimateWindow吧//获取桌面大小
    CRect rectDeskTop;
    SystemParametersInfo(SPI_GETWORKAREA,0,&rectDeskTop,SPIF_SENDCHANGE);

    //获取对话框大小
    CRect rectDlg;
    GetWindowRect(&rectDlg);
    int nW = rectDlg.Width();
    int nH = rectDlg.Height();
    //将对话框移动到桌面右下角
    ::SetWindowPos(this->m_hWnd,HWND_BOTTOM,rectDeskTop.right-nW
    ,rectDeskTop.bottom-nH,nW,nH,SWP_NOZORDER);

    //动画显示窗口,从左下角向右上角滑动显示窗口,动画过程在1秒内完成
    AnimateWindow(1000,AW_SLIDE | AW_VER_NEGATIVE | AW_HOR_NEGATIVE); //设置Timer,以完成自动关闭功能
    SetTimer(1,2000,NULL);
    timer函数void CAnimateDlg::OnTimer(UINT_PTR nIDEvent)
    {
    // TODO: Add your message handler code here and/or call default

    if(1 == nIDEvent)
    {
    KillTimer(1);
    DestroyWindow();
    } CDialog::OnTimer(nIDEvent);
    }
    在DestroyWindow中,再次调用AnimateWindow,设置销毁特效//---------------------------------------------------------------------------
    BOOL CAnimateDlg::DestroyWindow()
    {
    // TODO: Add your specialized code here and/or call the base class
    //在1秒内逐渐透明消失
    AnimateWindow(1000,AW_BLEND|AW_HIDE);
    return CDialog::DestroyWindow();
    }
      

  6.   

    AnimateWindow窗口弹出没问题,就是窗口退出的时候,会把控件弄得乱七八糟的......
      

  7.   

    如果是VS2008 sp1可以按某人说的 但不建议 那个该死的SP1 cwinappex 能让程序大很多想像中不是很难吧 注意窗口风格 选取 clipwindows 不刷背景之类的 避免多余的刷新
      

  8.   


    什么意思?
    我用AnimateWindow做过一个实验啊,没问题的啊
    楼主出现了什么情况?
      

  9.   

    楼上没试验 在那BB什么 装大葱啊 大1.5M