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();
}
//---------------------------------------------------------------------------
Tray编辑,弹出的菜单不消失?就象POPO2004前几个版本一样
最新推荐文章于 2024-07-03 11:18:24 发布