lunatic82 Geschrieben 24. August 2001 Geschrieben 24. August 2001 Hallo, ich versuche gerade mit der MFC von Windows ein Programm zu schreiben. Dabei soll ein Wer aus dem Parent-Fenster an ein neues Popup-Fenster übergeben werden. Das Pop-Up-Fenster wird mit folgendem Befehl aufgerufen: void CGNS_MessengerDlg::OnDblclkUserList1() { UpdateData(TRUE); static CString strUser = m_user; send_message dlg; SetDlgItemText(IDC_USER_INFO_EDIT1, strUser); //Problem dlg.DoModal(); } So einfach lässt sich der Das Edit-Fenster aber nicht aktualisieren. Wie geht das also?? Björn Zitieren
maddin Geschrieben 24. August 2001 Geschrieben 24. August 2001 ich würde deiner klasse für den zweite dialog eine funktion hinzufügen. void SetInfo (CString infotext) { // m_info = mit Textfeld verknüpfte Variable m_info = infotext; } sofern die funktion nur vor der funktion DoModal aufgerufen wird sollte das funktionieren. ansonsten muß noch ein UpdateData(FALSE) hinzugefügt werden. aber Vorsicht UpdateData nicht aufrufen, wenn das Fenster noch nich existiert!!! Zitieren
lunatic82 Geschrieben 24. August 2001 Autor Geschrieben 24. August 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von maddin: <STRONG> void SetInfo (CString infotext) { // m_info = mit Textfeld verknüpfte Variable m_info = infotext; } sofern die funktion nur vor der funktion DoModal aufgerufen wird sollte das funktionieren. ansonsten muß noch ein UpdateData(FALSE) hinzugefügt werden. aber Vorsicht UpdateData nicht aufrufen, wenn das Fenster noch nich existiert!!!</STRONG> Zitieren
Crush Geschrieben 24. August 2001 Geschrieben 24. August 2001 Vielleicht bringt Dich der Auszug aus der MSDN weiter: Why can't I DDX/DDV to initialize my CDialog controls? You can't do anything with the dialog controls until your dialog is created—which doesn't happen until DoModal(). The standard way of overcoming the problems is to create member variables for the data, initialize them before calling DoModal, and then transfer the values in OnInitDialog. Or perhaps in UpdateData(). Much like the ClassWizard member variables do it. Also: Member-Variablen definieren. Im OnInitDialog() diese Member-Variablen abarbeiten. Man kann einfach keine Parameter direkt übergeben vor dem Aufruf von DoModal(). So have your dialog include a CStringList or CStringArray, put the values for the listbox in that and transfer them to the listbox in OnInitDialog. [Etc....] Also den Dialog mit einem zusätzlichen Array oder halt einer Stringlist versehen. In diesen kannst Du dann alle Übergabeparameter reinknallen und bei DoModal wird dann der OnInitDialog() ausgeführt. In diesem müssen die Inhalte des Arrays in die Felder des Dialogs eingefügt werden und dann klappts auch mit dem UpdateData, falls man das überhaupt braucht! Diese z.B. mit Dlg.addString(&Wer) füllen. Init your dialog in OnInitDialog. If necessary, pass a pointer to your document to the constructor of your dialog (and save it in a private/protected m_pDoc member). Also das mit dem Pointer ist vielleicht auch noch eine Möglichkeit, dann kann man Referenzen vom Parentfenster übergeben und die Daten können sich auch außerhalb des Dialogs befinden (außerdem muß nicht wie wild durch die Gegend kopiert werden). Das ist jedoch die Qual der Wahl und das hängt vom Programmdesign ab. (Ja soll ich das jetzt so machen, oder so, oder vielleicht ganz anders irgendwie??? Vielleicht würfeln?) <FONT COLOR="#a62a2a" SIZE="1">[ 24. August 2001 15:59: Beitrag 1 mal editiert, zuletzt von Crush ]</font> Zitieren
maddin Geschrieben 27. August 2001 Geschrieben 27. August 2001 meine idee war die. du hast ja letzendlich zwei klassen, die sich um deine dialoge kümmern hast. nennen wir sie CMainDlg und CViewDlg; in der klasse CMainDlg hast du eine Funktion, die bei einem doppelklick auf die liste ausgeführt wird. über entsprechende eintrage in der messagemap. beispiel: void CMainDlg::OnDblClickList1() { UpdateData(); CViewDlg.SetInfo(m_user); CViewDlg.DoModal(); } in der zweiten zeile wird eine funktion von CViewDlg aufgerufen, die die membervariable ändet, die mit dem entsprechenden textfeld verknüpft ist. beispiel: void CViewDlg::SetInfo(CString info); { m_textfeld = info; } dadurch wird nicht direkt der text des steuerelements verändert, was ja wie mein vorredner schon erklärte nicht funktioniert, sondern die entsprechende variable, die mit dem steuerelement verbunden ist. beim aufruf von DoModal() wird dann der wert von der variablen in das steuerelement geschrieben. ähnlich der funktion UpdateData(FALSE); ich hoffe das das ein wenig verständlicher war. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.