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

如何刷新windows的桌面啊?

楼主qdh2002(qdh2002)2003-11-02 11:36:15 在 C++ Builder / Windows SDK/API 提问

我的程序,是一个托盘程序,但程序在ExitProcess以后,托盘图标不消失,不知道怎么回事。如果刷新桌面的话,会不会让图标消失?  
   
  怎么来刷新桌面??谢谢。 问题点数:0、回复次数:3Top

1 楼constantine(飘遥的安吉儿)回复于 2003-11-02 12:23:41 得分 0

刷新桌面我也问过没有人里我!!你   看看下面的吧!或许有用  
   
  文档标题:防止因系统崩溃而丢失任务栏的图标    
  关键字:   任务栏,图标,丢失,重建,WM_TASKBARCREATED     
  作者:   ccrun   阅读:405   加入时间:2003-10-22   本文来自http://www.ccrun.com    
   
  --------------------------------------------------------------------------------  
  本文章参考   "程序春秋"   2003/1   P66   “用Visual   Basic找出"消失"的系统任务栏图标”一文,作者:钟兰芳,在此对原作者表示感谢。  
  因原文中程序用VB编写,故ccrun将其改为C++Builder   版,呵呵。欢迎指正.  
   
  很多软件都在系统托盘区添加了图标,可以有时当Explorer.exe莫名的崩溃以后,程序在任务栏的图标就消失了,对于有些在任务栏隐藏了的软件来说,就没法控制了。原因是Explorer重新载入以后会重建任务栏,但大多数软件并不知道任务栏已经重建,所以没有及时重新画自己在任务栏的图标。  
   
  当任务栏建立的时候会向系统内所有顶级窗口发出一条消息:WM_TASKBARCREATED,我们只需要捕捉这个消息,并重建任务栏图标即可。不过这是一条任务栏自定义的消息,所以需要用RegisterWindowMessage在自己的程序里注册该消息。  
   
  首先定义两个全局变量  
   
  long   WM_TASKBARCREATED   =   0;  
  unsigned   int   lIconMessage   =   0;  
   
  在.h中声明以下函数:  
  private:         //   User   declarations  
   
          void   TForm1::RemoveTrayIcon();  
          void   TForm1::AddTrayIcon();  
          void   __fastcall   TForm1::WndProc(Messages::TMessage&   Message);    
           
   
  在Form的OnCreate事件中注册   WM_TASKBARCREATED   消息,并在托盘区添加图标  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::FormCreate(TObject   *Sender)  
  {  
          WM_TASKBARCREATED   =   RegisterWindowMessage("TaskbarCreated");  
          lIconMessage=RegisterWindowMessage("IconNotify");  
          AddTrayIcon();  
  }  
   
  在Form的OnClose事件中删除在任务栏的图标  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::FormClose(TObject   *Sender,   TCloseAction   &Action)  
  {  
          RemoveTrayIcon();  
  }  
   
  重载WndProc,响应系统消息  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::WndProc(Messages::TMessage&   Message)  
  {  
          if(Message.Msg==lIconMessage)    
          {  
                  if(Message.LParam==WM_LBUTTONDBLCLK)   //双击图标的事件                      
                  //....  
   
          }  
          if(Message.Msg==WM_TASKBARCREATED)   //任务栏重建消息  
                  AddTrayIcon();   //重新添加图标  
                   
          TForm::WndProc(Message);//对于其他的消息,调用基础类的WndProc函数让Windows进行缺省处理。  
  }  
   
   
  以下是自定义函数,功能是在任务栏添加和删除图标  
  //---------------------------------------------------------------------------  
  void   TForm1::AddTrayIcon()  
  {  
          NOTIFYICONDATA   icondata;  
          memset(&icondata,0,sizeof(icondata));  
          //将结构icondata的各域初始化为0  
          icondata.cbSize=sizeof(icondata);  
          icondata.hWnd=Handle;  
          strncpy(icondata.szTip,Application->Title.c_str,sizeof(icondata.szTip));  
          icondata.hIcon=Application->Icon->Handle;  
          icondata.uCallbackMessage=lIconMessage;  
          icondata.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;  
          Shell_NotifyIcon(NIM_ADD,&icondata);  
  }  
  //---------------------------------------------------------------------------  
  void   TForm1::RemoveTrayIcon()  
  {  
          NOTIFYICONDATA   icondata;  
          memset(&icondata,0,sizeof(icondata));  
          icondata.cbSize=sizeof(icondata);  
          icondata.hWnd=Handle;  
          Shell_NotifyIcon(NIM_DELETE,&icondata);  
  }  
   
  编译这个程序,然后用任务管理器或其他工具中止Explorer.exe,可以看到在Explorer重新载入的时候,本程序在任务栏的图标又重现了,嘿嘿。      
  Top

2 楼pp616(坏蛋)回复于 2003-11-02 13:21:01 得分 0

是你的代码的问题。删除托盘图标需要自己来删的。  
  Top

3 楼ul10()回复于 2003-11-06 19:45:45 得分 0

对,应该在你退出时用   Shell_NotifyIcon(NIM_DELETE,&icondata)来删除图标Top

相关问题

  • 如何让桌面刷新
  • 如何让桌面刷新???
  • 如何使WINDOWS桌面的图标文字背景变透明, 即便刷新了还能保持
  • 如何在桌面上直接绘图并将其刷新?
  • 请问如何编程刷新电脑桌面?(在线等待)
  • 如何在程序中实现刷新桌面的操作!
  • 如何拦截系统桌面刷新的消息?
  • 大白鲨:谁知道如何取消活动桌面的按web页面查看并刷新桌面
  • 如何刷新Windows的整个界面?
  • 如何使windows桌面重画一次?

关键词

  • 桌面
  • 消息
  • 系统
  • 软件
  • shell
  • icondata
  • 任务栏
  • 图标
  • taskbarcreated
  • 刷新

得分解答快速导航

  • 帖主:qdh2002

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

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