Aracılığıyla paylaş


Multiple-Selection Liste Kutusu Oluşturma

Bu konu başlığında, bir dizinin içeriğinin birden çok seçimli liste kutusunda nasıl görüntüleneceği ve bunlara nasıl erişleneceği gösterilmektedir. Birden çok seçimli liste kutusunda, kullanıcı aynı anda birden fazla öğe seçebilir.

Bu konudaki C++ kod örneği, kullanıcının geçerli dizindeki dosyaların listesini görüntülemesine, listeden bir dosya grubu seçmesine ve silmesine olanak tanır.

Bilmeniz gerekenler

Teknolojileri

Önkoşullar

  • C/C++
  • Windows Kullanıcı Arabirimi Programlama

Talimatlar

Dizin listeleme uygulaması aşağıdaki liste kutusuyla ilgili görevleri gerçekleştirmelidir:

  • Liste kutusunu başlatın.
  • Liste kutusundan kullanıcının seçimlerini alın.
  • Seçili dosyalar silindikten sonra liste kutusundan dosya adlarını kaldırın.

Aşağıdaki C++ kod örneğinde, iletişim kutusu yordamı, liste kutusunu geçerli dizindeki tüm dosyaların adlarıyla doldurmak için DlgDirList işlevini kullanarak çoklu seçim liste kutusunu (IDC_FILELIST) başlatır.

Kullanıcı bir dosya grubu seçip Sil düğmesini seçtiğinde, iletişim kutusu yordamı seçilen dosya sayısını almak için LB_GETSELCOUNT iletisini ve seçili liste kutusu öğelerinin bir dizisini almak için LB_GETSELITEMS iletisini gönderir. Bir dosyayı sildikten sonra iletişim kutusu yordamı, LB_DELETESTRING iletisini göndererek ilgili öğeyi liste kutusundan kaldırır.

#define BIGBUFF 8192 
 
INT_PTR CALLBACK DlgDelFilesProc(HWND hDlg, UINT message, 
        UINT wParam, LONG lParam) 
{ 
    PTSTR pszCurDir; 
    PTSTR pszFileToDelete; 
    int cSelItems; 
    int cSelItemsInBuffer; 
    TCHAR achBuffer[MAX_PATH]; 
    int aSelItems[BIGBUFF]; 
    int i; 
    BOOL fResult; 
    HWND hListBox;
    int iRet;
 
    switch (message) { 
 
        case WM_INITDIALOG: 
 
            // Initialize the list box by filling it with files from 
            // the current directory. 
            pszCurDir = achBuffer; 
            GetCurrentDirectory(MAX_PATH, pszCurDir);
            DlgDirList(hDlg, pszCurDir, IDC_FILELIST, IDS_PATHTOFILL, 0); 
            SetFocus(GetDlgItem(hDlg, IDC_FILELIST)); 
 
            return FALSE; 
 
        case WM_COMMAND: 
 
            switch (LOWORD(wParam)) 
            { 
                case IDOK: 
 
                    // When the user presses the DEL (IDOK) button, 
                    // first retrieve the list of selected files. 
                    pszFileToDelete = achBuffer; 
                    hListBox = GetDlgItem(hDlg, IDC_FILELIST); 
                    cSelItems = SendMessage(hListBox, 
                            LB_GETSELCOUNT, 0, 0); 
 
                    cSelItemsInBuffer = SendMessage(hListBox, 
                            LB_GETSELITEMS, 512, (LPARAM) aSelItems); 
 
                    if (cSelItems > cSelItemsInBuffer) 
                    { 
                        MessageBox(hDlg, L"Too many items selected.", 
                                NULL, MB_OK); 
                    } 
                    else 
                    { 

                        // Make sure the user really wants to delete the files.
                        iRet = MessageBox(hDlg, 
                            L"Are you sure you want to delete these files?", 
                            L"Deleting Files", MB_YESNO | MB_ICONEXCLAMATION);
                        if (iRet == IDNO)
                            return TRUE;

                        // Go through the list backward because after deleting
                        // an item the indices change for every subsequent 
                        // item. By going backward, the indices are never 
                        // invalidated. 
                        for (i = cSelItemsInBuffer - 1; i >= 0; i--) 
                        { 
                            SendMessage(hListBox, LB_GETTEXT, 
                                        aSelItems[i], 
                                        (LPARAM) pszFileToDelete); 
 
                            fResult = DeleteFile(pszFileToDelete); 
                            if (!fResult) 
                            {                     
                                MessageBox(hDlg, L"Could not delete file.", 
                                    NULL, MB_OK);     
                            } 
                            else 
                            { 
                                SendMessage(hListBox, LB_DELETESTRING, 
                                        aSelItems[i], 0); 
                            } 
                        } 
                        SendMessage(hListBox, LB_SETCARETINDEX, 0, 0); 
                    } 
                    return TRUE; 
 
                case IDCANCEL: 
 
                    // Destroy the dialog box. 
                    EndDialog(hDlg, TRUE); 
                    return TRUE; 
 
                default: 
                    return FALSE; 
            } 
 
        default: 
                return FALSE; 
    } 
} 

Liste Kutusu Denetim Referansı

Liste Kutuları hakkında

Liste Kutularını Kullanarak