CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

怎样实现如金山毒霸,熊猫卫士那样,在托盘区域慢慢的升起一个窗口的功能?

楼主petit(小云)2003-08-04 01:03:14 在 VC/MFC / 界面 提问

怎样实现如金山毒霸,熊猫卫士那样,在托盘区域慢慢的升起一个窗口的功能? 问题点数: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

相关问题

  • 金山毒霸简直烂
  • 用过熊猫卫士的请进...
  • 怎样让写一个程序可以使程序在计算机启动后能自己自动运行并显示在托盘上就象金山毒霸或是瑞星那样子的啊!!!
  • 金山毒霸的序列号码
  • 金山毒霸有内存泄露!!!
  • 金山毒霸有内存泄露吗???
  • 关于金山毒霸升级
  • 金山毒霸2003注册码?
  • 谁有金山毒霸的序列号?
  • 金山毒霸出错,如何解决?

关键词

  • .net
  • 函数
  • 代码
  • hwndtoolbarwindow
  • rctme
  • ntbh
  • hwndshelltrayhwnd
  • hwndsyspager
  • hwndtraynotifywnd
  • rctdesktop

得分解答快速导航

  • 帖主:petit

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo