Problem mit Slider in SDI
-
int atoi_wert1 = atoi(m_strAnzeige1);Wandelt den eingegebenene Wert den ich in das Editfenster schreibe in ein int Zahl um.
m_ctlSlider1.SetPos(atoi_wert1);Übergibt die int Zahl an die CSliderCtrl Variable und setzt damit den Slider an die Position der int Zahl
m_ctlSlider1.SetPos(neue_pos1);Macht das gleich an anderer Stelle.
Wenn ich dich richtig verstanden habe, ist das mist, dass ich 2x SetPos an unterschiedlichen Stellen verwendet habe.
Ich habe schon viel versucht. Stellenweise Funktionen zur testzwecken auskommentiert damit das doppelgeändere nicht aufkommt, aber eigentlich wurde es immer schlimmer.
Du schreibst das ich kein ChangeEvent berücksichtigen darf. Wie meinst du das?
Und warum funktioniert der Code bei einem reinen Dialog einwandfrei?PS: Mein VC++ Status ist eher angehender Fortgeschrittener
-
@ isabeau:
Diese Zeilen Übergeben die Aktuelle Position des Sliders als Wert in ein Editfenster. Ich bewege also den Slider und die Zahlen im Editfenster ändern sich laufend.
Auf diese Weise kann ich auch wunderbar die Werte einstellen, aber halt andersrum nicht. Ich änder den Wert im Editfenster und der Slider bleibt da wo er vorher war
-
Sieht für mich nur so aus, als ob du dir erst die aktuelle Sliderposition in akt_pos1 merkst.
Genau die gleiche Position merkst du dir dann in neue_pos1.
Und genau die gleiche Position setzt du dann im Slider.
Bis dahin ändert sich doch kein Stück an der Position.
Erst danach wird die Position im Editfeld angezeigt.
-
Stimmt, du hast recht
int neue_pos1 = m_ctlSlider1.GetPos(); SetDlgItemInt(IDC_WERT1, neue_pos1);macht genau das gleiche auch, nur 2 Zeilen kürzer.
Vielen Dank.1x SetPos wär damit eliminiert. Das eigentliche Problem besteht aber leider immernoch
-
Es ging mir eigentlich eher um die Fehlersuche. Hat Martin Richter doch auch schon oben angesprochen. Bei sich gegenseitig auslösenden Events zuerst aktuelle Position bestimmen und zurückschreiben ist schonmal so eine mögliche Fehlerquelle. Lösungsansätze stehen auch schon oben.
-
Darum gehts mir auch. Und jede Codezeile zuviel ist ein potentieller Fehler, daher war der Tip von dir schon nicht schlecht, wobei ich einen Funktionsaufruf gespart habe

Versteh das nur noch nicht so ganz.
Du schreibst das ich kein ChangeEvent berücksichtigen darf. Wie meinst du das?
Und warum funktioniert der Code bei einem reinen Dialog einwandfrei?
-
Dann müsste ich mehr von Denem Code sehen.
Grunsätzlich ist es so, dass Datenänderungen in einem Event, evtl. andere Events auslöst, das führt leicht zu unerwünschten Effekten und Rekursionen.Das müsstest Du einfach mal debuggen.
-
Ich werd mich mal am debugger versuchen, hab den bisher immer recht gut umgehen können :p
hier aber trotzdem mal ein bissel mehr von code.
void CComCentralOneView::OnChangeWert1() { UpdateData(TRUE); // wichtig!!! sonst geht gar nix int atoi_wert1 = atoi(m_strAnzeige1); // atoi von string to int m_ctlSlider1.SetPos(atoi_wert1); // int an Slider übergeben } void CComCentralOneView::OnChangeWert2() { UpdateData(TRUE); // wichtig!!! sonst geht gar nix int atoi_wert2 = atoi(m_strAnzeige2); // atoi von string to int m_ctlSlider2.SetPos(atoi_wert2); // int an Slider übergeben }OnChangeWert3() bis 5 analog
void CComCentralOneView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // Werte vom Slider werden an das Editfenster übergeben int neue_pos1 = m_ctlSlider1.GetPos(); SetDlgItemInt(IDC_WERT1, neue_pos1); // Wert der Bildlaufleiste im Textfeld anzeigen // 2ter Slider int neue_pos2 = m_ctlSlider2.GetPos(); SetDlgItemInt(IDC_WERT2, neue_pos2); // ... Slider 3 bis 5 analog CFormView::OnVScroll(nSBCode, nPos, pScrollBar); }An anderen Stellen bis auf OnInitialUpdate() greif ich nicht auf diese Variablen zu.
-
Warum setzt Du immer alle Variablen, wenn nur ein Slider bewegt wird. Es wird doch an OnVScroll en pScrollBar der angibt von welchem Slider es kommt!
-
Du kannst fragen stellen

Es tut mir leid, aber wie gesagt, ich bin noch recht neu in diesem Milleau. Ich sag mal, meine Variante kam mir schlüssig vor, als ich das ganze noch in einem normalen Dialog hatte, dann wurde es aber mehr und mehr und musste durch eine SDI Anwendung weichen, da funktionierte der Code auf einmal nicht mehr.
Also ich seh und les in der MSDN die 3 Zeilen über den Pointer ScrollBar. Weiss aber leider nicht wie ich ihn anwende, damit mein Problem behoben wird.
Ich hatte das für einen Slider geschrieben, dann brauchte ich 4 weitere und hab den einfachen Weg des Copy&Paste genommen *shame*