Aggiungi il pulsante di chiusura (x rossa) a una descrizione comandi di .NET
Domanda
Sto cercando un modo per aggiungere un pulsante di chiusura a un oggetto .NET ToolTip simile a quello di NotifyIcon. Sto usando il tooltip come un fumetto di messaggio chiamato programmaticamente con il metodo Show (). Funziona bene ma non esiste un evento onclick o un modo semplice per chiudere la descrizione comandi. Devi chiamare il metodo Hide () da qualche altra parte nel tuo codice e preferirei che il tooltip fosse in grado di chiudersi. So che ci sono diverse descrizioni dei palloncini in rete che usano il codice di gestione e non gestito per eseguire ciò con l'API di Windows, ma preferirei rimanere nel mio comodo mondo .NET. Ho un'applicazione di terze parti che chiama la mia applicazione .NET e presenta arresti anomali durante il tentativo di visualizzare descrizioni comandi non gestite.
Soluzione
Puoi provare a implementare la tua finestra del suggerimento sostituendo quella esistente e personalizzando la funzione onDraw. Non ho mai provato ad aggiungere un pulsante, ma ho già fatto altre personalizzazioni con la descrizione comandi.
1 class MyToolTip : ToolTip
2 {
3 public MyToolTip()
4 {
5 this.OwnerDraw = true;
6 this.Draw += new DrawToolTipEventHandler(OnDraw);
7
8 }
9
10 public MyToolTip(System.ComponentModel.IContainer Cont)
11 {
12 this.OwnerDraw = true;
13 this.Draw += new DrawToolTipEventHandler(OnDraw);
14 }
15
16 private void OnDraw(object sender, DrawToolTipEventArgs e)
17 {
...Code Stuff...
24 }
25 }
Altri suggerimenti
Puoi sottoclassare la classe ToolTip con i tuoi CreateParams che impostano lo stile TTS_CLOSE:
private const int TTS_BALLOON = 0x80;
private const int TTS_CLOSE = 0x40;
protected override CreateParams CreateParams
{
get
{
var cp = base.CreateParams;
cp.Style = TTS_BALLOON | TTS_CLOSE;
return cp;
}
}
Lo stile TTS_CLOSE anche richiede lo stile TTS_BALLOON e devi anche impostare la proprietà ToolTipTitle sulla descrizione comando.
Per far funzionare questo stile, devi abilitare gli stili v6 di Common Controls utilizzando un manifest dell'applicazione .
Aggiungi un nuovo " File manifest dell'applicazione " e aggiungere quanto segue in < assembly > Elemento:
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
Almeno in Visual Studio 2012, questa roba è inclusa nel modello predefinito ma commentata: puoi semplicemente decommentarla.
Puoi provare a sovrascrivere il metodo CreateParams nella tua implementazione della classe ToolTip ... cioè.
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.Style = 0x80 | 0x40; //TTS_BALLOON & TTS_CLOSE
return cp;
}
}