Initialisierungs-Dialog vor Hauptdialog setzten.



  • Hallo Leute!

    Ich hätte da ein theoretische Frage bzgl. eine Schnittstellen Initialiserung die ich in meinem App vornehmen möchte.

    Hintergrund:
    Das App intialisiert diverse Schnittstellen (RS232, GPIB usw) beim starten. So hab ich das App bereits bekommen. Die ganze Software ist etwas nostalgisch programmiert, und hängt dann kurz beim start, sprich das Mainframe friert ein ein bis die Routinen mit der Initialisrung fertig sind.

    Meine Idee:
    Ich möchte dem App eine kleines Init-Window spendieren (SW_Logo..;Text etc), wobei die Initialisierung vorgenommen wird, bevor sich überhaupt der Hauptdialog lädt, worin ich die Schnittstellen nach dem Gerät abchecke...
    "Checking device...", "Found on... " und so weiter... (später könnte noch weiter Funktionen hier immplementiert werde, die die Software benötig)

    Somit vermeide ich dass später das Hauptfenster kurz einfriert (weil daran möchte ich vorerst nichts gross verändern, da das früher von einer anderen Firma entwickelt wurde - und ich mit Visual C++ noch nicht so vertraut bin). Das Ding soll vorerst einfach mal so als Service R. fertig werden.

    Mein Umsetzung:
    Ich erstelle ganz normal den Dialog, initialiesere ihn vor dem Hauptdialog, und packe alle Funktionen da rein, die ich brauche...

    sollte so klappen? theoretisch! Fenster intialisierung macht mir eigentlich keine Sorgen.

    Seh ich das richtig?!

    Kurzes ja oder nein, wäre völlig ok! 🙂

    Vielen Dank!



  • Ja klar, kein Problem, da Du ja den Code hast ...

    Einfach in der Application->InitInstance-Methode vor dem Initialisieren des eigentlichen Dialogs diesen neuen Dialog modal einbinden.



  • Ich hab das den Dialog nun erstellt, alels reingepackt was ich brauche, aber die Elemente die ich im Dialogfeld platziere werden nicht sichtbar (eigentlich nur Text).

    Wenn ich das Dialogfeld aber bestehen lassen und nicht wieder entferne sobald dsa Hauptfenster kommt, erscheinen dann der Inhalt.

    Hat jemand 'ne Ahnung was ich tun könne?!

    Danke!



  • Hi,

    also ich würde den Dialog NICHT modal erzeugen, sondrn modeless. Dann würde ich die Routinen vom MainFrame weiter durchlaufen lassen und jedesmal, wenn ein bestimmer Schritt fertig ist, einfach die Beschriftungen des Lade-Dialoges ändern. Also in der InitInstance():

    // ....
    CLadeDlg* pDlg = new CLadeDlg;
    
    pDlg->Create(IDD_LOAD, NULL);
    pDlg->ShoWindow(SW_SHOW);
    pDlg->GetDlgItem(IDC_JOB)-SetWindowText("Überprüfe Schnittstllen ...");
    //IDC_JOB zeigt die aktuelle Aufgabe des progs dem User an ( ein CStatic wäre hier gut)
    
    //...  jetzt z.B. Schnittstellen checken
    
    //wenn fertig:
    
    pDlg->GetDlgItem(IDC_JOB)-SetWindowText("Überprüfung abgeschlossen.");
    
    //wenn alles komplett fertig:
    
    pDlg->DestroyWindow();
    
    delete pDlg;
    

    Hoffe, ihr habt mich verstanden 😉

    Happosai



  • vielen Dank! 🙂 🙂 🙂

    hab's leicht an meine Umgebung angepasst.

    Das klappt nun wunderbar.

    Was mich trotzdem interessieren würde, warum ist die modale Init ein Problem?
    Ist das weil die einfach schlichtweg erst später abgearbeitet wird?



  • Frag:

    Wie mach ich das mit der Grafik? 😕
    Bitmap IDB_STARTUP.

    pDlg->GetDlgItem(IDC_LOGO)->???? (IDB_STARTUP);
    


  • hab das nun so gelöst.
    keine Ahnung ob das gut oder schlecht gelöst ist aber es klappt. 😉

    pDlg->GetDlgItem(IDC_LOGO)->UpdateWindow();
    


  • @Happosai
    Da ich ein wenig auf 'saubere' Programmierung achte, würde ich solche Quelltextzeilen wie

    pDlg->GetDlgItem(IDC_JOB)->SetWindowText("Überprüfe Schnittstllen ...");
    

    niemals vorschlagen.



  • Hilf mir mal, ReneG, was ist'n an dem Code nicht 'sauber'? 😕 Will mich ja auch weiterbilden ... 🕶

    Happosai


Anmelden zum Antworten