Focus rectangle deaktivieren
-
Hi!
Wie schalte ich das "focus rectangle" ab? Es sieht einfach hässlich aus.
Mein Programm habe ich übrigens nicht per Tastatur gestartet, sondern ganz normal mit der Maus doppelgeklickt.Außerdem frage ich mich, wann es denn erscheint, und wann nicht. Jetzt zB. kann ich es nicht mehr verschwinden lassen.
http://www.bilder-space.de/show.php?file=23.07raSY1aKzwYJtDk1.JPG
-
Geht das denn nicht?
-
Was ist das für ein Control? Ein List Control?
Wenn es ein List Ctrl ist, dan kann man das Focus Rect nicht abschalten. Es erscheint dann wenn das Control den Focus hat (wie der Name eben schon sagt).Warum findest Du das hässlich? Es gibt für jemanden der Dein Programm mit der Tastatur bedient die Möglichkeit Zeilen selektiv auszuwählen, auch ohne Maus.
Wenn Du das Focus Rect selber zeichnest, dann kannst Du einfach das Focus Rect nochmal zeichen. Dann verschwindet das Rect, da hier einfach ein XOR auf dem DC gemacht wird.
-
Ne, ich zeichne nix selber.
Ist ein ListView, ja.Eigentlich würde ich das auch gerne für Buttons abschalten. Aber das geht wohl eh nicht.. sowas dummes. Ich finds halt hässlich und nervig.
Und für eine Liste braucht man das doch schon überhaupt nicht, man sieht doch, welche Zeile markiert ist.
Wann erscheint es eigentlich? Ich starte mein Programm nämlich mit der Maus, nicht mit der Tastatur.
-
Du irrst! Man braucht dies auch für eine Liste, denn man kann mit Strg+Pfeiltaste das Focus Rectangle versetzten ohne die Zeile zu markieren.
Dito für einen Button... Woher soll man den sehen was passiert wenn man die Leertaste drückt, wenn man nicht weiß auf welchem Button der Focus ist?
-
Ok, aber ich gehe davon aus, dass mein Benutzer eine Maus hat und diese zu bedienen weiß.
Wir haben bald 2010
-
Rectangl0r schrieb:
Ok, aber ich gehe davon aus, dass mein Benutzer eine Maus hat und diese zu bedienen weiß.
Wir haben bald 2010
Irrtum!
Auf meinem Laptop bevorzuge ich die Tasten, wenn ich keine Mausunterlage habe!
Und das wird auch in den nächsten 10 Jahren passieren, jedenfalls solange wir noch keine 3D-Gestensteuerung haben
Und selbst auf meinem Desktop-PC bevorzuge ich immer noch die Tastatur, weil damit vieles einfach schneller vonstatten geht als mit der Maus.
Schieb mal die Maus über zwei Bildschirme hinweg und wieder zurück, nur um einen Button anklicken zu müssen
Martin
-
Rectangl0r schrieb:
Ok, aber ich gehe davon aus, dass mein Benutzer eine Maus hat und diese zu bedienen weiß.
Wir haben bald 2010
Genau! Und aus diesem Grund sollte jedes Programm immer noch Tastatur Aware sein.
Ich hasse Programme, die ich nicht komplett mit der tastatur steuern kann.
Die Maus zu verwenden ist weitaus langsamer...Ich kann mich Mmacher nur anschließen.
-
Ok, bei den Buttons erkennt man es aber am blauen Rahmen.
-
Außerdem könnte bei dem ListView das focus rectangle wenigstens verschwinden, wenn man andere controls betätigt.
Es bleibt aber immer...
-
Rectangl0r schrieb:
wenn man andere controls betätigt.
Nun erstmal ein wenig Grundsätzliches, wie es bei Dialogen sein soll:
Wenn man einen anderen Control betätigt (egal ob per Maus oder per Tastendruck), dann soll dieser Control den neuen Fokus bekommen.
Und der ListView verliert konsequenterweise den Fokus und somit auch dieses focus rectangle.Das bedeutet für Deine Applikation:
Hast Du eigenes Fenster (z.B. mit Tabellendarstellung und paar Buttons nebenan) mit eigener Verwaltung erstellt, so muß Du das ganze mit SetFocus() (oder je nach seltener Situation mit KillFocus() ) koordinieren.Hast Du dagegen einen Dialog erzeugt, so mußt Du:
a) entweder dem Dialog-Manager den Fokus-Handling überlassen (er macht das automatisch richtig) oder
b) den Fokus explizit mit WM_NEXTDLGCTL auf einen anderen Control setzen (hier nicht mit SetFocus(), siehe auch http://blog.m-ri.de/index.php/2007/08/24/setfocus-versus-wm_nextdlgctl )HTH,
Martin