Editfeld und untergeordnetr Dlg verschwinden bei return
-
Hallo ihr,
hoffe, ihr könnt mir wieder bei meinem Problem helfen. Und zwar hab ich einen Hauptdialog(Hdlg), auf dem ein untergeordneter Dialog(UDlg) lieg. Auf UDlg liegt ein Editfeld. Ich habe mein Programm so geschrieben, dass wenn der Benutzer den HDlg vergrößert/verkleinert das Editfeld sich dementsprechend anpasst. Mit OnSizing() zeichne ich das Editfeld immer neu, wenn der Benutzer die Größe ändert. Das sieht wie folgt aus:
void AdjustCalibration::OnSizing(UINT fwSide, LPRECT pRect) { CRect pDlg, rDlg; int move=0; GetClientRect(&pDlg); rDlg = pDlg; //Passe untergeordnete Dialoge an tab1.MoveWindow(0, 0, pDlg.Width()-100, pDlg.Height()-20, TRUE); //tab1 = UDlg //prüfe, ob Benutzer die Randgröße verändert hat und passe dann die Größe der Elemente an if(Dlg != rDlg) { if(Dlg.right > rDlg.right) { move = Dlg.right - rDlg.right; xButton -= move; tab1.widthEdit -= move; } else { move = rDlg.right - Dlg.right; xButton += move; tab1.widthEdit += move; } if(Dlg.bottom > rDlg.bottom) { move = Dlg.bottom - rDlg.bottom; tab1.heightEdit -= move; } else { move = rDlg.bottom - Dlg.bottom; tab1.heightEdit += move; } } Dlg = rDlg; //CRect Dlg //Passe Button und Elemente von untergeordneten Dialog(en) an Hauptdialog an tab1.m_ctrlEdit.MoveWindow(tab1.xEdit, tab1.yEdit, tab1.widthEdit, tab1.heightEdit, TRUE); CDialog::OnSizing(fwSide, pRect); }
Wenn ich einen Text eingebe in dem Editfeld, ist alles okay. Jedoch wenn ich die Return-Taste bestätige, verschwindet der komplette UDlg und somit auch das Editfeld.
Weshalb? Meine OnPaint() sieht genauso aus wie die OnSizing(), nur dass hier dann CDialog::OnPaint() aufgerufen wird. Wenn ich dann den UDlg anklicke, erscheint er(Udlg) mit dem Editfeld wieder. Jedoch ist kein neuer Zeilenanfang im Editfeld. Kann mir jemand helfen?
Vielen Dank schon mal im Voraus!!
-
Fueg in deinem unterdialog noch eine fkt ein in der .cpp natürlich
void CMeinUnterDlg::OnOk() { // tue bloss nichts, ich sags dir!!!! :rage: :rage: :rage: }
Ich schätze die fkt. fehlt dir in deiner .cpp klasse vom unterdlg
-
Genau daran wird es leiegen. Es liegt daran, das du einen Satndart Button nahmaen OK hast, un mit return bestäigt du den. Du kannst mit nem bissel code aber auch etwas anderes bei return machen. oder halt einfach beim Classwizard die Fnktion löschen oder halt wie schon von newkid_ gezeigt.
-
Stimmt, auf meinem Hauptdialog habe ich einen Ok-Button!
Danke für den Tipp, werde es gleich mal probieren!
-
Hallo,
ich habe euren Rat befolgt, jedoch hat sich dadurch mein Problem nicht gelöst.
Ich habe auch zusätzlich in den Eigenschaften vom Editfeld "Return möglich" aktiviert, jedoch klappt es dann auch nicht.
Kann mir noch jemand einen Tipp geben woran es liegen könnte?
Danke!!
-
schau mal nach was dein erster TAB stopp ist
muesste
Strg+D sein zum nachschauen
dann lege den ersten tabstopp auf etwas was keinen code macht, z.b. staticfeld
wenn deine dlg läuft ist praktisch dieses element aktiv und fängt dein return ab.ist jetzt mal eine notlösung, denn wenn man tab weiterdrückt und dann return, kann sich der dlg auch schliessen, aber es hilft ein wenig bis du die wahre ursache hast.
das "return" handle auf dem editfeld, kannste wieder rausnehmen. du kannst ja auch versuchen das returnhandle auf dem editfeld zu lassen und in diesem code den button aufzurufen ( z.b. ADD button oder so ). weiss jetzt nicht ob das dir hilft
-
newkid_ schrieb:
schau mal nach was dein erster TAB stopp ist
muesste
Strg+D sein zum nachschauen
es erscheinen Zahlen an den Elementen. WEnn dass das ist, dann hab ich die Reihenfolge geändert und den Tabstopp auf ein Staticfeld gelegt. So wie du es empfohlen hast. Habe es dann auch getestet und wieder verschwindet mein untergeordneter Dialog.
ich verzweifle langsam wirklich an diesen return...danke aber für deinen Tipp. Kann ich sonst noch irgendwie feststellen woran es liegt?
Danke,
-
Kitty82 schrieb:
Hallo,
ich habe euren Rat befolgt, jedoch hat sich dadurch mein Problem nicht gelöst.
welchen rat hast du eigentlich befolgt?
-
das mit der OnOK(); habe sie eingefügt und erstmal leer gelassen. Immernoch der selbe Fehler. Habe dann etwas hineingeschrieben und mal einen Haltepunkt gesetzt, Programm ausgeführt, er ist nicht an den Haltepunkt angekommen. Sprich, dass er nicht in die OnOK() reinspringt...
-
hmm... hab die Ursache gefunden. Beim Editfeld muss man "Mehrzeilig" und "Return möglich" aktivieren.
Jetzt funktioniert es einwandfrei.
Danke, dass ihr euch so bemüht habt mir zu helfen.
-
das mit der OnOK(); habe sie eingefügt und erstmal leer gelassen. Immernoch der selbe Fehler. Habe dann etwas hineingeschrieben und mal einen Haltepunkt gesetzt, Programm ausgeführt, er ist nicht an den Haltepunkt angekommen. Sprich, dass er nicht in die OnOK() reinspringt...
Lösch die Funktion nochmal (in der Klassenansicht rechte Maustaste/löschen) und dann geh in den Dialog und halte STRG+Doppelklick, und dann dort auf OK klicken. Dann erzeugt er für die eine neue OnOK() aber ordnet die auch richtig zu, darin müsste dann schon stehen:
CDialog::OnOK();
Das musst du nur rausschmeissen:
// CDialog::OnOK();
Dein Dialog ist von CDialog abgeleitet und wenn du keine richtige OnOK hast wird die von CDialog aufgerufen, hast du eine, darfst du das OnOK natürlich nicht aufgerufen lassen
..
-
@Tow-B.de
das was du meinst, hatte ich auch schon ausgetestet. Hatte aber trotzdem nicht funktioniert.in meinem Beitrag vor deinem habe ich ja schon geschrieben, dass ich mein Problem gelöst habe. Trotzdem danke für deinen Tipp.