Laden...

Windows 7 - System Tray / Notifcation Area - Style

Letzter Beitrag vor 14 Jahren 11 Posts 3.168 Views
Windows 7 - System Tray / Notifcation Area - Style

Hallo,

in Windows 7 haben die Fenster, die sich beim Klick auf die Sys-Tray-Icons öffnen eine bestimmten Style.
Wie lässt sich ein solches Verhalten programmatisch erreichen? (Es geht vor allem darum, dass das Fenster keine Titlebar hat, not resizable ist und trotzdem einen Rahmen hat ... Biete da die API was?)

Im Allgemeinen wäre ich für Informationen, die sich mit der Windows 7 Notification Area beschäftigen und wie man damit programm-technisch arbeitet dankbar.

Besten Dank,
bilskirnir

Hier sind mal ein paar Beispiele wie das aussieht :

Notification Area

Für Leute die noch kein Windows 7 haben wie ich.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

Hallo,

...und wie man damit programm-technisch arbeitet dankbar.

Schau dir mal das Windows API Code Pack an. Das bietet ne Schnittstelle zu den neuen Windows 7 Funktionen.

Baka wa shinanakya naoranai.

Mein XING Profil.

Danke, das Windows API Pack habe ich schon ... Allerdings scheint es nichts für die Notification Area zur Verfügung zu stellen ... Oder ich brauche eine Hinweis, wo genau ich suchen muss.

Hallo bilskirnir,

siehe FormBorderStyle eines Forms

Danke für den Verweis auf den Thread mit einem ähnlichen Problem; leider hilft mir das aus zwei Gründen nicht:

  1. Kam man in diesem Thread nicht zu einer Lösung.
  2. Hoffe ich das nicht mit einem Workaround zu lösen, sondern dass für die "neue" Variante der Notification Area eine dokumentierte, saubere Möglichkeit mithilfe der API exisitert.

(Ich hatte ganz vergessen, dass die Fenster der Notification Area so schon in Vista aussahen, aber - siehe Thread - scheint es damals keine Möglichkeit gegeben zu haben, das Aussehen zu erzielen.)

  1. Kam man in diesem Thread nicht zu einer Lösung.

Doch - eine Lösung habe ich dort bereits gepostet:

Zitat von: winSharp93
Als besseren Workaround kannst du festlegen, dass Size = MinimumSize = MaximumSize.
Dann erscheinen aber immer noch die "Resizepfeile".

Zitat von: winSharp93
So klappt es bei mir:

  
/// <summary>  
/// The WM_SETCURSOR message is sent to a window if the mouse causes the cursor to move within a window and mouse input is not captured.  
/// </summary>  
private const int WM_SETCURSOR = 0x0020;  
  
protected override void WndProc(ref Message m)  
{  
    if (m.Msg == WM_SETCURSOR &&        !this.RectangleToScreen(this.ClientRectangle).Contains(Control.MousePosition))  
    {  
        SetCursor(Cursors.Default.Handle);  
        return;  
    }  
  
    base.WndProc(ref m);  
}  
  
[DllImport("user32.dll")]  
static extern IntPtr SetCursor(IntPtr hCursor);  

Dann erscheinen aber immer noch die 'Resizepfeile'.

Es geht ja nicht nur um die Funktion, sondern auch den Style.
Und es ist halt schlechte Usability, wenn ein Programm vorgibt, irgendwas zu können, was es nicht kann ... Ergo keine Lösung.

Trotzdem danke für die Klarstellung, auf welchen Post du dich beziehst.

"Dann erscheinen aber immer noch die 'Resizepfeile'."

Eben nicht!

Zitat von: winSharp93

  
/// <summary>  
/// The WM_SETCURSOR message is sent to a window if the mouse causes the cursor to move within a window and mouse input is not captured.  
/// </summary>  
private const int WM_SETCURSOR = 0x0020;  
  
protected override void WndProc(ref Message m)  
{  
    if (m.Msg == WM_SETCURSOR &&        !this.RectangleToScreen(this.ClientRectangle).Contains(Control.MousePosition))  
    {  
        SetCursor(Cursors.Default.Handle);  
        return;  
    }  
  
    base.WndProc(ref m);  
}  
  
[DllImport("user32.dll")]  
static extern IntPtr SetCursor(IntPtr hCursor);  

Ergo keine Lösung.

Manchmal hilft es, verlinkte Threads nicht nur zu überfliegen, sondern tatsächlich aufmerksam zu lesen bzw. zu verfolgen.

Hallo Sizzla,

ich verweise nochmal auf meinen Ausgangspost ... Dieses Formular kriege ich auch hin, allerdings nicht - wie z.B. beim Lautstärkepegel unter Vista - ohne Formleiste und gleichzeitig unresizable ...

m0rius

Naja, der letzte Post scheinte mir klipp und klar zu sagen, dass es keine Lösung gibt ...

Ich hab den zitierten Quellcode ausprobiert und er macht tatsächlich, dass der Standard-Cursor bleibt.

Allerdings kommt mir das ganze noch nicht so ganz sauber vor, gibt es wirklich keine "offizielle" Lösung?

Sorry das ich den Thread falsch verstanden habe, aber es würde manchmal auch helfen, wenn man ein bisschen erklärt und nicht nur einfach zitiert 😉

Allerdings kommt mir das ganze noch nicht so ganz sauber vor, gibt es wirklich keine "offizielle" Lösung?

Die Frag ist ja, was du unter "offiziell" verstehst.
Das Reagieren auf Windowsnachrichten ist (wenn man einen MFC Programmierer fragt) das Natürlichste auf der Welt.
Die Nachrichten sind ja immerhin alle dokumentiert; beim Schreiben eines eigenen Rahmens wird man sie IMHO auch alle verwenden müssen.

Es gibt aber keine reine ".NET-Lösung", die nur auf Properties / Methoden setzt. Von daher kann ich dein Unbehagen jedenfalls teilweise nachempfinden.
Und wie ich ja in dem anderen Thread meinte, machen es die Windowseigenen Dialoge auch nicht anders.