Trayicon bei Programmstart?



  • Hi Leute,

    ich nutze MFC und möchte meine Anwendung im Tray versenken. Und das
    nach Prüfung eines Wertes in einer INI-Datei.

    Der Code dafür ist schon fertig. Ich habe eine Funktion in meinem
    Programm (auf nem Button), die den Trayvorgang einleitet.

    Nun solls ja auch bei Start der Anwendung schon gehen können.
    Aber in OnInitDialog werde ich da nix. Wo müsste ich meinen Code
    platzieren?

    char *pBufasx = new char[300];
    CString mystring;
    GetPrivateProfileString("Modus","bei Start","normal",pBufasx,300,strPath);
        mystring.Format("%s",pBufasx);
    	delete []pBufasx;
    
    if(mystring=="normal")
    {
    //...mach nix
    }else
    {
    OnBnClickedButton3(); // diese Funktion schiebts als Trayicon rein
    }
    


  • du könntest nen OnTimer event setzen. den auf ne sec stellen.
    in die Timerfunktion machste dann die abfrage ob in tray oder nicht.

    dann popt dein Dialog ganz kurz auf und verschwindet dann.



  • Warum geht das eigentlich nicht über den Verzweig in den Buttonaufruf?



  • *push* LowFly kannst du meine Frage evtl. beantworten?



  • Warum geht das eigentlich nicht über den Verzweig in den Buttonaufruf?

    versteh deine frage nicht ganz aber ich rate jetzt mal ins blaue.

    du hast versucht deinen code in die OnInit deines Dialogs zu plazieren und nix ist passiert oder?

    unter der OnBnClickedButton3() funktion (nehme ich jetzt an) steht ShowWindow(SW_HIDE)

    der grund weshalb da nix passiert ist folgender

    OnInit = OnInitialisation = Bei der Initialisierung (bei der erstellung)

    der dialog befindet sich noch in der erstellung ALLE funktionen die in der OnInit deines dialoges aufgerufen werden gehören folglich mit dazu.

    demnach willst du was verstecken (ShowWindow(SW_HIDE)) was noch nicht vertig erstellt ist. dein window hat noch nichtmal den zustand SW_SHOW erreicht 😉

    deshalb setz ne timerfunktion die du aus der OnInit aus aufrufst. der kleinste wert den du da eingeben kannst ist ne sec. somit wartet der timer nach erstellung des Dialogs ne sec. bis er deine abfrage startet, soll window versteckt werden oder nicht. Nachdem du die abfrage gemacht hast killste den timer wieder sonst wiederholt sich die abfrage ständig.

    danach klappt das nach start deines tools der dialog als tray zu sehen ist und nicht mehr als dialog.

    mfg
    LowFly



  • wie kommst du darauf das der kleinste wert in einem timer 1 sekunde ist?
    Der kleinste Wert in einem Timer ist 0 Millisekunden auch wenn dieser Wert Sinnlos ist den die Auflösung von Windows ist nicht so niedrig.

    Sinnvoll sind bei sowas Werte wie 100 Millisekunden oder ähnliches und nicht 1 Sekunde.
    Weiters kann man den Dialog so einstellen das er bereits minimiert öffnet.
    dann poppt auch kein Dialog auf.



  • Weiters kann man den Dialog so einstellen das er bereits minimiert öffnet.
    dann poppt auch kein Dialog auf

    weis ich geht mit SetWindowPlacement nur hab ich auf seine frage geantwortet wie ich vermute das er es macht 😉

    mit dem timer haste recht hab ich was verdreht

    mfg
    LowFly



  • Unix-Tom schrieb:

    wie kommst du darauf das der kleinste wert in einem timer 1 sekunde ist?
    Der kleinste Wert in einem Timer ist 0 Millisekunden auch wenn dieser Wert Sinnlos ist den die Auflösung von Windows ist nicht so niedrig.

    Sinnvoll sind bei sowas Werte wie 100 Millisekunden oder ähnliches und nicht 1 Sekunde.
    Weiters kann man den Dialog so einstellen das er bereits minimiert öffnet.
    dann poppt auch kein Dialog auf.

    Hmm, wenn man den immer minimiert öffnet, also bei OnInitDialog, dann
    würde das ja auch dann der Fall sein, wenn man den aus dem Tray wiederherstellt,
    oder?

    Es sei denn man sagt ihm dabei dann noch ShowWindow(SW_SHOWNORMAL). Stimmt das,
    oder überlagert das minimiert starten der OnInitDialog das dann doch wieder?

    SetWindowPlacement sagt mir noch nix... 😕

    Kanns grad net testen, aufm Weg ins Büro :p



  • mit SetWindowPlacement kannst du das erscheinungsbild des Dialoges zu jeder zeit festlegen.

    mit setwindowplacement
    -kannst du die position festlegen wo dein dialog erscheinen soll.
    -kannst du die größe des dialoges bestimmen wie er dargestellt werden soll.
    -kannst du den zustand festlegen den er haben soll (SW_HIDE,-SHOW,-MINIMIZE ...);

    damit kannst du auch selbstverständlich den Dialog wieder Maximieren auch wenn er zu beginn minimiert gestartet wurde.

    siehe MSDN

    und kuck mal on den Thread rein

    mfg
    LowFly


Anmelden zum Antworten