Comment créer un contrôle d’édition à ligne unique
Cette rubrique montre comment créer une boîte de dialogue qui contient un contrôle d’édition à une seule ligne.
Le contrôle d’édition monoligne a le style ES_PASSWORD . Par défaut, les contrôles de modification avec ce style affichent un astérisque pour chaque caractère tapé par l’utilisateur. Toutefois, cet exemple utilise le message EM_SETPASSWORDCHAR pour remplacer le caractère par défaut d’un astérisque en signe plus (+). La capture d’écran suivante montre la boîte de dialogue une fois que l’utilisateur a entré un mot de passe.
Notes
Comctl32.dll version 6 n’est pas redistribuable. Pour utiliser Comctl32.dll version 6, spécifiez-la dans un manifeste. Pour plus d’informations sur les manifestes, consultez Activation des styles visuels.
Bon à savoir
Technologies
Prérequis
- C/C++
- Programmation de l’interface utilisateur Windows
Instructions
Étape 1 : Créer un instance de la boîte de dialogue mot de passe.
L’exemple de code C++ suivant utilise la fonction DialogBox pour créer une boîte de dialogue modale. Le modèle de boîte de dialogue IDD_PASSWORD est passé en tant que paramètre. Il définit, entre autres, les styles de fenêtre, les boutons et les dimensions de la boîte de dialogue de mot de passe.
DialogBox(hInst, // application instance
MAKEINTRESOURCE(IDD_PASSWORD), // dialog box resource
hWnd, // owner window
PasswordProc // dialog box window procedure
);
Étape 2 : Initialiser la boîte de dialogue et traiter l’entrée utilisateur.
La procédure de fenêtre de l’exemple suivant initialise la boîte de dialogue mot de passe et traite les messages de notification et l’entrée utilisateur.
Pendant l’initialisation, la procédure de fenêtre remplace le caractère de mot de passe par défaut en signe + et définit le bouton push par défaut sur Annuler.
Pendant le traitement des entrées utilisateur, la procédure de fenêtre modifie le bouton push par défaut de CANCEL en OK dès que l’utilisateur entre du texte dans le contrôle d’édition. Si l’utilisateur appuie sur le bouton OK , la procédure de fenêtre utilise le EM_LINELENGTH et EM_GETLINE messages pour récupérer le texte.
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);
}
Rubriques connexes