gedrückte Taste erkennen

michaelwengert

Erfahrenes Mitglied
Morgen zusammen,

Ich habe eine ListCtrl. Wenn ich in dieser die Taste "Entf" drücke, soll die markierte Zeile gelöscht werden. Die Löschroutine habe ich bereits. Nun das Problem:

Ich habe der ListCtrl LVN_KEYDOWN hinzugefügt.
Nun habe ich die Funktion
Code:
void CUserVerwalten::OnLvnKeydownList1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLVKEYDOWN pLVKeyDow =reinterpret_cast<LPNMLVKEYDOWN>(pNMHDR);
	*pResult = 0;
}
Wie kann ich nun herausfinden, welche Taste gedrückt wurde ?
bzw. eine if schleife, die ausgeführt wird, wenn die "Entf"-Taste gedrückt wurde
 
Hat sich erledigt

Habe es hinbekommen.


Code:
void CUserVerwalten::OnLvnKeydownList1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLVKEYDOWN pLVKeyDow = reinterpret_cast<LPNMLVKEYDOWN>(pNMHDR);
	if (pLVKeyDow->wVKey==46)
		OnBnClickedDelete();

	*pResult = 0;
}
wVKey=46 ist die Entf Taste
 
Schön, das es schon klappt.

Nimm statt 46 besser das VK_DELETE. Ist zwar dasselbe, aber es ist sicherer.
 
Wo es eine Liste gibt, weis ich nicht.

Ich hab es so herausgefunden:

Habe in der oben genannten Funktion nen Hltepunkt gesetzt.
Wenn du nun die Variable "pLVKeyDow" beobachten lässt, findest du dort unter
wVKey den numerischen Code für die gedrückte Taste.

Die Tastenbezeichnungen kannst du auch sehen, wenn du im Ressourceneditor eine neue Ressource "Accelerator" einfügst. Unter "Taste" kannst du dann durch die verschiedenen Bezeichnungen durchgehen. Sind meist selbsterklärend
 
Kann denn die Taste während eines Dialogs nicht erkannt werden?

So hab ich es versucht:

case WM_KEYDOWN:

switch (wParam)
{
case VK_RETURN:

MessageBox(hwnd,"enter","enter",MB_OK);

}
break;

Und die MessageBox erscheint nicht beim Betätigen der Enter-TAste
 
@lindin:
Kommt drauf an, was du mit "während eines Dialogs" meinst. Wo prüfst du denn den Tastendruck? Zeig doch mal die komplette Routine.
 
BOOL CALLBACK histDialogProc (HWND hDlgz, UINT msg, UINT wParam, LONG lParam)
{


switch (msg) {

case WM_INITDIALOG:
//MessageBox(hDlgz, "init", "init", MB_ICONHAND |MB_OK);


//SetFocus (GetDlgItem (hDlgz, IDC_CHAT_HISTORY)); /* The SetFocus function sets the keyboard focus to
// the specified window. The window must be attached
// to the calling thread's message queue.*/
long lSize;
char* buffer;
char test3[255];
strcpy (test3,test2);
strcat (test3," - History");
// GetWindowText(hDlgz,test,254);
SetWindowText(hDlgz,test3);

//MessageBox(hDlgz,test2,test2,MB_OK);
strcat(test2,".txt");
fp=fopen(test2,"rb");
fseek(fp,0,SEEK_END);
lSize=ftell(fp);
rewind(fp);
buffer=(char*)malloc(lSize);
fread(buffer,1,lSize,fp);

//sprintf(zwischen2,"%s",c);
//while(( c=fgetc(fp)) != EOF) strcat(zwischen2,c);

// MessageBox(hDlgz,buffer,"History",MB_OK|MB_TOPMOST);
fclose(fp);

SetDlgItemText (hDlgz, IDC_CHAT_DISPLAY_HISTORY, buffer);
free(buffer);
testtest=GetDlgItem( hDlgz, IDC_CHAT_DISPLAY_HISTORY) ;
SendMessage( testtest, WM_VSCROLL, SB_BOTTOM, NULL );

//FlashWindow(hDlgz,TRUE);
SetFocus (GetDlgItem (hDlgz, IDCANCEL));
return FALSE;

case WM_KEYDOWN:

switch (wParam)
{
case VK_RETURN:

MessageBox(hDlgz,"control","c",MB_OK);
SendMessage(hDlgz,WM_COMMAND,IDCANCEL,NULL);
}

break;


case WM_COMMAND:
/*Wenn das Menü 'benutzt' wurde*/
switch (wParam) {



case IDCANCEL: /*Wenn man 'Cancel' anklickt?*/
DestroyWindow(hDlgz);

break;
}
return(TRUE);

case WM_DESTROY:
/* free(pChatBuf);*/ /*Müßte man machen, damit das Fenster am Anfang
leer ist, und nicht die letzte Anchricht immer noch drinsteht?*/

/*Hier rausfinden, welches Fenster zugemacht wurde und das gleich NULL setzen*/

DestroyWindow(hDlgz);

return FALSE;
}
//free(buffer);
return(FALSE);
}
 

Neue Beiträge

Zurück