Gå til innhold

WM_KEYDOWN og WM_KEYUP vil ikke trigges i WndProc


Anbefalte innlegg

void __fastcall enKlasse::WndProc(TMessage& aMsg)
{
if(aMsg.Msg == WM_KEYDOWN)
{
	if (aMsg.WParam == VK_SHIFT)
	{
		 m_bShiftDown = true;
	}

}
else if(aMsg.Msg == WM_KEYUP)
{
	if (aMsg.WParam == VK_SHIFT)
	{
		 m_bShiftDown = false;
	}
}
       else if(aMsg.Msg==WM_CUSTOM_PASTE_CLIPBOARD_DATA_ON_IE)
       {
               Helper::AddDataFromClipboard(browser);
       }
}

Er det noen opplagte feil her? Jeg klarer ikke å få aMsg.Msg == WM_KEYDOWN og aMsg.Msg == WM_KEYUP til å bli true, uansett hva jeg gjør.

Lenke til kommentar
Videoannonse
Annonse

Hvis vinduet ditt ikke har focus, vil det ikke få disse meldingene fra os. Prøv å kalle SetFocus fra f.eks WM_KEYDOWN.

 

Det er også enklere å bruke GetKeyState(VK_SHIFT) der hvor du trenger det istedefor å prøve å lagre det selv i en egen variabel (m_bShiftDown).

Lenke til kommentar

Hadde det bare vært for å sjekke om shift er nede så kunne jeg brukt GetKeystate, Men det jeg prøver å oppnå men som ikke vises i koden er at når en spesifik komponent har fokus så trenger jeg å få vite om shift er nede og tab blir trykket og når en annen spesifikk komponent er i fokus så trenger jeg å vite når tab er trykket.

Men Tab tasten fyrer ikke av noen event slik som alle andre taster annet en at den endrer sin Keystate mellom 0 og 1.

 

Dette ble litt rotete men håper noen forstår problemet.....

Lenke til kommentar

Vel, tab forsvinner vanligvis i TranslateMessage/IsDialogMessage kall i message loopen din. Dette fordi windows bruker tab til å skifte fokus mellom child vinduer. Vet ikke hvilket rammeverk du bruker her, men se om den har en PreTranslateMessage funksjon eller liknende.

 

Eventuelt kan du bruke WM_GETDLGMESSAGE med retur av DLGC_WANTALLKEYS.

 

Hjelp her.

 

Alt dette gjeler som sagt kun hvis vinduet ditt har fokus. Hvis det er child vinduer som har fokus så er det de som vil få WM_KEYDOWN etc. Da må du enten subklasse dem eller lage en global keyboard hook.

Endret av OldMan
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...