Erstellen eines Verzeichniseintrags in einem ListBox-Element mit einzeler Auswahl

In diesem Thema wird veranschaulicht, wie Sie ein Listenfeld mit einer einzelnen Auswahl verwenden, um den Inhalt eines Verzeichnisses anzuzeigen und darauf zuzugreifen. Das Listenfeld "Single-Selection" ist der Standardlistentyp. Ein Benutzer kann nur jeweils ein Element aus einem Listenfeld mit einzeler Auswahl auswählen.

Das C++-Codebeispiel in diesem Thema ermöglicht es einem Benutzer, eine Liste von Dateien im aktuellen Verzeichnis anzuzeigen, eine Datei aus der Liste auszuwählen und sie zu löschen.

Wichtige Informationen

Technologien

Voraussetzungen

  • C/C++
  • Programmierung der Windows-Benutzeroberfläche

Anweisungen

Die Verzeichnisauflistungsanwendung muss die folgenden Listenfeld-bezogenen Aufgaben ausführen:

  • Initialisieren Sie das Listenfeld.
  • Rufen Sie die Auswahl des Benutzers aus dem Listenfeld ab.
  • Entfernen Sie den Dateinamen aus dem Listenfeld, nachdem die ausgewählte Datei gelöscht wurde.

Im folgenden C++-Codebeispiel initialisiert die Dialogfeldprozedur das Listenfeld für die Einzelauswahl (IDC_FILELIST), indem die DlgDirList-Funktion verwendet wird, um das Listenfeld mit den Namen aller Dateien im aktuellen Verzeichnis zu füllen. Wenn der Benutzer eine Datei auswählt und die Schaltfläche Löschen auswählt, ruft die DlgDirSelectEx-Funktion den Namen der ausgewählten Datei ab. Der Code löscht die Datei mithilfe der DeleteFile-Funktion und aktualisiert das Verzeichnislistenfeld, indem die LB_DELETESTRING-Nachricht gesendet wird.

INT_PTR CALLBACK DlgDelFileProc(HWND hDlg, UINT message, 
        UINT wParam, LONG lParam) 
{ 
    PTSTR pszCurDir; 
    PTSTR pszFileToDelete; 
    int iLBItem; 
    int cStringsRemaining; 
    int iRet; 
    TCHAR achBuffer[MAX_PATH]; 
    TCHAR achTemp[MAX_PATH]; 
    BOOL fResult;     
 
    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 selected file. 
                    pszFileToDelete = achBuffer; 
                    DlgDirSelectEx(hDlg, pszFileToDelete, MAX_PATH, 
                        IDC_FILELIST); 

                    // Make sure the user really wants to delete the file.
                    achTemp[MAX_PATH];
                    StringCbPrintf (achTemp, ARRAYSIZE(achTemp),  
                            TEXT("Are you sure you want to delete %s?"), 
                            pszFileToDelete);
                    iRet = MessageBox(hDlg, achTemp, L"Deleting Files", 
                        MB_YESNO | MB_ICONEXCLAMATION);
                    if (iRet == IDNO)
                        return TRUE;;

                    // Delete the file.
                    fResult = DeleteFile(pszFileToDelete); 
                    if (!fResult) 
                    { 
                        MessageBox(hDlg, L"Could not delete file.", 
                            NULL, MB_OK); 
                    } 
                    else // Remove the filename from the list box.
                    { 
                        // Get the selected item.
                        iLBItem = SendMessage(GetDlgItem(hDlg, IDC_FILELIST), 
                            LB_GETCURSEL, 0, 0); 
 
                        // Delete the selected item.
                        cStringsRemaining = SendMessage(GetDlgItem(hDlg, IDC_FILELIST), 
                            LB_DELETESTRING, iLBItem, 0); 
 
                        // If this is not the last item, set the selection to 
                        // the item immediately following the one just deleted.
                        // Otherwise, set the selection to the last item.
                         if (cStringsRemaining > iLBItem) 
                        { 
                            SendMessage(GetDlgItem(hDlg, IDC_FILELIST), 
                                LB_SETCURSEL, iLBItem, 0); 
                        } 
                        else 
                        { 
                            SendMessage(GetDlgItem(hDlg, IDC_FILELIST), 
                                LB_SETCURSEL, cStringsRemaining, 0); 
                        } 
                    } 
                    return TRUE; 
 
                case IDCANCEL: 
 
                    // Destroy the dialog box. 
                     EndDialog(hDlg, TRUE); 
                    return TRUE; 
 
                default: 
                    return FALSE; 
            } 
 
        default: 
            return FALSE; 
    } 
} 

List Box-Steuerelementreferenz

Informationen zu Listenfeldern

Verwenden von Listenfeldern