Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Beim Programmstart Trayicon erstellen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
15.05.2003, 12:20 Uhr
Tody



Hi Zusammen,

ich habe eine MFC-Anwendung gebastelt, die beim Klick auf den Minimieren-Button verschwindet und dann ein TrayIcon erzeugt. Beim Doppelklick auf dieses erscheint die Anwendung wieder.
Jetzt würde ich aber gerne sofort beim Programmstart das Programm nur als TrayIcon anzeigen. Das heißt nach dem starten des Progs ist nur das TrayIcon zu sehen.
Wenn ich meinen Code jetzt in die OnInitDialog setze kommt zwar das TrayIcon aber das Programm erscheint normal. Hängt warscheinlich damit zusammen, dass die OnInitDialog unmittelbar vor dem Anzeigen des Fensters aufgerufen wird. Somit hat ShowWindow(SW_HIDE) keinen Effect.

Kann mir jemand weiter helfen?

Gruß Tody
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.05.2003, 18:20 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
www.fun-soft.de/forum/showtopic.php?threadid=1509
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.05.2003, 15:13 Uhr
Tody



Danke für deine Antwort aber so wirklich komm ich nich weiter. Wie ich das TrayIcon erstelle, ist nich das Problem und ein Menü benötige ich nich.
Ich würde einfach nur gerne das Programm so starten, dass erstmal kein Dialog angezeigt wird sondern nur das TrayIcon.
Bei folgendem Code kommt zwar das Icon aber das Fenster erscheint trotzdem:


C++:
BOOL CRegEditDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    // Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
    //  wenn das Hauptfenster der Anwendung kein Dialogfeld ist
    SetIcon(m_hIcon, TRUE);            // Großes Symbol verwenden
    SetIcon(m_hIcon, FALSE);        // Kleines Symbol verwenden

    // TODO: Hier zusätzliche Initialisierung einfügen

            char    toolTip[64];
        
    NOTIFYICONDATA tnd;

    ShowWindow(SW_HIDE);
    ZeroMemory(&tnd, sizeof (NOTIFYICONDATA));
    tnd.cbSize = sizeof (NOTIFYICONDATA);
    tnd.hWnd = this ->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);
    tnd.szTip[*toolTip];
    lstrcpyn(tnd.szTip,"RegEdit",sizeof(tnd.szTip));
    Shell_NotifyIcon(NIM_ADD,&tnd);

    return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.05.2003, 15:23 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hallo,
erstelle den Dialog ohne "WS_VISIBLE"-Style (einfach im Dialogeditor Visible ausmachen)

und dann in OnInitDialog:


C++:
//...
    Shell_NotifyIcon(NIM_ADD,&tnd);

[b]ShowWindow(SW_HIDE);[/b]

    return TRUE; // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
}


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.05.2003, 15:54 Uhr
Tody



Hi FloSoft,
Ich habe jetzt in den Eigenschaften vom Dialog Sichtbar = false gesetzt und dem Code so umgestellt wie du geschreiben hast. Leider erscheint das Fenster immernoch.
Laut MSDN wird OnInitDialog vor dem eigentlichen anzeigen des Fensters aufgerufen. Somit hat das ShowWindow(SW_HIDE) keine Wirkung. Denke ich.

Muss ich nich vielleicht was in der InitInstance umstellen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
16.05.2003, 16:02 Uhr
~Heiko
Gast


probiermal in WM_PAINT abzufangen und damit onpaint zu überschreiben.
müsste funzen

Gruss Heiko
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
16.05.2003, 16:47 Uhr
Tody



@Heiko
Sag mir wenn ich falsch liege, aber würde dann nicht jedesmal das Fenster verschwinden wenn es neu gezeichnet wird.
Ich kenn mich da noch nich so gut aus.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
16.05.2003, 18:29 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
eine normale Dialoganwendung wird modal erzeugt. Erzeuge es nichtmodal und setze ShowWindow auf false (sichtbar bei den Eigenschaften auch entfernen). OnCancel noch überschreiben und in PostNcDestroy() den Zeiger dann wieder freigeben sowie PostQuitMessage absetzen.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
16.05.2003, 18:56 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Anmerkung: schick mir das projekt ohne debug und relase ordner, dann mach ich dir ...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
19.05.2003, 09:23 Uhr
Tody



@flosoft
hab dir grad ne email geschickt.

@uwe
danke für den tip. ich bastele grad dran rum. hoffe es klappt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: