怎样实现如金山毒霸,熊猫卫士那样,在托盘区域慢慢的升起一个窗口的功能?
怎样实现如金山毒霸,熊猫卫士那样,在托盘区域慢慢的升起一个窗口的功能? 问题点数:0、回复次数:18Top
1 楼highersong(对月长啸)回复于 2003-08-04 01:05:12 得分 0
给E-mail,我给你发例子!!!Top
2 楼snaill(com.chinaos.snaill)回复于 2003-08-04 01:53:05 得分 0
www.codeproject.com
上有一个类似msn messager朋友登陆通知的界面例子,可以看看Top
3 楼zerphy(笑笑生)回复于 2003-08-04 08:50:01 得分 0
用MoveWindow()可以实现,其实很简单的!Top
4 楼ysdesigned(清泉)回复于 2003-08-04 09:12:51 得分 0
http://www.codeproject.com/dialog/statusbarmsgwnd.aspTop
5 楼DeautyFan(可可魔仙)回复于 2003-08-04 09:17:05 得分 0
将你的窗口按照hwndToolbarWindow32的位置移动,MoveWindow就可以了
HWND hwndShellTrayHwnd;
hwndShellTrayHwnd=FindWindow((LPCTSTR)"Shell_TrayWnd",NULL);
if(hwndShellTrayHwnd)
{
HWND hwndTrayNotifyWnd;
hwndTrayNotifyWnd=FindWindowEx(hwndShellTrayHwnd,NULL,(LPCTSTR)"TrayNotifyWnd",NULL);
if(hwndTrayNotifyWnd)
{
HWND hwndSysPager;
hwndSysPager=FindWindowEx(hwndTrayNotifyWnd,NULL,(LPCTSTR)"SysPager",NULL);
if(hwndSysPager)
{
HWND hwndToolbarWindow32;
hwndToolbarWindow32=FindWindowEx(hwndSysPager,NULL,(LPCTSTR)"ToolbarWindow32",NULL);
if(hwndToolbarWindow32)
{
GetWindowRect(hwndToolbarWindow32,&rectTo);
//将你的窗口按照hwndToolbarWindow32的位置移动
//MoveWindow就可以了
}
}
}
}
Top
6 楼petit(小云)回复于 2003-08-04 09:31:05 得分 0
我的邮箱是:petitlen@163.netTop
7 楼DeautyFan(可可魔仙)回复于 2003-08-04 09:55:59 得分 0
不用movewindow就用DrawAnimatedRects,这下应该可以了的Top
8 楼chaojibenben(笨笨)回复于 2003-08-04 10:34:15 得分 0
还是用这个函数吧AnimateWindowTop
9 楼highersong(对月长啸)回复于 2003-08-04 10:39:46 得分 0
不好意思,发过去之后才发现和 ysdesigned(清泉)提供的是同一个东东Top
10 楼uoyevoli(爱什么呢?www.FARPROC.com)回复于 2003-08-04 12:17:15 得分 0
使用AnimateWindow()
long lgAnimTime=2000;//动画时间为2秒
AnimateWindow(GetSafeHwnd(),lgAnimTime,AW_VER_NEGATIVE|AW_SLIDE);
使用在窗口显示时,
AnimateWindow(GetSafeHwnd(),lgAnimTime,AW_VER_POSITIVE|AW_SLIDE);
使用在窗口隐藏时,
……………………………………………………
★★特别声明:
如果你包含了winuser.h,但编译器仍报错说“AnimateWindow:undeclared identifier”的话,你得修改winuser.h了。
这样修改:打开VC安装目录里的include目录,打开winuser.h,查找AnimateWindow,你会发现有如下对Windows版本的判断“#if (WINVER>=00x500)……”把其中的“00x500”该为“00x400”即可。
原因很简单,我们目前使用的windows主版本好均为5.0以下,所以VC在编译时就把该函数排除在外了。不知道5.0的windows何时推出:)?Top
11 楼petit(小云)回复于 2003-08-04 12:19:02 得分 0
给的例子提供了StatusBarMsgWnd.h 和StatusBarMsgWnd.cpp
我是vc的菜鸟,现在只是想把“String”作为参数传进去来构建对象,调用popMsg()方法
,vc怎么构建一个对象,并调用他的方法?
Top
12 楼uoyevoli(爱什么呢?www.FARPROC.com)回复于 2003-08-04 12:24:00 得分 0
看你的楼上帖子!一个超简单的方法!!Top
13 楼petit(小云)回复于 2003-08-04 12:48:58 得分 0
能不能把完整的这段代码贴出来,或发到我的油箱?谢谢
还有就是方法中的参数好象没有设置显示的字体和背景等Top
14 楼uoyevoli(爱什么呢?www.FARPROC.com)回复于 2003-08-04 12:56:41 得分 0
long m_AnimTime=2000;
void CAnimDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
// TODO: Add your message handler code here
//取得桌面的大小
CWnd *pDeskTop=GetDesktopWindow();
ASSERT(pDeskTop!=NULL);
RECT rctDeskTop;
pDeskTop->GetWindowRect(&rctDeskTop);
//取得本对话框的高度和宽度
RECT rctMe;
GetWindowRect(&rctMe);
int nW=rctMe.right-rctMe.left;
int nH=rctMe.bottom-rctMe.top;
//取得任务条的高度
int nTbh=30; //默认为30像素
CWnd *pTaskBar=FindWindow("Shell_TrayWnd",NULL);
if(pTaskBar==NULL)return;
RECT rctTaskBar;
pTaskBar->GetWindowRect(&rctTaskBar);
nTbh=rctTaskBar.bottom-rctTaskBar.top;
TRACE((CString)"nTbh= "+itoa(nTbh,chrTmp,10)+"\n");
//计算提示框位置,屏幕的右下角、任务条之上
int nx=rctDeskTop.right-nW-10;
int ny=rctDeskTop.bottom-nTbh-nH;
//设置提示框位置
BOOL r=SetWindowPos(&wndTopMost,nx,ny,nW,nH,NULL);
ASSERT(r);
//动画效果
if(bShow)
{
//Play Show Animation
AnimateWindow(GetSafeHwnd(),
m_lgAnimTime,
AW_VER_NEGATIVE|AW_SLIDE);
}
else
{
//Play Hide Animation
AnimateWindow(GetSafeHwnd(),
m_lgAnimTime,
AW_VER_POSITIVE|AW_SLIDE|AW_HIDE);
}
}
至于字体,和背景,这和窗口动画显示没有关系。字体可以在属性窗口设置,背景在
BOOL CAnimDlg::OnEraseBkgnd(CDC* pDC)
{
}
里画呀!!Top
15 楼uoyevoli(爱什么呢?www.FARPROC.com)回复于 2003-08-04 12:58:01 得分 0
写错了,第一行应该是
long m_lgAnimTime=2000;Top
16 楼petit(小云)回复于 2003-08-04 15:06:20 得分 0
更傻瓜一点好吗?
我是vc初学,很多都不懂的,这段代码添加在哪?Top
17 楼uoyevoli(爱什么呢?www.FARPROC.com)回复于 2003-08-04 16:34:22 得分 0
我晕:::
在你的程序里新插入一个Dialog资源,并为它Create一个类CAnimDlg,然后在Class Winzard里Message Maps页里为这个类添加WM_SHOWWINDOW消息的处理函数,使用默认的函数名,即:
void CClockDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog::OnShowWindow(bShow, nStatus);
// TODO: Add your message handler code here
}
然后把上面的函数体部分代码粘进去。如果不想写 long m_AnimTime=2000;的话,可以把函数体内的m_AnimTime替换成一个毫秒值,代表整个动画过程的时间。
成功了,别忘了给我加分哦:)
这是我从我的程序里拷出来的,我的程序成功模拟了MSN messenger的弹出提示窗口!!
Top
18 楼petit(小云)回复于 2003-08-05 00:51:05 得分 0
把你的程序发到我的邮箱吧,petitlen@163.netTop




