다음을 통해 공유


한 줄 편집 컨트롤을 만드는 방법

이 항목에서는 한 줄 편집 컨트롤이 포함된 대화 상자를 만드는 방법을 보여 줍니다.

한 줄 편집 컨트롤에는 ES_PASSWORD 스타일이 있습니다. 기본적으로 이 스타일의 편집 컨트롤은 사용자가 입력한 각 문자에 대해 별표를 표시합니다. 그러나 이 예에서는 EM_SETPASSWORDCHAR 메시지를 사용하여 기본 문자를 별표에서 더하기 기호(+)로 변경합니다. 다음 스크린샷은 사용자가 암호를 입력한 후의 대화 상자를 보여 줍니다.

screen shot of a dialog box containing an edit control for entering a password

참고 항목

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단계: 대화 상자를 초기화하고 사용자 입력을 처리합니다.

다음 예의 창 프로시저는 암호 대화 상자를 초기화하고 알림 메시지와 사용자 입력을 처리합니다.

초기화 중에 창 프로시저는 기본 암호 문자를 + 기호로 변경하고 기본 누름 단추를 취소로 설정합니다.

사용자 입력 처리 중에 창 프로시저는 사용자가 편집 컨트롤에 텍스트를 입력하는 즉시 기본 누름 단추를 취소에서 확인으로 변경합니다. 사용자가 확인 단추를 누르면 창 프로시저는 EM_LINELENGTHEM_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); 
}

편집 컨트롤 정보

컨트롤 참조 편집

편집 컨트롤 사용

편집 컨트롤