Qt + Shell_NotifyIcon

Alles rund um die Programmierung mit Qt
Antworten
madRenEGadE
Beiträge: 52
Registriert: 10. Februar 2006 15:15

Qt + Shell_NotifyIcon

Beitrag von madRenEGadE »

Kann mir jemand sagen wie ich das hinkriege eine Qt Anwendung in den System Tray zu bekommen? Ich weiß das ich die shell funktion nehmen muss aber hab absolut keinen Plan wo ich die ganzen Variablen vom typ HINSTANCE etc herkrieg die ich in dem notifyicon struct brauche.... :(
und dann is da ja noch die sache mit den messages die ich ja abfangen muss um ein popup menu was bei rechtsklick auf das tray icon kommt zu verwerten aber ich brauche ja dafür lParam und wParam soweit ich weiß?!
winEvent übernimmt als parameter aber nur MSG und einen result wert vom typ long....
bin über jeden tipp dankbar also haut in die tasten
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

In der Kommerzversion von Qt3 war ein TrayIcon Beispiel dabei, bei der 4er fehlt es leider. Das 3er Beispiel lässt sich aber anpassen. Ansonsten
http://lists.trolltech.com/qt-interest/ ... 406-0.html. Ist aber Qt3.
JanGrieb
Beiträge: 3
Registriert: 10. März 2006 13:25
Wohnort: Buseck
Kontaktdaten:

Beitrag von JanGrieb »

Ich habe mal die Klassen hochgeladen, die ich für mein Projekt geschrieben haben. Es können mehere Icons in der Tray-Leiste angezeigt werden, bei Linksklick wird das assozierte Widget aktiviert, Rechtsklick öffnet ein Context-Menu.
Man kann die Aufmersamkeit des Users durch ein blinkendes Icon (win9x) oder ein Balloon-ToolTip (Win2000,XP) auf die Anwendung lenken.

http://people.freenet.de/jangrieb/TrayIcon.cpp
http://people.freenet.de/jangrieb/TrayIcon.h

Ist aber sehr Win32-spezifisch (bspw. werden HICONs und nicht QIcons verwendet). Weiß nicht ob es ohne Anpassungen selbständig (außerhalb meines Projekts) kompiliert.
Esleborn
Beiträge: 265
Registriert: 27. Januar 2005 01:23
Wohnort: Baden-Würtenberg
Kontaktdaten:

Beitrag von Esleborn »

könntet du jetzt noch erkären, welcher Parameter für was steht? (Beispielsweise die des Konstruktors)

Wenn jetzt noch einer sagt, wie es biem MAC und Linux geht, dann bastel ich ne Klasse die sich unter dem System richtig verhält draus (ist dann ja auch noch soooo viel Arbeit *g)

Elgrimm Esleborn
Glaube an eine Lösung, nur dann kannst du auch eine finden.
JanGrieb
Beiträge: 3
Registriert: 10. März 2006 13:25
Wohnort: Buseck
Kontaktdaten:

Beitrag von JanGrieb »

Ok, wenn du mir die Mühe machen willst. Schick mir dann mal das Ergebnis.

Also ich glaube das es wohl besser ist, die zugrunde liegenden Funktionen zu verwenden (also die der klasse TrayIconControl), wenn man den überhaupt mein Design-Konzept verwendet.

Das oben angesprochene Beispiel für Qt3 ist anders aufgebaut. Es wird kein eigenes Message only-HWND erstellt, stattdessen benutzt man das Widget, welches durch das Icon repräsentiert wird. Die Steuerung erfolgt dann über die Qt-eigene Event Verarbeitung. So kann man es auch machen.

Zurück zu meinem Code: Die Klasse TrayIcon ist sehr speziell auf meine Erfordernisse ausgelegt und deshalb vlt. nicht sehr flexibel. Ich verwende Icons in Windows-Resourcen (.rc).

Am Beispiel des c-tor:

Code: Alles auswählen

TrayIcon::TrayIcon(QWidget *parent, unsigned int uId, const QString &strText, const char *pszIconResource)
parent -> das assozierte Widget, das bei Klick aufgerufen wird
uId -> beliebig wählbare ID zur Unterscheidung von mehreren Icons*
strText -> Text des normalen Tooltip (beim überfahren des Icons mit der Maus angezeigt)
pszIconResource -> c-string mit der Icon-Resource. Beispiel:

Code: Alles auswählen

MAKEINTRESOURCE(ID_DES_ICONS_IN_DER_RC_DATEI)
* Unter Windows werden die Icon durch die HWND + die ID unterschieden. Also kann man die gleiche ID bei verschieden Fenstern benutzen.
Da ich aber eine eigene spezielle HWND (TrayIconControl::m_hControlWnd) verwende, darf jede ID nur einmal verwendet werden, auch wenn unterschiedliche QWidgets assoziiert werden.
Antworten