studio reales proyectos para libro introducción incluye herramientas fuente español desarrollo código con avanzado aplicaciones c++ c winapi dialog editcontrol

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 )?