Cómo crear un control de edición de una sola línea
En este tema se muestra cómo crear un cuadro de diálogo que contiene un control de edición de una sola línea.
El control de edición de una sola línea tiene el estilo ES_PASSWORD . De forma predeterminada, los controles de edición con este estilo muestran un asterisco para cada carácter escrito por el usuario. Sin embargo, en este ejemplo se usa el mensaje EM_SETPASSWORDCHAR para cambiar el carácter predeterminado de un asterisco a un signo más (+). La siguiente captura de pantalla muestra el cuadro de diálogo después de que el usuario haya escrito una contraseña.
Nota
Comctl32.dll versión 6 no es redistribuible. Para usar Comctl32.dll versión 6, especifíquela en un manifiesto. Para obtener más información sobre los manifiestos, vea Habilitación de estilos visuales.
Lo que necesita saber
Tecnologías
Requisitos previos
- C/C++
- Programación de la interfaz de usuario de Windows
Instrucciones
Paso 1: Crear una instancia del cuadro de diálogo de contraseña.
En el siguiente ejemplo de código de C++ se usa la función DialogBox para crear un cuadro de diálogo modal. La plantilla del cuadro de diálogo IDD_PASSWORD se pasa como parámetro. Define, entre otras cosas, los estilos de ventana, los botones y las dimensiones del cuadro de diálogo de contraseña.
DialogBox(hInst, // application instance
MAKEINTRESOURCE(IDD_PASSWORD), // dialog box resource
hWnd, // owner window
PasswordProc // dialog box window procedure
);
Paso 2: Inicialice el cuadro de diálogo y procese la entrada del usuario.
El procedimiento de ventana del ejemplo siguiente inicializa el cuadro de diálogo contraseña y procesa los mensajes de notificación y la entrada del usuario.
Durante la inicialización, el procedimiento de ventana cambia el carácter de contraseña predeterminado a un + signo y establece el botón de inserción predeterminado en Cancelar.
Durante el procesamiento de entrada del usuario, el procedimiento de ventana cambia el botón de inserción predeterminado de CANCEL a Aceptar en cuanto el usuario escribe texto en el control de edición. Si el usuario presiona el botón Aceptar , el procedimiento de ventana usa el EM_LINELENGTH y EM_GETLINE mensajes para recuperar el texto.
INT_PTR CALLBACK PasswordProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
TCHAR lpszPassword[16];
WORD cchPassword;
switch (message)
{
case WM_INITDIALOG:
// Set password character to a plus sign (+)
SendDlgItemMessage(hDlg,
IDE_PASSWORDEDIT,
EM_SETPASSWORDCHAR,
(WPARAM) '+',
(LPARAM) 0);
// Set the default push button to "Cancel."
SendMessage(hDlg,
DM_SETDEFID,
(WPARAM) IDCANCEL,
(LPARAM) 0);
return TRUE;
case WM_COMMAND:
// Set the default push button to "OK" when the user enters text.
if(HIWORD (wParam) == EN_CHANGE &&
LOWORD(wParam) == IDE_PASSWORDEDIT)
{
SendMessage(hDlg,
DM_SETDEFID,
(WPARAM) IDOK,
(LPARAM) 0);
}
switch(wParam)
{
case IDOK:
// Get number of characters.
cchPassword = (WORD) SendDlgItemMessage(hDlg,
IDE_PASSWORDEDIT,
EM_LINELENGTH,
(WPARAM) 0,
(LPARAM) 0);
if (cchPassword >= 16)
{
MessageBox(hDlg,
L"Too many characters.",
L"Error",
MB_OK);
EndDialog(hDlg, TRUE);
return FALSE;
}
else if (cchPassword == 0)
{
MessageBox(hDlg,
L"No characters entered.",
L"Error",
MB_OK);
EndDialog(hDlg, TRUE);
return FALSE;
}
// Put the number of characters into first word of buffer.
*((LPWORD)lpszPassword) = cchPassword;
// Get the characters.
SendDlgItemMessage(hDlg,
IDE_PASSWORDEDIT,
EM_GETLINE,
(WPARAM) 0, // line 0
(LPARAM) lpszPassword);
// Null-terminate the string.
lpszPassword[cchPassword] = 0;
MessageBox(hDlg,
lpszPassword,
L"Did it work?",
MB_OK);
// Call a local password-parsing function.
ParsePassword(lpszPassword);
EndDialog(hDlg, TRUE);
return TRUE;
case IDCANCEL:
EndDialog(hDlg, TRUE);
return TRUE;
}
return 0;
}
return FALSE;
UNREFERENCED_PARAMETER(lParam);
}
Temas relacionados