Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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;
}
}
İlgili konular