Ich habe es noch nie gemacht, aber ich würde beginnen, indem ich auf die Stelle des Mausklicks schaue. Ich konnte dann herausfinden, wie weit der Track durch die aktuelle Ausdehnung der Trackbar entfernt wurde, und den Ort des Trackers auf diesen Punkt setzen.
Ich würde damit beginnen, die Steuerung zu überschreiben und die mausbezogenen Ereignisfunktionen (OnMouseDown()
, z.B.) zu manipulieren. Beachten Sie, dass es in einigen Fällen wichtig sein kann, die Implementierung einer überschriebenen Funktion in der Basisklasse aufzurufen. Achten Sie darauf, dass Sie sie von Fall zu Fall berücksichtigen. (Ich bin gerade davon betroffen, so ist es frisch in meinen Gedanken.)
Beachten Sie, dass Sie nur das Verhalten von Standard-Steuerelementen auf diese Weise ändern sollten, wenn Sie einen zwingenden Grund haben. Sie sind Standard, weil sie sich in vielen Hunderttausenden von Programmen auf vorhersehbare Weise verhalten. Etwas zu machen, das sich nur für Ihr Programm anders verhält, kann die Principle of Lease Astonishment verletzen. Der einzige Trackbar, an den ich denke, dass ich mich so verhalten werde, wie du es beschreibst, ist für irgendeinen Media Player.
Bearbeiten: Basierend auf Ihrem Kommentar, ja, ich denke, Sie haben einen zwingenden Grund. :)
Das Standardverhalten ist für das Track-Feld, um eine Entfernung zu verschieben, die von "LargeChange" angegeben wird, nicht die Hälfte der Entfernung zwischen der Box und dem Klick. –
Danke für die Info, ich habe nie wirklich verstanden, was es macht, ich dachte immer, es wäre ein bisschen zufällig. –