Een besturingselement voor bewerken met één regel maken
In dit onderwerp ziet u hoe u een dialoogvenster maakt dat een besturingselement voor bewerken met één regel bevat.
Het besturingselement voor bewerken met één regel heeft de stijl ES_PASSWORD. Bewerkingsvensters met deze stijl tonen standaard een sterretje voor elk teken dat door de gebruiker wordt getypt. In dit voorbeeld wordt echter het EM_SETPASSWORDCHAR bericht gebruikt om het standaardteken van een sterretje te wijzigen in een plusteken (+). In de volgende schermafbeelding ziet u het dialoogvenster nadat de gebruiker een wachtwoord heeft ingevoerd.
Notitie
Comctl32.dll versie 6 is niet herdistribueerbaar. Als u Comctl32.dll versie 6 wilt gebruiken, geeft u deze op in een manifest. Zie Visuele stijlen inschakelenvoor meer informatie over manifesten.
Wat u moet weten
Technologieën
Voorwaarden
- C/C++
- Programmeren van Windows-gebruikersinterface
Aanwijzingen
Stap 1: Maak een exemplaar van het dialoogvenster Wachtwoord.
In het volgende C++-codevoorbeeld wordt de functie Dialoogvenster gebruikt om een modaal dialoogvenster te maken. De dialoogvenstersjabloon IDD_PASSWORD wordt doorgegeven als een parameter. Het definieert onder andere de vensterstijlen, knoppen en dimensies van het dialoogvenster Wachtwoord.
DialogBox(hInst, // application instance
MAKEINTRESOURCE(IDD_PASSWORD), // dialog box resource
hWnd, // owner window
PasswordProc // dialog box window procedure
);
Stap 2: Het dialoogvenster initialiseren en gebruikersinvoer verwerken.
De vensterprocedure in het volgende voorbeeld initialiseert het dialoogvenster wachtwoord en verwerkt meldingsberichten en gebruikersinvoer.
Tijdens de initialisatie wijzigt de vensterprocedure het standaardwachtwoordteken in een +-teken en stelt u de standaardknop in op Annuleren.
Tijdens de verwerking van gebruikersinvoer wijzigt de vensterprocedure de standaardknop van ANNULEREN naar OK zodra de gebruiker tekst invoert in het bewerkingsveld. Als de gebruiker op de knop OK drukt, gebruikt de vensterprocedure de EM_LINELENGTH en EM_GETLINE berichten om de tekst op te halen.
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);
}
Verwante onderwerpen