c++ - reales - libro de android studio en español pdf
Ajustar el procedimiento de la subclase para que pueda usarse tanto en la ventana como en el cuadro de diálogo (0)
Estoy tratando de atrapar la tecla ENTER y ESC presionar en el control de edición de una sola línea.
Cuando el usuario presiona ENTRAR o ESC, quiero quitar el foco del teclado del control de edición y establecerlo en el control de vista de lista. El control Listview es el hermano del control de edición.
Mi objetivo es escribir un procedimiento de subclase único que se pueda usar para crear subclases de controles de edición tanto en la ventana principal como en el cuadro de diálogo.
Encontré este artículo de MSDN que encontré útil debido a su segunda solución. Debajo está mi adaptación del código.
// subclass procedure for edit control
LRESULT CALLBACK InPlaceEditControl_SubclassProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam,
UINT_PTR uIdSubclass, DWORD_PTR dwRefData)
{
switch (message)
{
case WM_GETDLGCODE:
return (DLGC_WANTALLKEYS | DefSubclassProc(hwnd, message, wParam, lParam));
case WM_CHAR:
//Process this message to avoid message beeps.
switch (wParam)
{
case VK_RETURN:
// change focus to listview
SetFocus(hwndListView);
return 0L;
case VK_ESCAPE:
// change focus to listview
SetFocus(hwndListView);
return 0L;
default:
return ::DefSubclassProc(hwnd, message, wParam, lParam);
}
break;
case WM_KEYDOWN:
switch (wParam)
{
case VK_RETURN:
// change focus to listview
SetFocus(hwndListView);
return 0L;
case VK_ESCAPE:
// change focus to listview
SetFocus(hwndListView);
return 0L;
default:
return ::DefSubclassProc(hwnd, message, wParam, lParam);
}
break;
case WM_NCDESTROY:
::RemoveWindowSubclass(hwnd, InPlaceEditControl_SubclassProc, uIdSubclass);
return DefSubclassProc(hwnd, message, wParam, lParam);
}
return ::DefSubclassProc(hwnd, message, wParam, lParam);
}
PREGUNTA:
¿Es correcta mi adaptación o me falta algo (quizás en lugar de SetFocus
debería usar WM_NEXTDLGCTL
como señaló Raymond Chen )?