Na, wo habe ich geklickt....
-
Aloha,
Ich habe 100 Button auf einem Formview.
Kann ich anhand eines LeftButtonClicks erkennen, welchen Button ich geklickt habe.
Das ich die Pos auslesen kann ist mir schon klar, aber kann ich direkt erkennen, welcher Button auf dieser pos liegt ?
Ich habe keine Lust 100 Funktionen OnButtonClick immer mit dergleichen Soße zu füllen...
Beste Grüße
BOA
-
Hm, sicher das du Buttons brauchst ?
Wenn du ne Funktion für WM_LBUTTONDOWN machst,
bekommst du die koordinaten des Klicks mit geliefert,
dort kannst du dann die Überprüfung machen.Devil
-
Aloha,
du hast Recht, ich habe Statics keine Buttons, die auf einen Klick reagieren sollen.
Meine Frage ist, ich klicke irgendwo, bekomme dann auch die Klickpos, ich will aber auch das Static zugreifen können, das darunter liegt, soll heißen ich benötige die IDC_FELD1 - Nummer, damit ich mit GetDlgItem(IDC_SONSTWAS) das Item bekomme um es zu manipulieren.
Grüße
BOA
-
hm, wenn alle Statics hinter einander angelegt wurden, und in der
richtigen reihenfolge liegen, dann sollte die ID vom Nachfolger
um 1 höher sein, als die 'eigene' und der Vorgänger um eins geringer.
Der Obere Nachbar, naja, das kannst du ja selbst ausrechnen
Wenn das so ist, müsstest du nur die ID des 1 Statics kennen, auf die du
dann immer die notwendige Zahl draufadierst, um das "geklickte" Static
zu erhalten.Ne andere Möglichkeit wäre, ne Klasse von CStatic abzuleiten, und dort
die behandlung zu machen, und dann die 100 Statics einfach per Create zu erstellen.Devil
-
Aloha noch einmal,
nö, die Statics liegen durcheinander, immer wenn ich mal Lust hatte, habe ich eins angelegt.
Ich habe aber alle Statics in einem Feld, sodaß ich problemlos über das Rect der einzelnen Statics das abprüfen könnte, dachte gibt aber ne Möglichkeit, gleich das IDC zu erhalten, nur über die Message...
Hhhmm, ok, vielen Dank, traumhaftes WE noch...
Grüße
BOA
-
BOA schrieb:
Meine Frage ist, ich klicke irgendwo, bekomme dann auch die Klickpos, ich will aber auch das Static zugreifen können, das darunter liegt, soll heißen ich benötige die IDC_FELD1 - Nummer, damit ich mit GetDlgItem(IDC_SONSTWAS) das Item bekomme um es zu manipulieren.
wenn du die click-position hast, dann könnte es so gehen:
POINT pt; pt.x = click_x; pt.y = click_y; CStatic *my_static_control = (CStatic*)ChildWindowFromPoint(pt);eventuell muss man die koordinaten noch in screen- oder client-koordinaten umwandeln, je nachdem was die funktion haben will.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cwnd.3a3a.screentoclient.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cwnd.3a3a.clienttoscreen.asp
-
Ich denke es ist einfacher, nicht mit Koordinaten zu arbeiten, sondern das ON_COMMAND macro in der Message Map durch ON_COMMAND_RANGE zu ersetzen.
ON_COMMAND_RANGE(idDesErstenButtons, idDesLetztenButtons, OnMeineButtonOrgie) afx_msg void OnMeineButtonOrgie(UINT nID) { // nID ist der ID des buttons, den du geklickt hast }Dazu mußt du aber den Buttons numerisch aufeinanderfolgende ID's geben, das geht am besten, wenn man in der resource.h die entsprechenden einträge für den ersten und letzten Button selbst vornimmt (und die AFX-Makros am ende anpaßt!)
-
IMHO bekommen alle STATIC als ID standardm. IDC_STATIC. Darum nent man sie ja auch static da es statischen Text aufnimmt.
Dh du musst sie umbenennen.