Bildaufbau, Tab-Reihenfolge Controls
-
hallo,
ich bin etwas neu in C++ MFC, (komme eigentlich aus VBasic).
was mich stutzig macht, warum wird ein dahinterliegendes Eingabefeld (CEdit) trotzdem ausgewählt, obwohl es von einem anderen Control (z.b. weiteres CEdit) überdeckt wird ?Nach meinem Verständnis dürfte dann das dahinterliegende Eingabefeld weder auswählbar noch während der Eingabe sichtbar sein.
Mache ich etwas grundlegendes falsch, eventuell falsche Einstellung des Dialogfeldes, oder muss ich Clipbereiche setzen?
Wenn ja ich wird es allgemein in C++ gehandhabt.Volker
-
Du hast also ein Edit, was über einem anderen liegen und das dahinter liegende verstecken soll? Wozu?
-
Hi Rene,
antwort ist eigentlich ganz einfach.
das im Fordergrund liegende Edit(style Multiline, und wird je nach der eingegebenen Textlänge automatisch bis zu einer bestimmten Höhe verändert bis z.b. 3 Zeilen erreicht sind-> dann bekommt dieses Edit eine V-Scrollleiste) hat den Focus und ich will den Cursor per Maus an eine andere Position im Edit setzen.Dummerweise bekommt nicht das davorliegende Edit den Mausklick sondern das zufällig dahinterliegende Edit ((Cursorpoint in CeditWindowRect), was eigentlich nicht sein darf, oder ???
genauso unverständlich ist für mich, das dynamisch oder bereits vorhandene Contols im Dialogfeld (cdialog) die über anderen controls liegen den Mausklick nicht abfangen, sondern das diese Message die darunter liegenden Control(s) erhalten.
oder sehe ich perspektivisch etwas falsch ???
Volker
-
Ich hab das zwar noch nie so erlebt, aber es liegt denke ich an folgendem:
Zeichnen der Controls:
FOR_EACH ChildControl IN Window
Window->Paint
NEXTMausklicks empfangen:
FOR_EACH ChildControl IN Window
IF Window->OnClick
BREAK
NEXTMan sieht also, dass beim Zeichnen einfach alles übereinander gesetzt wird, beim Empfangen von Nachrichten aber abgebrochen wird, sobald das erste Control gefunden wurde, welches die Nachricht verarbeitet, egal, ob noch eines kommt, welches sie verarbeiten könnte!
Hm, und wie kann man das nun verhindern?
Eine Idee wäre, per SetCapture alle Mausinputs zu empfangen
-
mmm.. ich glaube, das wird zu aufwendig, es muß andere methoden geben (im Visual Basic wird das perfekt gelösst), aber wie stellt man das in c++ effektiv.
Danke Volker
-
Wie kommst Du darauf, dass Du mit C weniger Codezeilen als mit Basic brauchst? Diese Herangehensweise ist völlig falsch!
-
ich wollte damin nicht sagen das man in c++ weniger schreiben muss oder das c++ nichts kann, zu umständlich ist oder oder .... jede programmiersprache hat durchaus ihre berechtigung.
die frage ist immer nur wo ist was effizenter. und da für meine jetzige applikation auch in hinblick von performens und multithread c++ die bessere variante ist, sind die aufgetretenen effekte etwas gewöhnungsbedürftig.
für mich ist nur die frage, wie bewältigen andere programmierer diese hirte und wie wurde es in andere applikationen gelöst (mein beispiel war nur VB).Volker