Bir tek seçim liste kutusunda bir dizin oluşturma

Aşağıdaki örnek bir liste kutusunda geçerli dizinin içeriğini görüntülemek ve bir anda tek bir dosya silmek için kullanıcı etkinleştirmek gösterilmiştir.

Standart liste kutusunda stillerine ek olarak, LBS_MULTICOLUMN ve lbs_hscroll stili için bu liste kutusu vardır. Kod, geçerli dizindeki tüm dosyaların adlarını liste kutusunu doldurmak için DlgDirList işlevini kullanarak liste kutusu başlatır. DlgDirSelectEx işlevi, kullanıcı Sil düğmesini seçtiğinde, seçilen dosya adını alır. Kod kullanarak dosyayı siler DeleteFile fonksiyonu ve LB_DELETESTRING mesaj kutusuna dizin listesini güncelleştirme.

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