[Tutorial]Dialog in den Tray minimieren + menü
Ist ja schon etwas länger her, seitdem ich ein Tutorial geposted habe. Ich sage euch mal die Wahrheit, ich hatte keine Lust :P
Aber jetzt hat mich gerad wieder das Fieber gepackt und ich schreibe eins.
In diesem Tutorial werde ich euch zeigen, wie ihr euren Dialog in den Tray minimieren könnt und bei Rechtsklick ein Menü aufrufen könnt. Besonders bei Bot programmierern ist diese Technik beliebt. Und sie ist eigentlich recht Simpel.
Ist ja schon etwas länger her, seitdem ich ein Tutorial geposted habe. Ich sage euch mal die Wahrheit, ich hatte keine Lust :P
Aber jetzt hat mich gerad wieder das Fieber gepackt und ich schreibe eins.
In diesem Tutorial werde ich euch zeigen, wie ihr euren Dialog in den Tray minimieren könnt und bei Rechtsklick ein Menü aufrufen könnt. Besonders bei Bot programmierern ist diese Technik beliebt. Und sie ist eigentlich recht Simpel.
#Inhalt:
[-]Voraussetzungen & Programme
[-]Dialog erstellen
[-]Funktion in der Header Datei
[-]Funktionen im Quelltext
[-]Menü erstellen
[-]Menü einbinden
[-]Nachwort
[-]Voraussetzungen & Programme
Voraussetzungen:
- Kenntnisse im Umgang mit Visual Studio
Programme:
- Visual Studio 2005 oder höher (keine Express Version)
An dieser Stelle sage ich es nochmal. Ich benutzte keine Express Version. Die Express Version ist zwar auch schön und gut wenn man Programmieren will, aber Programmiere hier mit MFC ( Microsoft Foundation Class) und die Express hat kein MFC. Ihr müsst euch also die Vollversion besorgen.
[-]Dialog erstellen
So, als Erstes erstellen wir eine neue Dialoganwendung, oder öffnen eine bestehende.
Wie das geht sollte ja nun nicht mehr das Problem sein. ;) Ich nenne mein Projekt: DialogTray
[Only registered and activated users can see links. Click Here To Register...]
Dann stellen wir aud Dialogbasierend und machen die ActiveX Steuerelemente weg. Außerdem solltet ihr auch die Minimieren-Schaltfläche aktivieren.
[Only registered and activated users can see links. Click Here To Register...]
[-]Funktion in der Header Datei
So nun gehen wir in die CDialogTrayDlg.h (Die Header datei für den Hauptdialog)
[Only registered and activated users can see links. Click Here To Register...]
Nun haben wir dort unter Protected: folgendes stehen:
PHP Code:
protected:
HICON m_hIcon;
// Generierte Funktionen für die Meldungstabellen
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
Wir fügen also folgendes hinzu:
PHP Code:
LRESULT OnTrayNotification(WPARAM wParam, LPARAM lParam);
[-]Funktionen im Quelltext
So nun müssen wir unsere Funktionen hinzufügen. Auch wenn es etwas kompliziert aussieht, ist es das nicht.
Wir gehen in die DialogTrayDlg.cpp und fügen nach den Includes folgendes ein:
PHP Code:
#define WM_NOTIFICATION (WM_APP+100)
Irgendwann sollen wir folgendes sehen:
PHP Code:
BEGIN_MESSAGE_MAP(CDialogTrayDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
Nach dem ON_WM_SYSCOMMAND() fügen wir folgendes ein:
PHP Code:
ON_MESSAGE(WM_NOTIFICATION, OnTrayNotification)
PHP Code:
void CDialogTrayDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
PHP Code:
switch( nID){
case SC_MINIMIZE: {
ShowWindow(SW_HIDE);
NOTIFYICONDATA tnd;
ZeroMemory(&tnd, sizeof (NOTIFYICONDATA));
tnd.cbSize = sizeof (NOTIFYICONDATA);
tnd.hWnd = m_hWnd;
tnd.uID = 1;
tnd.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
tnd.uCallbackMessage = WM_NOTIFICATION;
tnd.hIcon = (HICON) LoadImage(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_MAINFRAME),IMAGE_ICON, 16,16,LR_SHARED|LR_DEFAULTCOLOR);
wcscpy( tnd.szTip, _T("Mein Dialog"));
Shell_NotifyIcon(NIM_ADD,&tnd);
}break;
default: CDialog::OnSysCommand(nID, lParam); }
PHP Code:
HCURSOR CDialogTrayDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
PHP Code:
LRESULT CDialogTrayDlg::OnTrayNotification(WPARAM wp, LPARAM lp)
{
switch (lp){
case WM_LBUTTONUP: ShowWindow(SW_SHOW);
NOTIFYICONDATA iconData;
iconData.cbSize = sizeof(NOTIFYICONDATA);
iconData.hWnd = this->GetSafeHwnd();
iconData.uID = 1;
return Shell_NotifyIcon(NIM_DELETE,&iconData);
}
return 0;
}
[-]Menü erstellen
So, natürlich wäre es super, wenn man den Bot , Hack oder jedes andere Programm was ihr habt, und es im Tray minimiert habt, von dort aus auch steuern könntet.
Also erstellen wir uns ein Menü. Wir gehen in die Ressourcenansicht und machen dort einen Rechtsklick und gehen auf "Ressource hinzufügen".
[Only registered and activated users can see links. Click Here To Register...]
Und dort wählen wir Menü und klicken auf Neu.
[Only registered and activated users can see links. Click Here To Register...]
Dann klicken wir auf unser Menü und dort wo "Hier eingeben" steht geben wir unsere Menüpunkte ein. Das erste ist wie man es von Menüs kennt, die Überschrift. Die datrunter die Menüeinträge für Funktionen.
[Only registered and activated users can see links. Click Here To Register...]
[-]Menü einbinden
Jetzt müssen wir unser Menü noch einbinden.
Dafür gehen wir wieder in unsere DialogTrayDlg.h
Nach den ganzen Protected sachen, schreiben wir :
PHP Code:
public:
CMenu m_TrayMenu;
[Only registered and activated users can see links. Click Here To Register...]
Dann gehen wir in die DialogTrayDlg.cpp und scrollen runter zu unserer
LRESULT CDialogTrayDlg::OnTrayNotification(WPARAM wp, LPARAM lp) Funktion.
Wir erinnern uns:
PHP Code:
LRESULT CDialogTrayDlg::OnTrayNotification(WPARAM wp, LPARAM lp)
{
switch (lp){
case WM_LBUTTONUP: ShowWindow(SW_SHOW);
NOTIFYICONDATA iconData;
iconData.cbSize = sizeof(NOTIFYICONDATA);
iconData.hWnd = this->GetSafeHwnd();
iconData.uID = 1;
return Shell_NotifyIcon(NIM_DELETE,&iconData);
}
return 0;
}
Das sieht dann so aus:
PHP Code:
case WM_RBUTTONUP: CPoint pt;
GetCursorPos(&pt);
m_TrayMenu.GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,pt.x,pt.y,this);
Über dem return TRUE; sollte
// TODO: Hier zusätzliche Initialisierung einfügen
Da drunter schreiben wir:
PHP Code:
m_TrayMenu.LoadMenu(IDR_MENU1);
[Only registered and activated users can see links. Click Here To Register...]
Jetzt seid ihr fertig. Wenn ihr alles richtig gemacht habt, sollte wenn man auf die Minimieren Schaltfläche klickt, der Dialog in den Tray gehen. Bei Rechtsklick das Menü anzeigen und bei Linksklick wieder Maximiert werden.
[-]Nachwort
So ich hoffe es hat euch gefallen. Auch wenn es etwas kompliziert scheint, ist es doch recht einfach. Jetzt könnt ihr eure Hacks, Bots oder auch andere Programme in den Tray minimieren und von dort aus über ein Menü steuern!
Viel Spaß damit.