한 줄 편집 컨트롤을 만드는 방법
이 항목에서는 한 줄 편집 컨트롤이 포함된 대화 상자를 만드는 방법을 보여 줍니다.
한 줄 편집 컨트롤에는 ES_PASSWORD 스타일이 있습니다. 기본적으로 이 스타일을 사용하여 컨트롤을 편집하면 사용자가 입력한 각 문자에 대한 별표가 표시됩니다. 그러나 이 예제에서는 EM_SETPASSWORDCHAR 메시지를 사용하여 기본 문자를 별표에서 더하기 기호(+)로 변경합니다. 다음 스크린샷은 사용자가 암호를 입력한 후의 대화 상자를 보여줍니다.
암호 입력을 위한 편집 컨트롤이 포함된 대화 상자의 스크린샷
메모
Comctl32.dll 버전 6은 재배포할 수 없습니다. Comctl32.dll 버전 6을 사용하려면 매니페스트에 지정합니다. 매니페스트에 대한 자세한 내용은 비주얼 스타일활성화에 관한 내용을 참조하십시오.
알아야 할 사항
기술
필수 구성 요소
- C/C++
- Windows 사용자 인터페이스 프로그래밍
지시
1단계: 암호 대화 상자의 인스턴스를 만듭니다.
다음 C++ 코드 예제에서는 DialogBox 함수를 사용하여 모달 대화 상자를 만듭니다. 대화 상자 템플릿 IDD_PASSWORD 매개 변수로 전달됩니다. 무엇보다도 암호 대화 상자의 창 스타일, 단추 및 차원을 정의합니다.
DialogBox(hInst, // application instance
MAKEINTRESOURCE(IDD_PASSWORD), // dialog box resource
hWnd, // owner window
PasswordProc // dialog box window procedure
);
2단계: 대화 상자를 초기화하고 사용자 입력을 처리합니다.
다음 예제의 창 프로시저는 암호 대화 상자를 초기화하고 알림 메시지 및 사용자 입력을 처리합니다.
초기화하는 동안 창 프로시저는 기본 암호 문자를 + 기호로 변경하고 기본 푸시버튼을 취소설정합니다.
사용자 입력을 처리하는 동안 창 프로시저는 사용자가 편집 컨트롤에 텍스트를 입력하는 즉시 기본 푸시 단추를 CANCELOK 변경합니다. 사용자가 확인 단추를 누르면, 창 프로시저는 EM_LINELENGTH 및 EM_GETLINE 메시지를 사용하여 텍스트를 얻습니다.
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);
}
관련 항목
-
편집 제어 기능 사용