Come creare un controllo di modifica a riga singola
In questo argomento viene illustrato come creare una finestra di dialogo contenente un controllo di modifica a riga singola.
Il controllo di modifica a riga singola ha lo stile ES_PASSWORD. Per impostazione predefinita, i controlli di modifica con questo stile visualizzano un asterisco per ogni carattere digitato dall'utente. In questo esempio viene tuttavia utilizzato il messaggio EM_edizione Standard TPASSWORDCHAR per modificare il carattere predefinito da un asterisco a un segno più (+). La schermata seguente mostra la finestra di dialogo dopo che l'utente ha immesso una password.
Nota
Comctl32.dll versione 6 non è ridistribuibile. Per usare Comctl32.dll versione 6, specificarlo in un manifesto. Per altre informazioni sui manifesti, vedere Abilitazione degli stili di visualizzazione.
Informazioni importanti
Tecnologie
Prerequisiti
- C/C++
- Programmazione dell'interfaccia utente di Windows
Istruzioni
Passaggio 1: Creare un'istanza della finestra di dialogo password.
Nell'esempio di codice C++ seguente viene usata la funzione DialogBox per creare una finestra di dialogo modale. Il modello di finestra di dialogo IDD_PASSWORD viene passato come parametro. Definisce, tra le altre cose, gli stili della finestra, i pulsanti e le dimensioni della finestra di dialogo password.
DialogBox(hInst, // application instance
MAKEINTRESOURCE(IDD_PASSWORD), // dialog box resource
hWnd, // owner window
PasswordProc // dialog box window procedure
);
Passaggio 2: Inizializzare la finestra di dialogo ed elaborare l'input dell'utente.
La procedura della finestra nell'esempio seguente inizializza la finestra di dialogo password e elabora i messaggi di notifica e l'input dell'utente.
Durante l'inizializzazione, la procedura della finestra modifica il carattere password predefinito in un + segno e imposta il pulsante di push predefinito su Annulla.
Durante l'elaborazione dell'input dell'utente, la procedura della finestra modifica il pulsante di pressione predefinito da CANCEL a OK non appena l'utente immette testo nel controllo di modifica. Se l'utente preme il pulsante OK , la routine della finestra utilizza i messaggi EM_LINELENGTH e EM_GETLINE per recuperare il testo.
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);
}
Argomenti correlati