Dauerhaft gedrückter button



  • Hi,

    ich brauch einen button welcher im gedrückten zustand messages verschickt, wenn man hin mit der mouse loslässt er aufhört,..

    BS_PUSHBUTTON mit BN_PUSHED hörte sich danach an, aber das klappt bei mir irgendwie net.

    Mit WM_LBUTTONDOWN und mousekoordinaten verarbeitung ist mir gerade zu aufwändig, gibts da nicht etwas von der Palette??

    Seid gegrüßt,...



  • zeusosc schrieb:

    ich brauch einen button welcher im gedrückten zustand messages verschickt

    Das finde ich schlechtes Design. Und wie sollte das gehandhabt werden? 1 Nachricht pro Sekunde? 1000 Nachrichten pro Sekunde? Oder bis zur vollständigen Prozessorauslastung?
    Du könntest eher mit deinen Aktionen (in neuem Thread) beginnen, wenn du die BN_PUSHED bekommst und damit aufhören, wenn die BN_UNPUSHED kommt.

    Ansonsten könntest du auch beschreiben, was du bei diesen Endlosnachrichten vorhast, evtl fällt jemandem sonst noch ein besseres Design ein.



  • Jo so etwas in der art, ich denke aber es würde reichen wenn der den status alle 500ms abfragt, wofür man natürlich auch einen timer nehmen könnte,...
    Ich habe gehofft das es so etwas als standardimplementation gibt.

    Ich bekomme keine BN_PUSHED nachricht, sondern nur BN_SETFOCUS bzw. BN_CLICKED
    Der Style ist:
    WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_NOTIFY

    Ich bekomme mittels keybordfocus die BN_SETFOCUS msg,...

    Danke und sei gegrüßt



  • Note This notification message is provided only for compatibility with 16-bit versions of Microsoft Windows earlier than version 2.0. Applications should use the BS_OWNERDRAW button style and the DRAWITEMSTRUCT structure for this task.



  • "Ich habe gehofft das es so etwas als standardimplementation gibt."

    Erkenntnisse aus der Welt von Visualbasic, wo ja mit sogenannten Standards herum gepfuscht wird, das einem das Licht ausgeht bzw. das warten bis der Arzt kommt zur Qual wird, besagen: Mache es lieber selbst! Weil alles was M$ dazu baut eignet sich besser zur Selbstschussanlage als zu einem tauglichen Programm.

    Der Tipp ist Gold wert!

    Damit das kein Geschwafel wird, wie würde ich es lösen:

    Ich würde einen Thread erstellen, der beim Drücken des Buttons startet. Jener Thread versorgt die Fensteroutine mit einer eigenen! WM_MYMESSAGE die via RegisterWindowMessage( ... ) erstellt wurde. Ein bestimmtes anders Event killt den Thread dann wieder.


  • Mod

    @CStern: Dazz benötigt man doch keinen eigenen Thread!
    Einfach auf WM_LBUTTONDOWN einen Timer starten. Der Timer Handler versendet die Nachricht. Bei LButtonUp wird der Timer gekillt.



  • @Martin:

    Button subclassen und dann WM_LBUTTONDOWN ?

    gruß
    -------
    @old_school: slide?


  • Mod

    Jupp! Einfach den imer erzeugen, dann Default aufrufen...
    Beim LButtonUP Timer killen.

    Da der Button IMHO einen Capture setzt bekommst Du immer den LButtonUp mit.



  • Martin Richter schrieb:

    @CStern: Dazz benötigt man doch keinen eigenen Thread!
    Einfach auf WM_LBUTTONDOWN einen Timer starten. Der Timer Handler versendet die Nachricht. Bei LButtonUp wird der Timer gekillt.

    Kommt ja darauf an, was er damit machen will. Ich würde meine Nachrichtenprozedur nicht ständig von einem gedrückten Button anpollern lassen. Deswegen würde ich einen Thread damit beschäftigen.


  • Mod

    Warum soll da ein Thread besser sein, wenn es doch genau das Ziel ist regelmässige Nachrichten zu erzeugen (so der OP). Ich verstehe Deine Argumentation nicht.



  • zumal "so alle 500ms" doch nach einem timer bettelt.
    es ist mit timer einfacher geschrieben, macht weniger ärger, wenn die message-verschickung mehr daten braucht oder was rückmelden soll, verbraucht weniger resourcen. die nachrichtenprozedu alle 500ms anpollern zu lassen, ist doch kein problem. die maus allein pollert ja schon viel mehr. und der timer pollert ja nur, solange der knopf gedrückt ist. der wird ja wieder gestoppt, wenn der knopf losgelassen wird.


Anmelden zum Antworten