Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här avsnittet visar hur du visar och kommer åt innehållet i en katalog i en listruta med flera val. I en listruta med flera val kan användaren välja fler än ett objekt i taget.
Med C++-kodexemplet i det här avsnittet kan en användare visa en lista med filer i den aktuella katalogen, välja en grupp med filer i listan och ta bort dem.
Vad du behöver veta
Teknologier
Förutsättningar
- C/C++
- Programmering av Windows-användargränssnitt
Instruktioner
Kataloglistningsprogrammet måste utföra följande listruterelaterade uppgifter:
- Initiera listrutan.
- Hämta användarens val från listrutan.
- Ta bort filnamnen från listrutan när de markerade filerna har tagits bort.
I följande C++-kodexempel initierar dialogruteproceduren listrutan med flera val (IDC_FILELIST) med hjälp av funktionen DlgDirList för att fylla listrutan med namnen på alla filer i den aktuella katalogen.
När användaren väljer en grupp med filer och väljer knappen Ta bort skickar dialogruteproceduren LB_GETSELCOUNT meddelande, för att hämta antalet markerade filer och LB_GETSELITEMS meddelande, för att hämta en matris med markerade listruteobjekt. När du har raderat en fil tar dialogrutan bort motsvarande objekt från listrutan genom att skicka LB_DELETESTRING meddelandet.
#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;
}
}
Relaterade ämnen