Jak utworzyć kontrolkę edycji pojedynczej linii
Temat ten pokazuje, jak stworzyć okno dialogowe z jednoliniowym polem edycji.
Kontrolka edycji jednowierszowej ma styl ES_PASSWORD. Domyślnie kontrolki edycji z tym stylem wyświetlają gwiazdkę dla każdego znaku wpisanego przez użytkownika. W tym przykładzie użyto jednak komunikatu EM_SETPASSWORDCHAR, aby zmienić znak domyślny z gwiazdki na znak plus (+). Poniższy zrzut ekranu przedstawia okno dialogowe po wprowadzeniu hasła przez użytkownika.
Notatka
Comctl32.dll w wersji 6 nie można rozpowszechniać. Aby użyć Comctl32.dll w wersji 6, określ ją w manifeście. Aby uzyskać więcej informacji na temat manifestów, zobacz Włączanie stylów wizualnych.
Co musisz wiedzieć
Technologie
Warunki wstępne
- C/C++
- Programowanie interfejsu użytkownika systemu Windows
Instrukcje
Krok 1: Utwórz wystąpienie okna dialogowego hasła.
Poniższy przykład kodu C++ używa funkcji DialogBox do utworzenia modalnego okna dialogowego. Szablon okna dialogowego IDD_PASSWORD jest przekazywany jako parametr. Definiuje między innymi style okna, przyciski i wymiary okna dialogowego hasła.
DialogBox(hInst, // application instance
MAKEINTRESOURCE(IDD_PASSWORD), // dialog box resource
hWnd, // owner window
PasswordProc // dialog box window procedure
);
Krok 2. Inicjowanie okna dialogowego i przetwarzanie danych wejściowych użytkownika.
Procedura okna w poniższym przykładzie inicjuje okno dialogowe hasła i przetwarza komunikaty powiadomień i dane wejściowe użytkownika.
Podczas inicjowania procedura okna zmienia domyślny znak hasła na znak + i ustawia domyślny przycisk pushbutton na Anuluj.
Podczas przetwarzania danych wejściowych użytkownika, procedura okna zmienia domyślny przycisk z ANULUJ na OK, gdy tylko użytkownik zacznie wprowadzać tekst w kontrolce edycji. Jeśli użytkownik naciśnie przycisk OK, procedura okna używa komunikatów EM_LINELENGTH i EM_GETLINE w celu pobrania tekstu.
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);
}
Tematy pokrewne