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

托盘编程

楼主xding(小丁)2002-01-05 11:42:31 在 VC/MFC / 基础类 提问

想编一个托盘程序,不知道有关的消息、结构、函数,请指点。 问题点数:20、回复次数:8Top

1 楼freewing(羽田共)回复于 2002-01-05 11:50:15 得分 2

去看看  
  http://www.pcvc.net/book/default.asp?cateid=系统Top

2 楼wormholes()回复于 2002-01-05 11:52:58 得分 10

http://www.vckbase.com/faq/shell/1.htm  
  系统托盘编程      
  VCKBASE      
   
  --------------------------------------------------------------------------------  
     
          Windows   95以及后来的Windows版本允许你将程序图标放入系统托盘。所谓系统托盘,通常指的是屏幕右下方显示时间,音量等图标的那个区域。这个区域主要用于显示状态信息或者当你运行的程序不可见时,允许你方便地访问程序的主要特性。这个区域还可以用于显示小程序的图标,以便用户容易访问主程序,或者在预定的时间加载主程序。  
   
          有些系统托盘图标可以变化用以指示程序状态,例如,浏览器的系统托盘图标当modem接收和发送数据时显示的是不同的图标。把鼠标移到托盘图标上停留一下常常会显示一个提示,根据程序的状态,它可能也会变化。在托盘图标上单击鼠标右键常常显示一个程序菜单,而双击鼠标左键常常可以启动主窗口或应用程序。  
   
          访问系统托盘的方法是通过Shell_NotifyIcon函数和NOTIFYICONDATA结构实现的。      
  typedef   struct   _NOTIFYICONDATA   {  
        DWORD   cbSize;  
        HWND   hWnd;  
        UINT   uID;  
        UINT   uFlags;  
        UINT   uCallbackMessage;  
        HICON   hIcon;  
        TCHAR   szTip[64];  
        DWORD   dwState;                   //Version   5.0  
        DWORD   dwStateMask;           //Version   5.0  
        TCHAR   szInfo[256];           //Version   5.0  
        UINT   uTimeout;                   //Version   5.0  
        TCHAR   szInfoTitle[64];   //Version   5.0  
        DWORD   dwInfoFlags;           //Version   5.0  
  }   NOTIFYICONDATA,   *PNOTIFYICONDATA;    
     
          为了要在系统托盘中显示图标,用NIM_ADD标志调用Shell_NotifyIcon函数。      
  #define   ID_TASKBARICON   100  
  #define   WM_ICONNOTIFY                       (WM_USER   +   101)  
   
  NOTIFYICONDATA   nid;  
   
  //   初始化系统托盘图标  
  nid.cbSize   =   sizeof(NOTIFYICONDATA);  
  nid.hWnd   =   hWnd;  
  nid.uID   =   ID_TASKBARICON;  
  nid.uFlags   =   NIF_ICON|NIF_MESSAGE|NIF_TIP;  
  nid.uCallbackMessage   =   WM_ICONNOTIFY;  
  nid.hIcon   =   LoadImage(hInst,   MAKEINTRESOURCE(IDI_TRAY1),   IMAGE_ICON,   16,   16,   0);  
  strcpy(nid.szTip,   "My   Tooltip   Text");  
  Shell_NotifyIcon(NIM_ADD,   &nid);  
     
          cbSize成员是结构的大小(使用它主要是为了支持将来这个结构大小增加)。  
          hWnd是窗口句柄。当图标发生某事件时(如单击、双击等),Windows将向窗口发送uCallbackMessage成员指定的消息。uID成员指定与图标关联的ID。它不是很重要,除非你需要显示并跟踪几个图标。  
          uFlag成员告诉Windows应该读取哪个成员。当添加一个图标时,应该包含这个结构的大多数成员。当更新图标时,如只是需要改变图标时,你只要设置相应  
  的标志就可以了。  
   
          hIcon成员是你想显示的图标。  
          最后,szTip成员是提示文本。设置好这些结构成员后,调用Shell_NotifyIcon函数。  
   
          当与图标关联的事件发生时,Windows将发送uCallbackMessage成员指定的消息。IParam包含发送的消息。当获得WM_LBUTTONDBLCLK消息时显示主窗口  
  或者启动主程序。当获得WM_RBUTTONUP消息时显示菜单。  
   
          注意:如果在系统托盘中单击鼠标右键,有时会有一个弹出式(上下文菜单)菜单显示/消失的怪现象,详细信息击解决办法请参阅微软知识库文章Q135788,也可以参考下列代码加以解决。      
  switch(nMsg)   {  
        case   WM_ICONNOTIFY:  
              switch(lParam)   {  
                    case   WM_LBUTTONDBLCLK:  
                          //   Load   main   window   here  
                          break;  
                    case   WM_RBUTTONUP:  
                          {  
                                POINT   point;  
                                HMENU   hMenu,   hSubMenu;  
                                //   Get   mouse   position  
                                GetCursorPos(&point);  
                                //   Popup   context   menu  
                                hMenu   =   LoadMenu(hInst,   MAKEINTRESOURCE(IDR_MYMENU));  
                                hSubMenu   =   GetSubMenu(hMenu,   0);  
                                SetMenuDefaultItem(hSubMenu,   IDM_DEFAULTCMD,   FALSE);  
                                SetForegroundWindow(hMainDlg);                   //   Per   KB   Article   Q135788  
                                TrackPopupMenu(hSubMenu,  
                                      TPM_LEFTBUTTON|TPM_RIGHTBUTTON|TPM_LEFTALIGN,  
                                      point.x,   point.y,   0,   hWnd,   NULL);  
                                PostMessage(hMainDlg,   WM_NULL,   0,   0);       //   Per   KB   Article   Q135788  
                                DestroyMenu(hMenu);  
                          }  
                          break;  
                    default:  
                          return   FALSE;  
              }  
  }  
     
          不论什么时候,你都可以用   NIM_MODIFY   调用   Shell_NotifyIcon。程序终止之前,用   NIM_DELETE   调用   Shell_NotifyIcon从托盘中清除图标。  
   
  Shell_NotifyIcon(NIM_DELETE,   &nid);      
    Top

3 楼freewing(羽田共)回复于 2002-01-05 11:54:08 得分 3

wormholes说的就是在www.pcvc.netTop

4 楼chehw(chehw)回复于 2002-01-05 11:57:22 得分 5

查MSDN   Windows   Shell   API.   Top

5 楼wormholes()回复于 2002-01-05 12:15:02 得分 0

是呀是呀,很多地方都有呀  
  Top

6 楼zhuang094(hz-huang)回复于 2002-01-05 12:33:00 得分 0

呵呵Top

7 楼xding(小丁)回复于 2002-01-17 12:08:53 得分 0

多谢各位指教,更感谢wormholes,我有另外一个问题,托盘编程过程中,生成的弹出菜单不能及时消去,怎样解决这个问题?我只有这么多分数,很不好意思。心中感激!Top

8 楼riseifuku(清洁工)回复于 2002-01-17 12:15:24 得分 0

wormholes() 说的很好Top

相关问题

  • ???系统托盘编程??
  • 托盘编程问题
  • 托盘编程问题。
  • 关于托盘编程的问题?
  • 系统托盘编程问题
  • 如何编程托盘程序?
  • 高分求教!托盘编程!
  • 关于CRichEditView类及系统托盘区编程的问题
  • 关于系统托盘编程的问题
  • 系统托盘编程时出现的问题

关键词

  • .net
  • 函数
  • 系统
  • 鼠标
  • 结构
  • tpm
  • shell
  • 托盘
  • 图标
  • nid

得分解答快速导航

  • 帖主:xding
  • freewing
  • wormholes
  • freewing
  • chehw

相关链接

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

广告也精彩

反馈

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