ButtonDown auf touchscreen???
-
Ich glaub nicht das jeder Button seine eigene OnLButtonblabla Funktion hat.
Die Funktion ist allgemein für alle Buttons oder Kontroll ID gültig.
Bin mir aber nicht sicher, bzw. ich hab so etwas nicht gefunden.
-
Anders ist es natürlich schwerer. Aber durch einen Timer, indem die Koordinaten mit den oben genannten Funktionen abgefragt werden müßte es möglich sein. Ein Thread könnte diese Aufgabe auch erledigen.
-
monne81 schrieb:
Ich glaub nicht das jeder Button seine eigene OnLButtonblabla Funktion hat.
Wenn das beim Embedded nicht total anders gelöst ist, hat jeder Button seine EIGENE OnBtnDingsda.
Nur die LButtonDown usw, die gehen an den Dialog.
-
Wie kann ich denn die Kordinaten eines Buttons bzw. eines Kontroll IDs abfragen ?
GetWindowPos gibt es nicht!
-
Sind die Buttons eigene Fenster oder nur gezeichnete Elemente?
-
Starte do bei ButtonDown einen Thread der in einer Schleife deine Variable setzt und das so lange wie kein ButtonUp kommt. Denn ButtonUp beendet den Thread.
Pseudocode:
BOOL EndeThread; Thread { while(EndeThread == FALSE) { //Variable setzen und ne Pause einfügen } } ButtonDown { EndeThread = False; Starte Thread; } ButtonUp { EndeThread = True; }
Mein Vorschlag dazu, so zur Diskusion, gibt sicherlich noch andere Möglichkeiten. ZB: Anstatt des Threads einen Timer zu benutzen, mußt diesen mur starten und beenden.
Gruß
-
Sorry, GetWindowRect muss es heißen.
Dafür brauchst du nen Zeiger (CWnd) auf den Button.
-
@RR sind im Dialog editor gezeichnete Buttons also gezeichnete Elemente!
@estartu:
im Class Wizard gibt es nur die OnBeenClicked und Doubleclicked Message,
die OnLButtoDown ist für den ganzen Dialog, oder suche ich da an der falschen Stelle?
-
monne81 schrieb:
Wie kann ich denn die Kordinaten eines Buttons bzw. eines Kontroll IDs abfragen ?
GetWindowPos gibt es nicht!Versuch's mal mit GetWindowRect().
-
Nachtrag: Du kannst auch mit ChildWindowFromPoint(pos) bestimmen, auf welches Dialog-Element gedrückt wurde.
-
gezeichnete Elemente generieren kein eigene "OnLButtonDown"-Nachricht, man muß die Koordinaten durch "GetWindowPos" abfragen und dann die Point-Koordinaten mit "PtInRect" überprüfen. Dafür muß natürlich das RECT der Elemete bekannt sein. Gegebenfalls müßen die Koordinaten durch "ScreenRectToClientRect" transformiert werden.
Wenn die Elemete dreieckig sind wird alles komplizierter.
-
Ja mit getWindowRect frage ich aber nur die Koo des Windows ab, nicht die eines ContolItems!!!
-
Entschuldigung, natürlich "GetCursorPos" und nicht "GetWindowPos"
-
Monne, lies nochmal ganz ruhig Seite 2 dieses Beitrags. Ich glaube du hast ein paar Zeilen überlesen.
-
Ich vermute Du hast meine Frage falsch verstanden.
RR schrieb:
Sind die Buttons eigene Fenster oder nur gezeichnete Elemente?
Zeichnest Du die Buttons in "OnPaint" selbst, oder, wie ich vermute und aus Deiner Antwort entnehme hast Du sie als Ressource erzeugt?
...Aber dann müßten sie eine "OnLButtonDown"-Nachricht generieren
-
So ich mach jetzt folgendes, ich nehm einen Hammer und hauf auf das LCD...nicht
Ich mach die OnButtonDown Abfrage, prüfe in welchen Bereich geclickt wurde,
und starte dann den Thread der so lange die Operation ausführt bis OnButtonUp kommtOder????
-
monne81 schrieb:
Ich mach die OnButtonDown Abfrage, prüfe in welchen Bereich geclickt wurde,
und starte dann den Thread der so lange die Operation ausführt bis OnButtonUp kommtOder????
Klingt schon gut. Aber vielleicht solltest du noch irgendwie prüfen, ob die Maus den Bereich des Buttons verlässt. Aber ich denke, das kann warten, bis der Rest funktioniert - der Ansatz klingt gut.
-
monne81 schrieb:
Ja mit getWindowRect frage ich aber nur die Koo des Windows ab, nicht die eines ContolItems!!!
ControlItems sind in MFC auch Fenster
(genauer: abgeleitete Klassen von CWnd) - also kannst du für die auch GetWindowRect() aufrufen:
CRect r; for(int i=0;i<btn_ct;++i) { Cwnd* btn=GetDlgItem(ID_BUTTON0+i); btn->GetWindowRect(r); if(r.PtInRect(pos)) btn->.OnDown(); }
PS: Aber warum sich selber die Mühe machen, alle Buttons nach ihren Koordinaten zu fragen? Das kann der Dialog doch auch selber machen:
CWnd* btn = ChildWindowFromPos(pos); btn->OnDown();
-
Ich glaube ich weiß gar nicht, um was es hier geht
-
So folgendes Problem:
wenn ich auf irgendeinen Button klicke passiert gar nichts! Erst wenn ich auf meinen Hintergrund clicke springt der Compiler in die OnLButtonDown Methode!
cih habs mal so realisiert, allerdings nur um zu prüfen ob der richtige Button gewählt wird.
void CDlgHeadsetNew::OnLButtonDown(UINT nFlags, CPoint point) { CButton *button; button=(CButton*)ChildWindowFromPoint(point); int a=button->GetDlgCtrlID(); switch (a) { case IDC_BUTTON_incrR: { m_R+=10; UpdateData(false); } break; }
scheint das beim Touchscreen die OnLButtoDown nicht funktioniert...