CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

如何用c++builder实现--把应用程序放入托盘中?

楼主wh_cxh(wh_cxh)2000-10-25 20:29:00 在 C++ Builder / 基础类 提问

1、截获消息WM_SYSCOMMAND,是   SC_MINIMIZE   则   Hide();  
  2、截获消息WM_SHOWWINDOW,wParam   是FALSE   则   Hide();*****  
  问题在2上,如果只有1语句,点最小化按钮工作正常,在任务栏上点击无效。  
  加上2后,什么都不行???  
  问题点数:50、回复次数:4Top

1 楼hotyei(出于蓝胜于蓝)回复于 2000-10-26 07:39:00 得分 15

Sample面板不是有TrayIcon这样的控制吗?只要设置几个属性就可以隐藏、图标动画等效果了。Top

2 楼Raptor(猛禽)回复于 2000-10-26 10:47:00 得分 10

用控件吧,BCB5的控件有一点小问题,我改一下,在我的主页上,你试试:http://mentals.yes8.comTop

3 楼xujie2(笨啊笨)回复于 2000-10-26 13:06:00 得分 15

给你一段代码  
  unsigned   int   iconmessage   ;  
   
   
   
   
  //---------------------------------------------------------------------------  
  #include   <vcl.h>  
  #pragma   hdrstop  
  #include   <shellapi.h>  
   
  #include   "Unit1.h"  
  //---------------------------------------------------------------------------  
  #pragma   package(smart_init)  
  #pragma   resource   "*.dfm"  
  TForm1   *Form1;  
  //---------------------------------------------------------------------------  
  __fastcall   TForm1::TForm1(TComponent*   Owner)  
          :   TForm(Owner)  
  {  
  }  
  //---------------------------------------------------------------------------  
   
  //---------------------------------------------------------------------------  
  //---------------------------------------------------------------------------  
   
  void   __fastcall   TForm1::FormCreate(TObject   *Sender)  
  {  
          iconmessage=RegisterWindowMessage("Sever");//iconmessage的定义在前面  
          Creaticon();  
   
  }  
  //---------------------------------------------------------------------------  
  void     TForm1::RunProgram   ()  
  {  
      //   Select   the   program   and   how   it   will   be   run.  
      SHELLEXECUTEINFO   execinfo   ;  
      memset   (&execinfo,   0,   sizeof   (execinfo))   ;  
      execinfo.cbSize   =   sizeof   (execinfo)   ;  
      execinfo.lpVerb   =   "open"   ;  
      execinfo.lpFile   ="djzc.exe";  
      execinfo.lpParameters   ="";  
      execinfo.fMask   =   SEE_MASK_NOCLOSEPROCESS   ;  
      execinfo.nShow   =   SW_SHOWDEFAULT   ;  
   
      //   Run   the   program.  
      if   (!   ShellExecuteEx   (&execinfo))  
      {  
          ShowMessage   ("Could   not   create   process")   ;  
          return   ;  
      }  
  //         Application->Minimize   ()   ;  
          WaitForSingleObject   (execinfo.hProcess,   INFINITE)   ;  
  //         Application->Restore   ()   ;  
  }  
   
   
  void   TForm1::Creaticon()  
  {  
          NOTIFYICONDATA   icondata   ;  
          memset   (&icondata,   0,   sizeof   (icondata))   ;  
          icondata.cbSize   =   sizeof   (icondata)   ;  
          icondata.hWnd   =   Handle   ;  
          strncpy   (icondata.szTip,   "在线监测",   sizeof   (icondata.szTip))   ;  
          icondata.hIcon   =   Application->Icon->Handle   ;  
          icondata.uCallbackMessage   =   iconmessage   ;  
          icondata.uFlags   =   NIF_MESSAGE   |   NIF_ICON   |   NIF_TIP   ;  
          Shell_NotifyIcon   (NIM_ADD,   &icondata)   ;  
  }  
  //---------------------------------------------------------------------------  
   
  void   TForm1::Removeicon()  
  {  
          NOTIFYICONDATA   icondata   ;  
          memset   (&icondata,   0,   sizeof   (icondata))   ;  
          icondata.cbSize   =   sizeof   (icondata)   ;  
          icondata.hWnd   =   Handle   ;  
          Shell_NotifyIcon   (NIM_DELETE,   &icondata)   ;  
  }  
  void   __fastcall   TForm1::WndProc(Messages::TMessage   &Message)  
  {  
          if   (Message.Msg   ==   iconmessage)  
          {  
                  if   (Message.LParam   ==   WM_LBUTTONDBLCLK)  
                  {  
                  Form1->Show();  
                  }  
                  return   ;  
          }  
          TForm::WndProc   (Message)   ;  
  }  
   
  void   __fastcall   TForm1::FormDestroy(TObject   *Sender)  
  {  
          Removeicon();          
  }  
  //---------------------------------------------------------------------------  
   
   
   
   
   
  void   __fastcall   TForm1::BitBtn2Click(TObject   *Sender)  
  {  
          if(Application->MessageBoxA("退出将使在线监测无法正常运行!","警告!",MB_ICONWARNING+MB_YESNO)==IDYES)  
          Application->Terminate();  
  }  
  //---------------------------------------------------------------------------  
   
  void   __fastcall   TForm1::BitBtn1Click(TObject   *Sender)  
  {  
          Hide();  
  }  
  //---------------------------------------------------------------------------  
   
  Top

4 楼Darkblack(bloodmud)回复于 2000-10-26 23:57:00 得分 10

请看一下C++   Builder的例子程序,位于CBuilder的Examples目录下的   \Apps\TrayIconTop

相关问题

  • 用C++Builder开发DirectX应用程序
  • 如何对C++ Builder的应用程序打包!
  • 求解!关于C++BUILDER应用程序分发的问题...
  • 关于c++builder应用程序打包的问题
  • 如何用C++Builder生成独立于C++Builder系统的应用程序?
  • c++ builder应用程序打包的时候要考虑那些文件?
  • 关于C++ Builder编译出来的应用程序的一个小问题!
  • C++ BUILDER 中如何开发使用多显示器的应用程序??急,急
  • 关于C/S应用程序的问题?
  • c#编桌面应用程序如何?

关键词

  • execinfo
  • iconmessage
  • tform
  • pragma
  • include

得分解答快速导航

  • 帖主:wh_cxh
  • hotyei
  • Raptor
  • xujie2
  • Darkblack

相关链接

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

广告也精彩

反馈

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