请问如何在Visual C++ 6.0或者Visual C++2005里实现托盘程序,即可以运行后只显示托盘,点击有菜单,但是没有界面的那一种,请救急?说的越详细越好,以前从没碰到过类似问题。我是一个初来乍到的程序员,今年即将毕业,正在公司实习。

解决方案 »

  1.   

    新建一个win32程序,将窗口显示的部分去掉,然后添加托盘代码即可
      

  2.   

    窗口隐藏就行了,托盘的参考下面的代码=========================================================================================
    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);      
      

  3.   

    访问系统托盘的方法是通过Shell_NotifyIcon函数和NOTIFYICONDATA结构实现的
      

  4.   

    http://blog.csdn.net/hityct1/archive/2007/12/05/1918285.aspx