我想知道那种右下角弹出的窗口是如何实现的? 类似360安全卫士那种,当发现病毒时弹出一个报警窗口的,但是又没有抢夺主窗口的焦点,隔短时间就自动消失了的?是个CSplandWnd吗?教一下吧,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 搞个非模态对话框,SetTimer,然后MoveWindow从屏幕右下角往上移动,显示一段时间,然后往下移动,或者自动消失 vs2008的sp1里就自带了 CMFCAlertWnd 和CMFCAlertDialog, 实现了多种风格和自定义的功能, 就像msn一样, 有渐入渐出, 有滑动, 透明等等。 想做成什么样子都行, 这个类只是帮你处理如何显示(显示的位置, 显示的方式), 然后有个dialog资源, 你随便托按钮就ok了。 做成360这个垃圾的样子 绝对没问题。 SPY++试试,看看它的class名字,不是一定要是对话框的,也可以是自己注册的窗口类再以此创建的窗口。 用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();} AnimateWindow窗口弹出没问题,就是窗口退出的时候,会把控件弄得乱七八糟的...... 如果是VS2008 sp1可以按某人说的 但不建议 那个该死的SP1 cwinappex 能让程序大很多想像中不是很难吧 注意窗口风格 选取 clipwindows 不刷背景之类的 避免多余的刷新 ?什么意思?我用AnimateWindow做过一个实验啊,没问题的啊楼主出现了什么情况? 楼上没试验 在那BB什么 装大葱啊 大1.5M socket 获得socket对应的本地ip和端口 帮忙分析下这个http包 关于_variant_t和_bstr_t 的问题!! ?大家帮我看看这个答案对不对 非窗口类使用定时器的问题 如何将wave格式的语音文件保存为pcm格式? 非常怪怪的现象,请超级高手进来帮忙分析和解决 大四毕业设计,想用VC写游戏,写什么样的好? FMD请进,你好像是搞图像处理的,我现在有个想法要给公安网的朋友做个罪犯追踪系统 已知应用程序的名字,怎么得到他的进程ID或者主窗口的句柄呢?谢谢! 求助:关于控件遮盖的问题 GetPrivateProfileSection在XP64位系统里会失效?
想做成什么样子都行, 这个类只是帮你处理如何显示(显示的位置, 显示的方式), 然后有个dialog资源, 你随便托按钮就ok了。 做成360这个垃圾的样子 绝对没问题。
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();
}
什么意思?
我用AnimateWindow做过一个实验啊,没问题的啊
楼主出现了什么情况?