Condividi tramite


Come creare un controllo di modifica a riga singola

In questo argomento viene illustrato come creare una finestra di dialogo contenente un controllo di modifica a riga singola.

Il controllo di modifica a riga singola ha lo stile ES_PASSWORD. Per impostazione predefinita, i controlli di modifica con questo stile visualizzano un asterisco per ogni carattere digitato dall'utente. In questo esempio viene tuttavia utilizzato il messaggio EM_SETPASSWORDCHAR per modificare il carattere predefinito da un asterisco a un segno più (+). La schermata seguente mostra la finestra di dialogo dopo che l'utente ha immesso una password.

schermata di una finestra di dialogo contenente un controllo di modifica per l'immissione di una password

Nota

Comctl32.dll versione 6 non è ridistribuibile. Per usare Comctl32.dll versione 6, specificarlo in un manifesto. Per altre informazioni sui manifesti, vedere Abilitazione degli stili di visualizzazione.

 

Cosa è necessario sapere

Tecnologie

Prerequisiti

  • C/C++
  • Programmazione dell'interfaccia utente di Windows

Disposizioni

Passaggio 1: Creare un'istanza della finestra di dialogo password.

Nell'esempio di codice C++ seguente viene usata la funzione DialogBox per creare una finestra di dialogo modale. Il modello di finestra di dialogo IDD_PASSWORD viene passato come parametro. Definisce, tra le altre cose, gli stili della finestra, i pulsanti e le dimensioni della finestra di dialogo password.

DialogBox(hInst,                   // application instance
    MAKEINTRESOURCE(IDD_PASSWORD), // dialog box resource
    hWnd,                          // owner window
    PasswordProc                    // dialog box window procedure
    );

Passaggio 2: Inizializzare la finestra di dialogo ed elaborare l'input dell'utente.

La procedura della finestra nell'esempio seguente inizializza la finestra di dialogo password e elabora i messaggi di notifica e l'input dell'utente.

Durante l'inizializzazione, la procedura della finestra modifica il carattere password predefinito in un segno di + e imposta il pulsante di push predefinito su Cancel.

Durante l'elaborazione dell'input dell'utente, la routine finestra modifica il pulsante di pressione predefinito da CANCEL a OK non appena l'utente immette testo nel controllo di modifica. Se l'utente preme il pulsante OK, la routine della finestra utilizza i messaggi EM_LINELENGTH e EM_GETLINE per recuperare il testo.

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); 
}

Informazioni sui controlli di modifica

Riferimento al Controllo di Modifica

Uso dei controlli di edit

Controllo di modifica