[ Foro de C++ ]
Pues la pregunta es que tengo un edit box en el cual ingreso un nombre pero resulta que quiero que la primera letra sea mayúscula aunque el usuario no lo ponga en mayúscula.
Proceso el mensaje EN_UPDATE del win API y dentro pongo un código tal que así.
case WM_COMMAND:
if (LOWORD(wParam) == IDC_TITULO && HIWORD(wParam) == EN_UPDATE) {
int cant = GetWindowTextLength(GetDlgItem(hDlg, IDC_TITULO));
if (cant == 1) {
wchar_t* aux = new wchar_t[cant + 1];
GetDlgItemText(hDlg, IDC_TITULO, aux, cant + 1);
if (aux[0] >= 0x61 && 0x7A >= aux[0]) { // Si aux es una letra minúscula
aux[0] -= 0x20; // La convertimos a una mayúscula para el primer caracter
aux[1] = 0;
SetDlgItemText(hDlg, IDC_TITULO, aux); // La convierto a mayúsculas
//SetWindowText(GetDlgItem(hDlg, IDC_TITULO), aux);
/*POINT p;
GetCaretPos(&p);
p.y += 10;
SetCaretPos(p.x, p.y);*/
}
//MessageBox(hDlg,aux, L"aux", MB_OK);
delete[] aux;
}
}
Realmente este código funciona pero me deja el caret al principio y pasa lo siguiente:
Si escribo amigo el resultado es migoA.
La pregunta es, que puedo hacer para poner el caret al final? He probado de mover el caret con las funciones que veis comentadas pero no funciona.
gracias de antemano.
Me respondo a mi mismo.
SendDlgItemMessage(hDlg, IDC_TITULO, EM_SETSEL, 1, 1);
Enviando el mensaje EM_SETSEL el wparam y el lparam en este caso los dos a uno ya que solo hay un caracter.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)