Verstehe Programm nicht
-
Hm, da koennte ich jetzt nur Vermutungen anstellen:
Wie es aussieht ist die Funktion nicht bekannt. Ich verstehe nicht, warum du den Eintrag in der Message Map zum About Dlg machst. Du willst das Tray Icon doch sicherlich für das Hauptfenster haben. Ansonsten kann es noch sein, dass du die Funktion umbenannt hast, dann musst du hierON_MESSAGE(WM_SYSTRAY, OnShowDlg/*<---hier*/)
natürlich auch den Namen ändern.
Zu dem zweiten Fehler kann ich dir keine Auskunft geben, du müsstest mir exakt die Zeile posten, die den Fehler enthält.
Gruss,
DeSoVoDaMu
-
Nein umbenannt hab ich die Funktion nicht.
Die zwei Fehler sind exakt in der Zeile:ON_MESSAGE(WM_SYSTRAY, OnShowDlg)
Fehlermeldung:
OnlinetimerDlg.cpp
C:\Dokumente und Einstellungen\Markus\Desktop\Onlinetimer\OnlinetimerDlg.cpp(62) : error C2065: 'OnShowDlg' : nichtdeklarierter Bezeichner
C:\Dokumente und Einstellungen\Markus\Desktop\Onlinetimer\OnlinetimerDlg.cpp(62) : error C2440: 'type cast' : 'int ' kann nicht in 'long (__thiscall CWnd::)(unsigned int,long)' konvertiert werden
Es gibt keinen Kontext, in dem diese Konvertierung moeglich ist
Fehler beim Ausführen von cl.exe.Onlinetimer.exe - 2 Fehler, 0 Warnung(en)
-
Das ist doch in der Headerdatei so:
LRESULT OnShowDlg(WPARAM wParam, LPARAM lParam)
oder ?
-
// OnlinetimerDlg.h : Header-Datei // #if !defined(AFX_ONLINETIMERDLG_H__2167DE3F_FBCA_4DF5_A72B_0A376DAE308B__INCLUDED_) #define AFX_ONLINETIMERDLG_H__2167DE3F_FBCA_4DF5_A72B_0A376DAE308B__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 ///////////////////////////////////////////////////////////////////////////// // COnlinetimerDlg Dialogfeld class COnlinetimerDlg : public CDialog { // Konstruktion public: LRESULT OnShowDlg(WPARAM wParam, LPARAM lParam); Icon();
Ist wohl richtig da
-
Karl der Käfer schrieb:
Geht leider nicht, bekomme immer Fehlermeldung:
...
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //<-- Hier sieht man, dass das die falsche Stelle ist //{{AFX_MSG_MAP(CAboutDlg) // Keine Nachrichten-Handler //}}AFX_MSG_MAP ON_MESSAGE(WM_SYSTRAY, OnShowDlg) // Hier liegt der Fehler END_MESSAGE_MAP()
Was DeSoVoDaMu schon gesagt hat, Du hast die FALSCHE MessageMap bearbeitet!
Die ZeileON_MESSAGE(WM_SYSTRAY, OnShowDlg)
Muss in die MessageMap von Deinem richtigen Dialog und nicht vom CAboutDlg
-
Ich glaub ich blick nicht durch.
Meinst Du hier?///////////////////////////////////////////////////////////////////////////// // COnlinetimerApp BEGIN_MESSAGE_MAP(COnlinetimerApp, CWinApp) //{{AFX_MSG_MAP(COnlinetimerApp) // HINWEIS - Hier werden Mapping-Makros vom Klassen-Assistenten eingefügt und entfernt. // Innerhalb dieser generierten Quelltextabschnitte NICHTS VERÄNDERN! //}}AFX_MSG ON_COMMAND(ID_HELP, CWinApp::OnHelp) ON_MESSAGE(WM_SYSTRAY, OnShowDlg) END_MESSAGE_MAP()
Und die Anweisung
#define WM_SYSTRAY WM_APP + 1
auch hier rein oder?
-
Ich hab es jetzt mal hier rein gesetzt und bekomme auch keine Fehlermeldung mehr.
BEGIN_MESSAGE_MAP(COnlinetimerDlg, CDialog) //{{AFX_MSG_MAP(COnlinetimerDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_TIMER() ON_BN_CLICKED(IDC_SET, OnSet) //}}AFX_MSG_MAP ON_MESSAGE(WM_SYSTRAY, OnShowDlg) //Jetzt hier END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // COnlinetimerDlg Nachrichten-Handler BOOL COnlinetimerDlg::OnInitDialog() {
allerdings kann ich das Fenster nicht maximieren.
-
Na wenn das Tray Icon schonmal geht ist das doch was. Allerdings versteh ich einwas nicht:
class COnlinetimerDlg : public CDialog { // Konstruktion public: LRESULT OnShowDlg(WPARAM wParam, LPARAM lParam); Icon()/*<--hier fehlt doch der Funktiontyp*/;
bei mir würde das nicht mal kompliliert werden (ein Konstruktor ist es ja nicht). Aber das nur nebenbei, wegen deinem Maximieren Problem: ist denn das Symbol zum Maximieren deaktiviert oder passiert einfach nur nichts, wenn man darauf klickt? Prinzipiell hab ich ja nichts geschrieben, was in irgendeiner Weise diese Funktionalität beeinträchtigen würde. Da du eine OnSysCommand Funktion nutzt kann auch dort drin der Fehler liegen.
Gruss,
DeSoVoDaMu
-
Hey,
das sind doch nur die Funktionsköpfe in der Header-Datei.public: LRESULT ShowDlg(WPARAM wParam, LPARAM lParam); Icon(); Onlinedatum(); ONLINEZEIT();
das ist schon OK.
Aber zu Deiner Frage--> Nein es passiert einfach nichts.
Der Dialog verschwindet, das Try Icon erscheint, aber beim anklicken maximiert der Dialog nicht.
Wo würdest du denn den Aufruf von Icon() hinmachen (Icon->minimiert das programm),
kann es sein, das wenn ich den Aufruf in den Timer mache das Fenster direckt wieder minimiert wird?Vieleicht ja auch ein andere Fehler???
-
Hm, hab ich das was verpasst? Also bei mir muss stets ein Rückgabewert angegeben werden o_O
Nun zu 2.: Ich habe dich vorhin wohl falsch verstanden ^^ Du meintest das Programm aus dem Tray maximieren und ich einfach so, wenn es geöffnet und zu sehen ist.
Ich würde das in OnSysCommand() schreiben (hast du ja schon vorhanden, dachte du nutzt das auch)void COnlinetimerDlg::OnSysCommand(UINT nID, LPARAM lParam) { CDialog::OnSysCommand(nID, lParam); if (nID == SC_MINIMIZE) Icon(); }
Aber beim Maximieren kann ich keinen Fehler entdecken. Test doch mal, ob die Funktion überhaupt aufgerufen wird (mit ner Message Box oder sowas).
Gruss,
DeSoVoDaMu
-
Nein, die Funktion wird nicht aufgerufen, hab das mal so probiert:
LRESULT COnlinetimerDlg::ShowDlg(WPARAM wParam, LPARAM lParam) { MessageBox("HALLO"); // 1.Versuch if (lParam == WM_LBUTTONDOWN) { MessageBox("HALLO"); // 2. Versuch ShowWindow(SW_SHOW); NOTIFYICONDATA tnd; tnd.cbSize = sizeof(NOTIFYICONDATA); tnd.hWnd = this ->m_hWnd; tnd.uID = 1; tnd.uFlags = NIF_MESSAGE|NIF_ICON; tnd.uCallbackMessage= WM_SYSTRAY; tnd.hIcon = 0; tnd.szTip[0] = '\0'; Shell_NotifyIcon(NIM_DELETE,&tnd); return 1; } return 0; }
Wenn ich die Funktion per Hand aufrufe "ShowDlg(1,2); " wird das Fenster nicht eingeblendet und die MessageBox kommt nur im 1. Versuch, Mauseereigniss wird wohl nicht registriert.
-
Nun, ich kann beim besten Willen keinen Fehler finden, warum die Funktion nicht aufgerufen wird, wie sie es soll. Das der Funktionsaufruf nur die erste MessageBox aufruft und das Fenster nicht maximiert wird ist im Prinzip klar, Du musst ihm ja auch sagen, dass die linke Maustaste gedrückt wurde
ShowDlg(1, WM_LBUTTONDOWN);
Du kannst mir das Programm ja mal per Mail zuschicken, dann würde ich es mir mal anschauen, vielleicht finde ich ja noch einen Fehler.
Gruss,
DeSoVoDaMu