Creating a Directory Listing in a Single-Selection List Box

The following example demonstrates how to display the content of the current directory in a list box and enable the user to delete one file at a time.

In addition to the standard list box styles, this list box has the LBS_MULTICOLUMN and LBS_HSCROLL styles. The code initializes the list box by using the DlgDirList function to fill the list box with the names of all the files in the current directory. When the user chooses the Delete button, the DlgDirSelectEx function retrieves the name of the selected file. The code deletes the file by using the DeleteFile function and updates the directory list box by sending the LB_DELETESTRING message.

#define BUFFER MAX_PATH 
 
BOOL APIENTRY DlgDelFileProc( 
    HWND hDlg,            // window handle to dialog box 
    UINT message,         // type of message 
    UINT wParam,          // message-specific information 
    LONG lParam) 
{ 
 
    DWORD cchCurDir; 
    LPTSTR lpszCurDir; 
    LPTSTR lpszFileToDelete; 
    int nItem; 
    int nTotal; 
    TCHAR tchBuffer[BUFFER]; 
    BOOL fResult; 
 
    switch (message) 
    { 
        case WM_INITDIALOG: 
 
           // Initialize the list box by filling it with files from 
           // the current directory. 
 
           lpszCurDir = tchBuffer; 
           GetCurrentDirectory(cchCurDir, lpszCurDir); 
           DlgDirList(hDlg, lpszCurDir, IDL_FILES, IDS_PATHTOFILL, 0); 
           SetFocus(GetDlgItem(hDlg, IDL_FILES)); 
           return FALSE; 
 
        case WM_COMMAND: 
 
            switch (LOWORD(wParam)) 
            { 
                case IDOK: 
 
                    // When the user presses the DEL (IDOK) button, 
                    // delete the selected file. 
 
                    lpszFileToDelete = tchBuffer; 
 
                    DlgDirSelectEx(hDlg, lpszFileToDelete, MAX_PATH, 
                        IDL_FILES); 
                    fResult = DeleteFile(lpszFileToDelete); 
                    if (!fResult) 
                    { 
                        MessageBox(hDlg, "Could not delete file.", 
                            NULL, MB_OK); 
                    } 
                    else 
                    { 
                        nItem = SendMessage(GetDlgItem(hDlg, 
                                IDL_FILES), LB_GETCURSEL, 0, 0); 
 
                        nTotal = SendMessage(GetDlgItem(hDlg, 
                            IDL_FILES), LB_DELETESTRING, nItem, 0); 
 
                        // Update the list box. 
 
                        if (nTotal > nItem) 
                        { 
                            SendMessage(GetDlgItem(hDlg, IDL_FILES), 
                                LB_SETCURSEL, nItem, 0); 
                        } 
                        else 
                        { 
                            SendMessage(GetDlgItem(hDlg, IDL_FILES), 
                                LB_SETCURSEL, nTotal, 0); 
                        } 
                    } 
                    return TRUE; 
 
                case IDCANCEL: 
 
                    // Destroy the dialog box. 
 
                    EndDialog(hDlg, TRUE); 
                    return TRUE; 
 
                default: 
                    return FALSE; 
            } 
 
        default: 
            return FALSE; 
    } 
}