Wert von einem Dialogfeld ins andere

DanielKobzan

Mitglied
Wie kann ich einen Wert von einer Variable in dem einen Dialogfeld, in eine Variable in einem anderen Dialogfeld übergeben?

Ach und falls noch jemand weiss, wie ich durch drücken eines Knopfes in dem einen Dialogfeld ein zweites öffnen kann, wäre es nett, wenn er es mir posten würde.

Schonmal Danke.
 
Zuletzt bearbeitet:
1.) Wert aus einem Fenster auslesen (GetWindowText() für die meisten) und beim anderen setzen (SetWindowText() oder Äquivalent)

2.) Einfach als Antwort in WM_COMMAND ein Dialogfeld ganz "normal" anzeigen.
 
Also das ist garnet so Schwer.

1. Öffnen des 2. Dialogs:
Du erstellst deinen 2. Dialog mit der Klasse z.B. CMeinZweiterDialog (ich weiß blöder name, aber ist dann einfacher zu erklären). Diese Klasse sollte von der CDialog abgeleitet sein, machst du alles mit dem Klassenassistenten. Ausserdem "includiere" die Header des 2.Dialogs in deine cpp-Datei des 1. Dialoges (#include "MeinZweiterDialog.h"). Dann mach einen Button in deinem 1.Dialog. In der Behandlungs-Routine des Buttons schreibst du dann folgenden Code rein:

{
CMeinZweiterDialog dlg; // instanz auf den 2. Dialog
// jetzt wird der 2. Dialog geöffnet
dlg.DoModal()
//wenn in deinem 2. Dialog ein OK-Button ist und er Dialog nur als Eingabe oder so dient, dann machst du es anders:
if(dlg.DoModal() == IDOK) // wenn beim zweiten Dialog OK-geklickt wird
{
// tue dies
}
}

So das war mal das erste.

Zum Datenaustausch nimmst du einen Zeiger auf z.B. CString als Membervariable deines 2. Dialoges.
Also füge in die CMeinZweiterDialog.h eine Membervariable in der Klassendeklaration unter private ein. z.B:
CString* m_pString;
Dann musst du dem Zeiger natürlich eine Adresse geben wenn du deinen 2.Dialog aufrufst, hier noch mal die geänderte Routine des Aufrurfs des 2. Dialoges:

CMeinZweiterDialog dlg; // Instanz auf den 2.Dailog
UpdateData(TRUE); // schreiben der Daten in die Membervariablen
// m_text ist eine Membervariable eines Editfeldes des 1. Dialoges
dlg.m_string = &m_text; // zuweisen der Adresse unserer MemberVariable
// des Editfeldes an unseren Zeiger des 2.
// Dailoges
if(dlg.DoModal() == IDOK) // öffnen des 2. Dialoges, s.o.
{
MessageBox("Text wurde geändert");
m_text = *dlg.m_string; // den Text der im 2. Dialog geändert
// wurde wird jetzt wieder in die
// Membervariable des 1. Dialogs
// geschrieben.
}
UpdateData(FALSE);


So ich hoffe das du das verstanden hast, ist net so kompliziert. Wenn es einen anderen Weg gibt, dann soll man mich bitte belehren.

Gruss Homer
 
Ups da war jemand schneller. Is natürlich auch ne Möglichkeit. *g* Aber wenn man zugriff auf Objekte in einem anderen Dialog haben will, dann kommt man eben nicht drumm rum. *g*

Gruss Homer
P.S. @Xeragon weiss du, womit manche Mitglieder hier ihren Code reinposten, denn wenn ich hier Code reinposte, dann is da immer keine Formatierung mehr da und das sieht dann wirklich sch... aus.
 
Danke Xeragon, das wusste ich nicht. Jetzt kann ich endlich VB oder C/C++ Codes reinschreiben und man kann die auch besser lesen: *g*

Gruss Homer
 
Also, wie ich sehe ist SetWindowText() und das andere dafür da um die Menüleiste zu ändern. Ich aber hab in dem einen Dialogfeld ein Eingabefeld und in dem anderen Dialogfeld einen "Static Text". Ich will jetzt was in dem einen Dialogfeld eingeben und wenn ich auf OK klick, soll der Text im anderen Dialogfeld unter Static stehen.

Nunja, erstmal muß ich es schaffen, dass das zweite geöffnet wir. Ich bin wohl zu blöd dafür, hab alles so gemacht, wie Homer gesagt hat, aber er will es nicht öffnen. kann es sein, dass es im Quellcode vom 2. Dialogfeld nach

Code:
/////////////////////////////////////////////////////////////////////////////
// CGamewatcherDlg message handlers

nichts mehr kommt?
 

Neue Beiträge

Zurück