1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
// code inséré dans la définition de la classe de fenêtre
MESSAGE void __fastcall HandleCallback(TMessage&);
MESSAGE void __fastcall HandleQueryEndSession(TMessage&);
MESSAGE void __fastcall HandleEndSession(TMessage&);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_USER+1234, TMessage, HandleCallback);
MESSAGE_HANDLER(WM_QUERYENDSESSION, TMessage, HandleQueryEndSession);
MESSAGE_HANDLER(WM_ENDSESSION, TMessage, HandleEndSession);
END_MESSAGE_MAP(TForm);
// gestion de l'arrêt de l'application
void __fastcall TForm1::OnCloseQuery(TObject *Sender, bool &CanClose)
{
// si l'utilisateur clique sur la croix, se contente de masquer la fenêtre
if (!Terminer)
{
CanClose = false;
Visible = false;
}
else CanClose = true;
}
// terminaison de l'application
void __fastcall TForm1::OnTerminer(TObject *Sender)
{
Terminer = true;
Shell_NotifyIcon(NIM_DELETE, &nid); // fait disparaître l'icône
Close();
}
// gestion de l'arrêt de Windows
MESSAGE void __fastcall TForm1::HandleQueryEndSession(TMessage& Msg)
{
Msg.Result = 1; // on traite le message
}
MESSAGE void __fastcall TForm1::HandleEndSession(TMessage& Msg)
{
if (Msg.WParam)
{
Terminer = true;
Shell_NotifyIcon(NIM_DELETE, &nid);
}
Msg.Result = 0;
}
// fonction de traitement du message WM_USER+1234
MESSAGE void __fastcall TForm1::HandleCallback(TMessage& Msg)
{
switch(Msg.LParam)
{
case WM_MOUSEMOVE:
lstrcpy(nid.szTip,"Mon appli"); // message à afficher lorsque la souris
// survole l'icône
nid.uFlags = NIF_TIP;
Shell_NotifyIcon(NIM_MODIFY, &nid);
break;
case WM_LBUTTONDBLCLK:
Visible = true; // affiche la fenêtre principale
break;
case WM_RBUTTONDOWN:
TPoint q, p;
q.x = Screen->Width*3/4;
q.y = Screen->Height*3/4;
p = ClientToScreen(q);
MonMenu->Popup(p.x-30,p.y); // affichage d'un menu sur clic droit
// sur l'icône
break;
default:
break;
}
} |
Partager