יצירת ערך בתיבת רשימה בחירה בודדת של הספריה

הדוגמה הבאה ממחישה כיצד להציג את התוכן של הספריה הנוכחית בתיבת רשימה ולאפשר למשתמש למחוק קובץ אחד בכל פעם.

בנוסף לסגנונות תיבת רשימה רגילה, תיבת רשימה זו כוללת את LBS_MULTICOLUMN ואת LBS_HSCROLL הסגנונות. הקוד אתחול תיבת הרשימה על-ידי שימוש בפונקציה DlgDirList כדי למלא את תיבת הרשימה עם השמות של כל הקבצים בספריה הנוכחית. כאשר המשתמש בוחר בלחצן מחק , הפונקציה DlgDirSelectEx מאחזר את השם של הקובץ הנבחר. הקוד מוחק את הקובץ על-ידי שימוש DeleteFile הפונקציה ועדכונים רשימת הספריות תיבה על-ידי שליחת הודעה LB_DELETESTRING.

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