Wählen Sie den gesamten Text in der Bearbeitungssteuerung aus, indem Sie auf Strg + A klicken

8

Wie Sie den gesamten Text im Bearbeitungssteuerelement auswählen, indem Sie Strg + A ? Ich kann Strg + A für das übergeordnete Fenster in WndProc abfangen. Aber ich weiß nicht, wie man ctrl + a fängt, die für das Edit-Steuerelement angewendet werden. Auch ich habe versucht, Beschleuniger zu verwenden, aber es gilt wieder nur für Elternfenster. Vielen Dank. EDIT: 1.ste die einfachste Methode Diese Methode basiert auf @ Phords Antworten in dieser Frage: win32 wähle alle auf Edit Strg (Textbox)

%Vor%

EDIT: 2. Methode Benötigen Sie CreateAcceleratorTable + TranslateAccelerator Funktionen:

// globale Variablen:

%Vor%

// Hauptverfahren

%Vor%

// Wie die GetMessage-Schleife aussieht

%Vor%

// in WndProc müssen wir nächste Fälle hinzufügen

%Vor%

Wie Sie sehen können, ist das ziemlich einfach.

    
CEO at Apartico 12.04.2012, 15:43
quelle

3 Antworten

8

Keine Notwendigkeit, WM_KEYDOWN zu behandeln! Ich weiß, dass die meisten Beispiele hier (und CodeProject und viele andere Orte) sagen, dass es gibt, aber es heilt nicht den Piepton, der entsteht, wenn ein WM_CHAR entsteht, der nicht behandelt wird.

Versuchen Sie stattdessen Folgendes:

%Vor%

Denken Sie daran, das Edit-Steuerelement zu diesem Edit_Prc () unter Verwendung von WPA = SetWindowLong (...) abzulagern, wobei WPA die Fensterprozeduradresse für CallWindowProc (...)

ist     
user1418124 18.08.2014 03:16
quelle
6

Ändern Sie zuerst das WindowProc für das Bearbeitungssteuerelement:

%Vor%

Verarbeite dann im neuen Fenster proc die Strg + a:

%Vor%     
Jichao 17.01.2013 03:19
quelle
0

Noob-Proof-Version?

Ich habe meine eigene Version auch mit einer Accelerator-Tabelle geschrieben. Dies räumt die WinMain ein wenig aus, und ich habe versucht, alles so n00b-sicher wie möglich zu machen (da ich eins bin). Auch das Enum wird weggelassen, da es nicht benötigt wird.

Wie gesagt, ich bin nur ein Anfänger in der Verwendung der Winapi, also bitte auf alle Fälle korrigiere mich, wenn ich falsch liege.

In "Resource.h" definiere ich zwei IDs Eine für den Beschleunigertisch, den wir verwenden werden, und eine für den selectall-Befehl, den wir verwenden werden.

Inside Resource.h:

%Vor%

Dann innerhalb der Ressourcendatei (in vs2017 ist dies PROJEKTNAME .rc) Wir definieren die Beschleunigungstabelle. PROJEKTNAME .rc:

%Vor%

Beschreibung

0x41 ist virtkey 'a'.

ID_SELECT_ALL (ist die ID des Befehls, dies sollte die ID sein, die wir in der Datei Resource.h definiert haben.

Das Schlüsselwort VIRTKEY weist darauf hin, dass 0x41 als virtueller Schlüssel interpretiert werden sollte.

CONTROL ist der Modifikator, der benötigt wird, um das a mit (ctrl + a) zu kombinieren.

Laden Sie dann in der WinMain-Funktion den Beschleuniger:

%Vor%

Hinweis: Nach dem Versuch, hAccel zu definieren, prüfen wir, ob ein gültiger Handle zugewiesen wurde. Obwohl das nicht nötig ist, glaube ich, dass es eine bessere Konvention ist.

Danach fügen wir die TranslateAccelerator-Funktion zur Nachrichtenschleife hinzu, so dass der Befehl in der Fensterprozedur verarbeitet werden kann:

%Vor%

Dann endlich in der Window-Prozedur Wir fügen den Code wie folgt hinzu:

%Vor%

Hinweis: Die an WM_COMMAND übergebene Nachricht ist die ID, die wir für die ctrl + a accel definiert haben.

Ich hoffe, das wird anderen helfen.

    
Sotem 07.02.2018 13:35
quelle

Tags und Links