Aktivierung des Dialogs beim Start der Anwendung



  • AndyDD schrieb:

    SucMa schrieb:

    Hallo Leute,

    habe eine Anwendung in VC++ 6.0 erstellt und möchte den Dialog der Anwendung nach Start des Rechners automatisch aktivieren. Bis jetzt funktioniert dies nur manuell über die Auswahl "Datei->Start".
    Wie kann ich dies realisieren?

    Benötige hierzu Hilfestellung, am Besten durch eine kleine Anwendung.

    Danke im Voraus

    SucMa

    Was meinst Du mit Dialog der Anwendung? Hast Du eine dialogbasierende Anwendung geschrieben oder meinst Du einen Dialog, der innerhalb einer SDI- oder MDI-Anwendung erscheinen soll?
    Egal was gemeint ist, Du musst erst mal das Programm starten. Das geht, wie hier schon richtig bemerkt wurde durch einen Eintrag in der Registry oder in der Programmgruppe Autostart.

    Das ist richtig. Aber wie gehts weiter? Wie kann ich die manuelle Betätigung von "Datei->Start" automatisieren, damit die Routine, die mit der Auswahl "Start" verknüpft ist, gestartet wird?



  • Was willst Du denn nun genau? Keiner versteht das so recht? Willst Du nach einem automatischem Programmstart ein Dialogfeld automatisch anzeigen, was Bestandteil Deiner Anwendung ist? Was hast Du für eine Anwendung (SDI, MDI, dialogfeldbasierend)? Sonst kann man Dir schlecht helfen.... ⚠

    Was meinst Du mit "Datei->Start"? Ist Start ein Eintrag in deiner Menüleiste unter dem Eintrag Datei?



  • Hallo Leute,

    ich glaube, ich muss die Frage einwenig präzisieren.
    In meiner Anwendung, die eine "SDI" Anwendung ist, wird mittels eines Buttons ein ListView-Object initialisiert und mit Werten gefüllt, für diese Aktion gibt es eine Funktion. Diese wurde über

    ON_COMMAND(ID_DLGC_START, OnDlgcStart)

    verknüpft und beim Drücken des Buttons ausgeführt.

    Erreich werden soll, dass diese Aktion beim Start der Anwendung automatisch ausgeführt werden soll.



  • SucMa schrieb:

    Hallo Leute,

    ich glaube, ich muss die Frage einwenig präzisieren.
    In meiner Anwendung, die eine "SDI" Anwendung ist, wird mittels eines Buttons ein ListView-Object initialisiert und mit Werten gefüllt, für diese Aktion gibt es eine Funktion. Diese wurde über

    ON_COMMAND(ID_DLGC_START, OnDlgcStart)

    verknüpft und beim Drücken des Buttons ausgeführt.

    Erreich werden soll, dass diese Aktion beim Start der Anwendung automatisch ausgeführt werden soll.

    Ok, dann kommen wir der Sache schon näher. Pack das alles in eine Memberfunktion

    LRESULT CDeineKlasse::OnDlgcStart (WPARAM wParam, LPARAM lParam)
    

    erweitere die Messagemap mit

    ON_MESSAGE(WM_DIALOGSTART, OnDlgcStart)
    

    und definier eine Nachricht

    #define WM_DIALOGSTART								WM_APP+1
    

    und dann brauchst Du nur noch in der Anwendungsklasse nach dem Anzeigen des Hauptfensters eine Nachricht abschicken:

    PostMessage(WM_DIALOGSTART,0,0);
    

    Sollte so funktionieren.
    Alternativ dazu könntest Du da direkt eine Instanz Deines Dialoges erstellen und mit DoModal() aufrufen. Ich benutzte die letzte Methode immer wenn ich Login-Fenster in der Anwedung brauche.



  • AndyDD schrieb:

    SucMa schrieb:

    Hallo Leute,

    ich glaube, ich muss die Frage einwenig präzisieren.
    In meiner Anwendung, die eine "SDI" Anwendung ist, wird mittels eines Buttons ein ListView-Object initialisiert und mit Werten gefüllt, für diese Aktion gibt es eine Funktion. Diese wurde über

    ON_COMMAND(ID_DLGC_START, OnDlgcStart)

    verknüpft und beim Drücken des Buttons ausgeführt.

    Erreich werden soll, dass diese Aktion beim Start der Anwendung automatisch ausgeführt werden soll.

    Ok, dann kommen wir der Sache schon näher. Pack das alles in eine Memberfunktion

    LRESULT CDeineKlasse::OnDlgcStart (WPARAM wParam, LPARAM lParam)
    

    erweitere die Messagemap mit

    ON_MESSAGE(WM_DIALOGSTART, OnDlgcStart)
    

    und definier eine Nachricht

    #define WM_DIALOGSTART								WM_APP+1
    

    und dann brauchst Du nur noch in der Anwendungsklasse nach dem Anzeigen des Hauptfensters eine Nachricht abschicken:

    PostMessage(WM_DIALOGSTART,0,0);
    

    Sollte so funktionieren.
    Alternativ dazu könntest Du da direkt eine Instanz Deines Dialoges erstellen und mit DoModal() aufrufen. Ich benutzte die letzte Methode immer wenn ich Login-Fenster in der Anwedung brauche.

    Danke für den Tipp. Ich denke, dass es funktionieren müsste. Kann allerdings dies erst wieder testen, wenn mein Rechner verfügbar ist.

    Wird mich nochmals melden.

    Danke!!



  • AndyDD schrieb:

    SucMa schrieb:

    Hallo Leute,

    ich glaube, ich muss die Frage einwenig präzisieren.
    In meiner Anwendung, die eine "SDI" Anwendung ist, wird mittels eines Buttons ein ListView-Object initialisiert und mit Werten gefüllt, für diese Aktion gibt es eine Funktion. Diese wurde über

    ON_COMMAND(ID_DLGC_START, OnDlgcStart)

    verknüpft und beim Drücken des Buttons ausgeführt.

    Erreich werden soll, dass diese Aktion beim Start der Anwendung automatisch ausgeführt werden soll.

    Ok, dann kommen wir der Sache schon näher. Pack das alles in eine Memberfunktion

    LRESULT CDeineKlasse::OnDlgcStart (WPARAM wParam, LPARAM lParam)
    

    erweitere die Messagemap mit

    ON_MESSAGE(WM_DIALOGSTART, OnDlgcStart)
    

    und definier eine Nachricht

    #define WM_DIALOGSTART								WM_APP+1
    

    und dann brauchst Du nur noch in der Anwendungsklasse nach dem Anzeigen des Hauptfensters eine Nachricht abschicken:

    PostMessage(WM_DIALOGSTART,0,0);
    

    Sollte so funktionieren.
    Alternativ dazu könntest Du da direkt eine Instanz Deines Dialoges erstellen und mit DoModal() aufrufen. Ich benutzte die letzte Methode immer wenn ich Login-Fenster in der Anwedung brauche.

    Die automatische Aktivierung des Dialoges habe ich dadurch gelöst, dass ich den Aufruf der Funktion in die Funktion "InitInstance()" eingefügt habe.
    Aber danke für deine Hinweise. Sie waren entscheident.

    Danke

    SucMa



  • Wenn das in der InitInstance() steht, dann erscheint doch der Dialog noch vor dem Hauptfenster, oder?



  • Nö, solange es am Ende von InitInstance steht nicht... 🙂


  • Mod

    Das spielt überhaupt keine Rolle. Es wird nämlich PostMessage verwendet. Und die Nachricht in der Queue wird erst abgearbeitet, wenn die Nachrichtenschleife läuft. Also wird erst das Mainwindow erzeugt mit allem drum und dran und dann wird die erste Nachricht bearbeitet, die dann diesen Dialog startet.



  • Martin Richter schrieb:

    Das spielt überhaupt keine Rolle. Es wird nämlich PostMessage verwendet. Und die Nachricht in der Queue wird erst abgearbeitet, wenn die Nachrichtenschleife läuft. Also wird erst das Mainwindow erzeugt mit allem drum und dran und dann wird die erste Nachricht bearbeitet, die dann diesen Dialog startet.

    Er meint sicher, dass er in der InitInstance() eine Instanz erzeugt hat. Das sollte so ungefähr gehen:

    BOOL CMyApp::InitInstance()
    {
    ...
    m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);
    m_pMainWnd->UpdateWindow();
    CMeinDialog	MyDialog;
    MyDialog.DoModal();
    return TRUE;
    }
    

    Ist aber nicht ganz sauber programmiert. Mit SendMessage sollte das wohl nicht gehen, da dies ja auf die Abarbeitung des Queues wartet.


Anmelden zum Antworten