Tray编辑,弹出的菜单不消失?就象POPO2004前几个版本一样

Tray编辑,弹出的菜单不消失,非得点击一下才可以消失,  
  就象POPO2004前几个版本的BUG一样,请高手指点  
   
  源代码如下:  
  //   .h  
  //---------------------------------------------------------------------------  
   
  #ifndef   MainFormUnitH  
  #define   MainFormUnitH  
  //---------------------------------------------------------------------------  
  #include   <Classes.hpp>  
  #include   <Controls.hpp>  
  #include   <StdCtrls.hpp>  
  #include   <Forms.hpp>  
  #include   <AppEvnts.hpp>  
  #include   <Menus.hpp>  
  //---------------------------------------------------------------------------  
  /**  
    *   自定义托盘消息号  
    */  
  #define   YM_ICONMESSAGE   (WM_USER   +   1000)  
  //---------------------------------------------------------------------------  
  class   TMainForm   :   public   TForm  
  {  
  __published: //   IDE-managed   Components  
          TApplicationEvents   *theApp;  
          TPopupMenu   *PM;  
          TMenuItem   *R1;  
          TMenuItem   *A1;  
          TMenuItem   *X1;  
          void   __fastcall   theAppMinimize(TObject   *Sender);  
          void   __fastcall   X1Click(TObject   *Sender);  
          void   __fastcall   A1Click(TObject   *Sender);  
          void   __fastcall   R1Click(TObject   *Sender);  
          void   __fastcall   FormClose(TObject   *Sender,   TCloseAction   &Action);  
  private: //   User   declarations  
          /**  
            *   托盘图标ID  
            */  
          unsigned   int   YM_TRAYID;  
   
          /**  
            *   托盘消息结构体  
            */  
          ::NOTIFYICONDATA   FNotifyData;  
   
          /**  
            *   增加托盘图标  
            */  
          void   __fastcall   AddTrayIcon(void);  
   
          /**  
            *   删除托盘图标  
            */  
          void   __fastcall   RemoveTrayIcon(void);  
   
          /**  
            *   最小化到托盘  
            */  
          void   __fastcall   MinimizeToTray(void);  
   
          /**  
            *   恢复视窗  
            */  
          void   __fastcall   RestoreFromTray(void);  
  public: //   User   declarations  
          __fastcall   TMainForm(TComponent*   Owner);  
  protected:  
          /**  
            *   映射消息  
            */  
          BEGIN_MESSAGE_MAP  
                  VCL_MESSAGE_HANDLER(YM_ICONMESSAGE,   Messages::TMessage,   YMICONMESSAGE)  
                  VCL_MESSAGE_HANDLER(WM_SYSCOMMAND,   Messages::TMessage,   WMSYSCOMMAND)  
          END_MESSAGE_MAP(TForm)  
   
          /**  
            *   图标消息处理函数  
            */  
          void   __fastcall   YMICONMESSAGE(Messages::TMessage   &   Message);  
   
          /**  
            *   系统菜单消息处理函数  
            */  
          void   __fastcall   WMSYSCOMMAND(Messages::TMessage   &   Message);  
   
  };  
  //---------------------------------------------------------------------------  
  extern   PACKAGE   TMainForm   *MainForm;  
  //---------------------------------------------------------------------------  
  #endif  
   
  //   .cpp  
  //---------------------------------------------------------------------------  
   
  #include   <vcl.h>  
  #pragma   hdrstop  
   
  #include   "MainFormUnit.h"  
  //---------------------------------------------------------------------------  
  #pragma   package(smart_init)  
  #pragma   resource   "*.dfm"  
  TMainForm   *MainForm;  
  //---------------------------------------------------------------------------  
  __fastcall   TMainForm::TMainForm(TComponent*   Owner)  
          :   TForm(Owner)  
  {  
          this->YM_TRAYID   =   ::RegisterWindowMessage("YM_TRAYID");  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TMainForm::YMICONMESSAGE(Messages::TMessage   &   Message)  
  {  
          if(Message.LParam   ==   WM_LBUTTONDBLCLK)   {  
                  this->RestoreFromTray();  
          }   else   if(Message.LParam   ==   WM_RBUTTONDOWN)   {  
                  TPoint   PT;  
                  GetCursorPos(&PT);  
                  this->PM->Popup(PT.x,PT.y);  
          }  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TMainForm::WMSYSCOMMAND(Messages::TMessage   &   Message)  
  {  
          if(Message.WParam   ==   SC_ICON)   {  
                  //最小化到托盘  
                  this->MinimizeToTray();  
          }  
          TForm::Dispatch(&Message);  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TMainForm::theAppMinimize(TObject   *Sender)  
  {  
          //最小化到托盘  
          this->MinimizeToTray();  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TMainForm::AddTrayIcon(void)  
  {          
          ::ZeroMemory(&FNotifyData,sizeof(FNotifyData));  
          FNotifyData.cbSize   =   sizeof(FNotifyData);  
  FNotifyData.uID   =     this->YM_TRAYID;  
  FNotifyData.hWnd   =   this->Handle;  
  FNotifyData.uCallbackMessage   =   YM_ICONMESSAGE;  
  lstrcpy(FNotifyData.szTip,   "双击恢复程序!");  
  FNotifyData.hIcon   =   Application->Icon->Handle;  
  FNotifyData.uFlags   =   NIF_MESSAGE   |   NIF_ICON   |   NIF_TIP;  
   
  Shell_NotifyIcon(NIM_ADD,   &FNotifyData);  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TMainForm::RemoveTrayIcon(void)  
  {  
          if(FNotifyData.cbSize   !=   0)   {  
                  Shell_NotifyIcon(NIM_DELETE,   &FNotifyData);  
                  ::ZeroMemory(&FNotifyData,sizeof(FNotifyData));  
          }  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TMainForm::MinimizeToTray(void)  
  {  
          this->AddTrayIcon();  
          Application->Minimize();  
          ShowWindow(Application->Handle,SW_HIDE);  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TMainForm::RestoreFromTray(void)  
  {  
          this->RemoveTrayIcon();  
          ShowWindow(Application->Handle,SW_SHOW);  
          Application->Restore();  
          Application->BringToFront();  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TMainForm::X1Click(TObject   *Sender)  
  {                        
          Close();          
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TMainForm::A1Click(TObject   *Sender)  
  {  
          MessageBox(this->Handle,"CopyRight   (C)   2000-2005   NS   Nanjing","版权声明",MB_OK+MB_ICONINFORMATION);          
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TMainForm::R1Click(TObject   *Sender)  
  {  
          this->RestoreFromTray();  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TMainForm::FormClose(TObject   *Sender,   TCloseAction   &Action)  
  {  
          this->RemoveTrayIcon();          
  }  
  //---------------------------------------------------------------------------

 问题来自:http://topic.csdn.net/t/20050609/14/4070786.html

解决方法参见:VC++6.0中实现将应用程序的图标加入到Windows的系统托盘中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值