!!! HILFE!!! Probleme mit Buttons und Dialogen || Schnelle Hilfe ist gefragt!!



  • Hallo,
    werde mich in diesem Thread mal versuchen kurz auszudrücken.

    habe folgendes vor:
    Habe ein, bis jetzt Konsolenbasiertes Chattool geschrieben.
    Funktionsweise wie irc, sprich die Daten werden vom Client
    an den Server gesendet und der Broadcastet das dann an alle
    Nutzer.

    was ich in MFC machen will:
    2 Dialogboxen: erste Dialogbox zur eingabe der IP und des Ports
    (Port --> integer; IP --> char * (dort habe ich CSTRING
    gewählt...muss nachher nach char* umkonvertiert werden da die
    Fukntion ein char* erwartet))
    zweite Dialogbox soll sich bei druck des Buttons
    in der ersten öffnen und ein Nachrichtenempfangfeld (richtextbox
    o.ä.) ein Nachrichtensendefeld und einen Sendebutton enthalten.

    Ich habe die Dialogboxn schon entworfen kann sie aber noch nicht mit
    Funktionalität füllen. Ich bin MFC neuling und würde mich deshalb für Hilfe
    bedanken. Variablen existieren auch schon aber wie ich was mit den Buttons mache
    ist mit unklar, sprich was ich dort für funktionen/methoden reinpacke und wie ich das realisiere das sich erst die erste dialogbox und bei druck auf den button (meinetwegen "los gehts") erst die zweite dialogbox öffnet und die erste wiederum schließt.
    Denke nicht das die allzuschwer für solche programmiergurus wie euch sein sollte. aber ich muss meine lösung morgen schon in der schule vorstellen und da ich im pflichtenheft eine grafische oberfläche versprochen habe muss ich das bis morgen mit mfc noch hinbekommen.
    Schonmal im voraus ein herzliches dankeschön!!!!

    ps:
    falls sie mich an .net forms weiterempfehlen wollen kann ich dies leider nicht
    verwenden da es dort von STRING keine umformatierung in char* gibt und es bei so weniger komplexen dialogen meiner meinung nach mit mfc auch nciht schwerer ist.



  • Wow, du fängst ja früh an... 🙄

    Also, ich hoffe mal, der Knopf, der den ersten Dialog zu macht und den zweiten öffnen soll ist der OK Knopf mit der ID IDOK.
    Jetzt such bitte mal in deinem Code nach der InitInstance, da drin steht eine if mit DoModal.
    Da drin rufst du einfach den zweiten Dialog auf. Das geht mit DoModal.



  • BOOL CModernTalkingApp::InitInstance()
    {
    	// Standardinitialisierung
    	// Wenn Sie diese Funktionen nicht nutzen und die Größe Ihrer fertigen 
    	//  ausführbaren Datei reduzieren wollen, sollten Sie die nachfolgenden
    	//  spezifischen Initialisierungsroutinen, die Sie nicht benötigen, entfernen.
    
    	CModernTalkingDlg 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
    	}
    
    	// Da das Dialogfeld geschlossen wurde, FALSE zurückliefern, so dass wir die
    	//  Anwendung verlassen, anstatt das Nachrichtensystem der Anwendung zu starten.
    	return FALSE;
    }
    

    das steht dort bei mir.
    weiß aber auhc garnicht wie man ein neun dialog aufruft.
    schonmal danke für die schnelle hilfe



  • rofl, also der Name ist kreativ. 👍

    Da wird der Dialog aufgemacht:

    CModernTalkingDlg dlg;
        m_pMainWnd = &dlg;
        int nResponse = dlg.DoModal();
    

    Bei einem Dialog, der nicht das Hauptfenster ist, sieht das etwas anders aus:

    CModernTalkingDlg dlg;
        dlg.DoModal();
    

    Die if habe ich auch weggelassen, weil mir da gerade keine Verwendung einfällt.

    Die Zeilen packst du jetzt da hin, wo das steht:

    // ZU ERLEDIGEN: Fügen Sie hier Code ein, um ein Schließen des
            //  Dialogfelds über OK zu steuern
    

    Edit: Den Klassennamen musst du natürlich auch anpassen. 😉



  • danke^^

    nur mal grad so ne verständnisfrage....
    mein erster dialog heißt CModernTalkingDlg
    also der(ip-port)dialog der auch als erstes geöffnet werden soll
    der dialog der als zweites nach drücken auf ok geöffnet werden soll heißt
    (zumindest steht das so im ressourcenbrowser) IDD_Dialog1

    also muss ich dann in das "To-Do" nicht irgendwie sowas reinpacken?

    CDialog1Dlg dlg;
    dlg.DoModal();
    


  • Für deine 2ten Dialog brauchst du auch eine Klasse.
    Sollte sich mit der IDE leicht anlegen lassen.
    Diese Klasse intanziertst du und rufst dann DoModal() auf.
    Dann öffnet sich er 2te Dialog.



  • Ich habe mal das VC 6 Projekt von mir hochgeladen.
    Vielleicht ist es dann für andere anschaulicher,
    was ich da bis jetzt schon habe und Antworten können
    Maßgeschneiderter gegeben werden...

    http://www.yousendit.com/transfer.php?action=download&ufid=EEDA741F58090E6D



  • akkadian schrieb:

    Ich habe mal das VC 6 Projekt von mir hochgeladen.
    Vielleicht ist es dann für andere anschaulicher,
    was ich da bis jetzt schon habe und Antworten können
    Maßgeschneiderter gegeben werden...

    http://www.yousendit.com/transfer.php?action=download&ufid=EEDA741F58090E6D

    Ich habe auch VS 03 wenn das weiterhilft



  • Was war an der Antwort denn jetzt nicht maßgeschneidert?
    Wenn du willst, dass dir das jemand programmiert, dann schiebe ich dich ins Projekte-Forum - könnte knapp werden und Hausaufgaben sind da nicht gerne gesehen. 🤡



  • estartu schrieb:

    Was war an der Antwort denn jetzt nicht maßgeschneidert?
    Wenn du willst, dass dir das jemand programmiert, dann schiebe ich dich ins Projekte-Forum - könnte knapp werden und Hausaufgaben sind da nicht gerne gesehen. 🤡

    Tut mir leid, so wars nicht gemeint. Ich kann damit nur noch soviel anfangen.
    Hab einfach mal ne Klasse die con CDialog abgeleitet ist erstellt (MainDLG)
    und rumprobiert, da kamen aber nur fehler. deswegen hab ich leidernicht weitergewusst
    und gehofft so könntes einfacher für meine helfer sien sich dorthinein zu versetzen



  • Zeig die fehler doch mal.
    Könnte es sein, dass du nur den Include vergessen hast? 😉



  • Ich komm darauf nich so ganz klar
    ...
    könnt ihr mir mal sagen wo cih welche instanz hinpacken muss?
    if (nResponse == IDOK)
    {
    MainDLG Dialog;
    Dialog.DoModal();
    }

    so?



  • So hab jetzt hier was ohne Fehlermeldungen, aber wenn cih das Prog
    nach dem kompilieren öffne geht der erste Dialog auf udn beim clicken auf ok geht alles wieder zu

    #include "stdafx.h"
    #include "ModernTalking.h"
    #include "ModernTalkingDlg.h"
    #include "MainDLG.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    /////////////////////////////////////////////////////////////////////////////
    // CModernTalkingApp
    
    BEGIN_MESSAGE_MAP(CModernTalkingApp, CWinApp)
    	//{{AFX_MSG_MAP(CModernTalkingApp)
    		// HINWEIS - Hier werden Mapping-Makros vom Klassen-Assistenten eingefügt und entfernt.
    		//    Innerhalb dieser generierten Quelltextabschnitte NICHTS VERÄNDERN!
    	//}}AFX_MSG
    	ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // CModernTalkingApp Konstruktion
    
    CModernTalkingApp::CModernTalkingApp()
    {
    	// ZU ERLEDIGEN: Hier Code zur Konstruktion einfügen
    	// Alle wichtigen Initialisierungen in InitInstance platzieren
    }
    
    /////////////////////////////////////////////////////////////////////////////
    // Das einzige CModernTalkingApp-Objekt
    
    CModernTalkingApp theApp;
    
    /////////////////////////////////////////////////////////////////////////////
    // CModernTalkingApp Initialisierung
    
    BOOL CModernTalkingApp::InitInstance()
    {
    	// Standardinitialisierung
    	// Wenn Sie diese Funktionen nicht nutzen und die Größe Ihrer fertigen 
    	//  ausführbaren Datei reduzieren wollen, sollten Sie die nachfolgenden
    	//  spezifischen Initialisierungsroutinen, die Sie nicht benötigen, entfernen.
    
    	CModernTalkingDlg dlg;
    	m_pMainWnd = &dlg;
    
    	int nResponse = dlg.DoModal();
    	if (nResponse == IDOK)
    	{
    		MainDLG Dialog;
             Dialog.DoModal();
    	}
    	else if (nResponse == IDCANCEL)
    	{
    		// ZU ERLEDIGEN: Fügen Sie hier Code ein, um ein Schließen des
    		//  Dialogfelds über "Abbrechen" zu steuern
    	}
    
    	// Da das Dialogfeld geschlossen wurde, FALSE zurückliefern, so dass wir die
    	//  Anwendung verlassen, anstatt das Nachrichtensystem der Anwendung zu starten.
    	return FALSE;
    }
    


  • hier mal der link zum projekt das in visual studio 2003 erstellt wurde.

    http://www.yousendit.com/transfer.php?action=download&ufid=56B73EDD49163F83



  • Der Code von 14:59:59 sieht doch schon gut aus.
    Geht der zweite Dialog nicht auf? Dann pack den Code mal unter die if - dann geht er eben immer auf, aber immerhin geht er auf... 😉


Anmelden zum Antworten