Klicks auf bestimtme Bereiche verarbeiten
-
Hallo,
in meinen Programm wird ein Schrank dargestellt, den man nach seinem eigenen belieben Designen kann. Dazu wollte ich einen Bereich von 5x5 20x40 großen Rectangles erstellen. Nun muss ich aber einen Klick auf ein bestimmtes "Feld" abfangen und verarbeiten. Wie mache ich das am besten, bzw. geht das überhaupt mit Rectangle() oder sollte ich es mit etwas anderem probieren?Grüße!
-
Die Rectangles kannst du zum Sichern der Werte an sich verwenden, aber für die Abfrage würde ich dir empfehlen, die Koordinaten des Mausklicks gegen die Maße des Rechtecks zu prüfen. Dazu ziehst du einfach die Koordinaten des Rechtecks von den Koordinaten des Klicks ab und schaust dann, ob x kleiner als die Länge und y kleiner als die Höhe des Rechtecks ist. Mein Vorschlag jedenfalls ...
EDIT: Du musst aber darauf achten, dass x und y nicht kleiner als 0 sind, sonst ist der Klick auch außerhalb des Rechecks gewesen.
Du kannst ja auch die Rechtecke als Steuerelemente verwalten und dann in deiner MessageLoop gegen die Identifier abfragen. Dann sparst du dir die Berechnung, weil das OS die Nachricht bereits verwaltet und dir den Identifier des Elementes deiner ML als Parameter übergibt.
-
Für RECT und CRect gibt es doch genug Mehtoden wit PtInRect etc.
Bau Dir einen Array auf aus den elemengten und prüfe entsprechend.
-
Martin Richter schrieb:
Für RECT und CRect gibt es doch genug Mehtoden wit PtInRect etc.
Bau Dir einen Array auf aus den elemengten und prüfe entsprechend.
CRect will er wohl kaum benutzen, sonst hätte er in der MFC-Abteilung gepostet - ist dir in deinem Reich langweilig?
Das mit dem Array ist mir Anfangs auch noch durch den Kopf gegangen, aber dann habe mich an die goldene Regel des Programmierens erinnert: "Mach's dir so leicht wie möglich.". Ist doch Unsinn, bei jedem Klick erst das Array von Elementen durchzugehen und dann auf jedes Element zu prüfen, wenn das OS das auch machen kann ... oder sehe ich das falsch? Die ID wird als Parameter übertragen, hiervon kannst du dir ein Handle holen, und dann hast du ganz einfach Vollzugriff auf die Teile deines Schranks.
-
Irgendwann alles in Fenster aufzuteilen ist sinnlos.
Man baut ja auch kein Listcontrol aus Statics für jede Zeile umd die Koordinaten leichter bestimmen zu können.PS: Bzgl. "mein Breich", evtl., ist es Dir entgangen, dass ich hier auch Moderator bin.
-
Martin Richter schrieb:
Irgendwann alles in Fenster aufzuteilen ist sinnlos.
Stimmt! Nur Fenster (controls sind auch solche) kann man mit WinApi-Funktionen abfragen. Für irgendwelche Rechtecke kann man nur Koordinaten erhalten, die von der aktuellen Auflösung des Bildschirms abhängig sind. Geht nichts drumherum, da ist mit WinApi etwas mehr Aufwand erforderlich.