Kontrollkästchen in der TListView Header-Spalte - Wie verhindert man, dass der Fokus gestohlen wird?

8

Dies hängt mit der Frage zusammen ein Kontrollkästchen in der TListView-Kopfzeilenspalte? .

Ich möchte den Code von diese Antwort verwenden by @Sertac Akyuz . (Ich brauche das auch in WinXP zu arbeiten)

Aber ich möchte die CheckBox-Kopfzeile machen, um den Fokus nicht von der ListView oder anderen aktiven Steuerelementen zu stehlen.

Eine schnelle Problemumgehung besteht darin, den Fokus immer auf die ListView in ListHeaderWndProc :

zu setzen %Vor%

Aber das ist irgendwie hässlich. Da die CheckBox zuerst fokussiert wird, kehrt der Fokus zurück zur ListView. Wenn ich auf das Kontrollkästchen klicke und die Maus außerhalb der CheckBox halte, wird die Nachricht BN_CLICKED nicht angezeigt.

Ich habe es auch versucht:

%Vor%

Nichts funktioniert. Was vermisse ich?

    
kobik 04.02.2013, 14:04
quelle

1 Antwort

7

Verarbeitet nicht die WM_COMMAND -Nachricht für eine BN_CLICKED -Benachrichtigung, das Verhalten, das Sie über einen Klick beim Drücken der Taste und dann Ziehen außerhalb wollen, sonst funktioniert der Klick nicht. Ein Klick besteht aus Drücken und Loslassen der Taste auf dem Steuerelement.

Stattdessen können Sie nachsehen, ob die Maus innerhalb des Steuerelements geklickt wurde und dann den aktivierten Zustand wechseln, falls dies der Fall ist. Sie können die Maus danach essen, so dass das Steuerelement den Fokus nicht erhält. Dies sollte jedoch in der Fensterprozedur des Kontrollkästchens und nicht in der Listenansicht überprüft werden. Geänderter Code:

%Vor%     
Sertac Akyuz 04.02.2013, 19:28
quelle

Tags und Links