ButtonDown auf touchscreen???



  • 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 kommt

    Oder????



  • 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 kommt

    Oder????

    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...



  • Ich weiß jetzt was los ist...
    Die "OnLButtonDown" wird nur an den Dialog gesendet. Du mußt auf WM_COMMAND reagieren.



  • Ich glaube ich bin total dämlich.
    Gibt es für einen Touchscreen keine Spin-Buttons?



  • Joh dat is ne Möglichkeit mit den Spins!

    mal testen...



  • Damit ersparst Du Dir eine Menge Arbeit...
    ...Ja, der Weltraumpapst ist ein Reptil



  • so nochmal danke für die Hilfe und die tips, Werd es über die SpinBox lösen.

    Greetz


Anmelden zum Antworten