PreTranslateMessage

Dipsi

Mitglied
Hallo

Projekt: Dialogbassiert/MFC

Ich hab da ein Problem mit PreTranslateMessage.
Und zwar fange ich eine Tastenkombination ab. (Leider funktioniert das noch nicht so
wie ich will.)

Code:
BOOL CchatDlg::PreTranslateMessage(MSG* pMsg)
{
	if(pMsg->message == WM_KEYDOWN)
	{
		
		if((::GetKeyState(VK_SHIFT)) && (pMsg->wParam == VK_RETURN))
		{
                   //Mach etwas
		}
		
		else if(pMsg->wParam == VK_RETURN)
		{
		   //Mach etwas
		}
	}
	return CDialog::PreTranslateMessage(pMsg);
}

Wenn ich Shift mit Return drücke führt er die Funktion aus.
Aber, wenn ich Shift drücke und wieder loslasse dann Return drücke führt er die Funktion wieder aus. (Sollte er ja nicht weill sonst das "else if" nie eintrifft.
Was muss ich genau machen, damit das funktioniert?
(Hab gedacht, wenn ich nur Shift gedrückt habe, die Message löschen.....) :-(
 
Ok hab es jetzt geschaft. Aber weiss nicht wieso!?

Code:
if((::GetKeyState(VK_SHIFT) & 0x8000) && (pMsg->wParam == VK_RETURN))

Für was steht das "& 0x8000"? (Hab es im Internet gefunden).
 
Bit 15 steht für den Status der Taste (1 - Taste losgelassen, 0 - Taste gedrückt). Deshalb wird man in deinem Fall Bit 15 prüfen müssen - und dann durch das & 0x8000 die restlichen Bits ausblenden.

Mfg

langer
 
Zurück