Tek satırlı düzenleme denetimlerinde

Bu bölümde yer alan örnek bir iletişim kutusunda bir parola girmek için kullanıcı ister üretmek için bir pencere yordamı kullanın gösterilmiştir.

Tek satırlı düzenleme denetimi parolası iletişim kutusu içinde bir es_password tarzı vardır. Varsayılan olarak, kullanıcı türleri için denetimleri bu stil görünen her karakter için yıldız işareti ile düzenleyin. Bu örnek, ancak varsayılan karakter yıldız artı işareti (+) değiştirmek için em_setpasswordchar mesaj kullanır.

Düzenleme denetimine metin kullanıcının girdiği en kısa sürede bu pencere yordamı iptal varsayılan düğme ok değiştirir. Kullanıcı Tamam düğmesine basarsa, pencere yordam metni almak için EM_LINELENGTH ve EM_GETLINE iletileri kullanır.

LRESULT CALLBACK PassProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    CHAR 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, 
                            "Too many characters.", 
                            "Error", 
                            MB_OK); 
                        EndDialog(hDlg, TRUE); 
                        return FALSE; 
                    } 
                    else if (cchPassword == 0) 
                    { 
                        MessageBox(hDlg, 
                            "No characters entered.", 
                            "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, 
                        "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); 
} 
 

Index