Aracılığıyla paylaş


Tek Satırlı Düzenleme Denetimi Oluşturma

Bu konuda, tek satırlı düzenleme denetimi içeren bir iletişim kutusunun nasıl oluşturulacağı gösterilmektedir.

Tek satırlı düzenleme denetimi ES_PASSWORD stiline sahiptir. Varsayılan olarak, bu stile sahip düzenleme denetimleri, kullanıcı tarafından yazılan her karakter için bir yıldız işareti görüntüler. Ancak bu örnek, varsayılan karakteri yıldız işaretinden artı işaretine (+) değiştirmek için EM_SETPASSWORDCHAR iletisini kullanır. Aşağıdaki ekran görüntüsünde, kullanıcı parola girdikten sonra iletişim kutusu gösterilir.

Bir parola girmek için düzenleme denetimi içeren bir iletişim kutusunun ekran görüntüsü

Not

Comctl32.dll sürüm 6 yeniden dağıtılamaz. Comctl32.dll sürüm 6'yı kullanmak için bir manifest dosyasında belirtin. Bildirimler hakkında daha fazla bilgi için bkz. Görsel Stilleri Etkinleştirme.

 

Bilmeniz gerekenler

Teknolojileri

Önkoşullar

  • C/C++
  • Windows Kullanıcı Arayüzü Programlama

Talimatlar

1. Adım: Parola iletişim kutusunun bir örneğini oluşturun.

Aşağıdaki C++ kod örneği, dialogBox işlevini kullanarak kalıcı bir iletişim kutusu oluşturur. IDD_PASSWORD iletişim kutusu şablonu parametre olarak geçirilir. Parola iletişim kutusunun pencere stillerini, düğmelerini ve boyutlarını tanımlar.

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

2. Adım: İletişim kutusunu başlatın ve kullanıcı girişini işleyin.

Aşağıdaki örnekteki pencere yordamı parola iletişim kutusunu başlatır ve bildirim iletilerini ve kullanıcı girişini işler.

Başlatma sırasında, pencere yordamı varsayılan parola karakterini + işaretine değiştirir ve varsayılan düğmeyi İptal olarak ayarlar.

Kullanıcı girişi işleme sırasında, kullanıcı düzenleme denetimine metin girdiğinde pencere yordamı, İPTAL olan varsayılan düğmeyi TAMAM olarak değiştirir. Kullanıcı Tamam düğmesine basarsa, pencere yordamı metni almak için EM_LINELENGTH ve EM_GETLINE iletilerini kullanır.

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

Denetimleri Düzenleme Hakkında

Düzenleme Kontrolü Referansı

Düzenleme Denetimlerini Kullanma

Düzenleme Denetimi