Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Funktion - Programmstart

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 ] [ 3 ] [ 4 ] [ 5 ]
000
02.07.2004, 00:03 Uhr
t10ottoo



Hi,

ich hab eine dialogbasierende Anwendung. Möchte gerne wissen, wo da die Funktion ist, die beim Programmstart aufgerufen wird, also wo der Befehl ist, der den ersten Dialog öffnet? Bei ner SDI isses ja inner ...App in der InitInstance(), aber bei ner dialogbasierenden Anwendung klappts da nicht.

Zum testen hab ich versucht, ne MessageBox auszugeben, sobald das Programm gestartet ist. Bei ner SDI-Anwendung bekomm ich es hin, bei Dialogen nicht. Ich hoffe, mir kann da wer weiterhelfen.

Danke schonmal
Thomas
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.07.2004, 00:42 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


kannst auch in diesem Fall in der InitInstance() aufrufen... musst du nur machen bevor der Dialog dort modal aufgerufen wird...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.07.2004, 11:58 Uhr
t10ottoo



Naja, wenn dann müsste das ja nach dem "DoModal" kommen, da er auf dem Dialog was anzeigen soll. Also wenn ich vor dem DoModal den die Funktion aufrufe:

C++:
    CVorratsprogrammDlg dlg;
    m_pMainWnd = &dlg;
    dlg.status();
    int nResponse = dlg.DoModal();
    if (nResponse == IDOK)


Dann kommt "Debug Assertion Failed" Mach ichs nacher, dann zeigt er zwar den Dialog an, aber wenn ich den Dialog beende dann kommt wieder der Fehler. Problem ist aber, dass er die Funktion gar nicht aufruft.

Die Funktion status sieht so aus:

C++:
    progress.SetPos(0);
    progress.SetRange(0,100);
    progress.SetStep(1);
    
    while(progress.GetPos() < 100)
    {
        progress.StepIt();
        Sleep(5);
    }



progress ist ne Variable aus sone Progressbar Wenn ich die Funktion einem Button zuweise, dann klappt das wunderbar...

Gruß
Thomas
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.07.2004, 14:33 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


sag mal was du überhaupt machen willst.
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.07.2004, 16:18 Uhr
t10ottoo



Also ich will, dass beim Programmstart (d.h. wenn der "Hauptdialog" aufgerufen wird), dass da dann erstmal alles "unsichtbar" ist, bis auf eine Progressbar. Diese soll durchlaufen und wenn sie durchgelaufen ist, dann sollen alle Elemente wieder sichtbar gemacht werden.
Die Funktionen an sich funkionieren ja schon, das Problem ist ja nur, dass icht nicht weiß, wo ich die Funktionen aufrufen muss, damit er sie nach dem Anzeigen des Hauptdialogs ausführt.

Gruß
Thomas
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.07.2004, 16:23 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


also intitialisierungen kannst du z.b. in OnInitDialog machen...

wenn du das mit deiner anzeige lösen willst kenn ich auch keine richtig gute lösung...

bei ähnlichen problemen mach ich das so...
ich setze mir beim programmstart ein flag auf null und check in OnPaint ob das flag 0 ist, danch dann in onpaint das flag auf 1 setzen...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 02.07.2004 um 16:23 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
02.07.2004, 16:40 Uhr
t10ottoo



Hmm..oder ich mach das ganz anders (grad ne Idee bekommen hab) Ich mach nen extra Dialog, wo nur die ProgressBar durchlaufen wird, dieser wird dann, sobald die ProgressBar durchgelaufen ist, geschlossen und der eigentliche Hauptdialog wird dann geöffnet.
Dabei stellt sich dann aber nur noch die Frage, wie ich den "StartDialog" festlegen kann, kann ich diese Zeilen einfach in der InitInstance ändern?

C++:
    CVorratsprogrammDlg dlg;
    m_pMainWnd = &dlg;
    int nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {
        // ZU ERLEDIGEN: Fügen Sie hier Code ein, um ein Schließen des
        //  Dialogfelds über OK zu steuern
    }
    else if (nResponse == IDCANCEL)
    {
        // ZU ERLEDIGEN: Fügen Sie hier Code ein, um ein Schließen des
        //  Dialogfelds über "Abbrechen" zu steuern
    }


Also CVorratsprogramm ist mein Hauptdialog. Kann ich das dann einfach in CErsterDialog dlg; ändern?
Naja, ich probiers mal

[edit]
Ach nee, das geht ja auch nicht, da muss ich ja dann auch ne Funktion aufrufen können

Naja, dann test ich mal deine Variante @Windalf, Danke

Gruß
Thomas

Dieser Post wurde am 02.07.2004 um 16:42 Uhr von t10ottoo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
02.07.2004, 16:46 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


wenn du in OnInitDialog einen anderen (also den mit deiner Progressbar) modal aufrufst solltest du den Hauptdialog erst wieder sehen, wenn der modale wieder geschlossen wurde...
kannst ja mal ausprobieren in dem du einfach ne MesageBox in OnInti Dialog rausschmeist... Erst wenn die wieder zu ist erscheint der Hauptdialog
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 02.07.2004 um 16:46 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
02.07.2004, 16:50 Uhr
t10ottoo



Jo, das geht, sobald ich auf OK klicke bei der MessageBox, öffnet er den Hauptdialog. Hey, dann war ja mein Gedanke doch nicht so falsch Nun probier ich das dann doch mal aus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
02.07.2004, 17:01 Uhr
t10ottoo



Hmm..also hab das nun so probiert, geht aber irgendwie nicht...

Am Anfang von "OnInitDialog()" habe ich nun diese drei Zeilen eingefügt:

C++:
    CStart start;
    start.DoModal();
    start.status();



status sieht nun so aus (sollte eingentlich funktionieren):

C++:
    int zahl = 0;
    progress.SetPos(0);
    progress.SetRange(0,100);
    
    for (int zaehler = 0; zaehler < 100; zaehler++)
    {
        zahl += 1;
        progress.SetPos(zahl);
        Sleep(100);
    }
    CDialog::OnOK();



Compilieren klappt wunderbar, wenn ich nun das Programm starte, dann öffnet er zwar zuerst den Dialog "Start" mit der Progressbar, aber nix bewegt sich...wenn ich den Dialog dann über das "x" oben rechts schließe, dann kommt wieder der "Debug Assertion Failed" - Fehler. Versteht ich nicht ganz, da es ja mit der MessageBox wunderbar geklappt hat.

<edit>
Hab da mal eben was probiert und zwar über ne Funktion vom Start-Dialog hab ich ne MessageBox ausgeben lassen, das geht auch, wenn ich die aber dann schließe, dann sollte er eigentlich den Hauptdialog aufmachen, aber das tut er nicht, anstelle davon bringt er den typischen WinXP Fehler mit dem "Senden" und "Nicht Senden"...

Dieser Post wurde am 02.07.2004 um 17:07 Uhr von t10ottoo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ] [ 4 ] [ 5 ]     [ 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: