Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit onderwerp ziet u hoe u de inhoud van een map in een keuzelijst met meerdere keuzemogelijkheden kunt weergeven en openen. In een keuzelijst met meerdere keuzemogelijkheden kan de gebruiker meer dan één item tegelijk selecteren.
Met het C++-codevoorbeeld in dit onderwerp kan een gebruiker een lijst met bestanden in de huidige map bekijken, een groep bestanden in de lijst selecteren en verwijderen.
Wat u moet weten
Technologieën
Voorwaarden
- C/C++
- Programmeren van Windows-gebruikersinterface
Aanwijzingen
De directory-vermeldingstoepassing moet de volgende taken uitvoeren met betrekking tot de lijstweergave:
- Initialiseer het lijstvak.
- Haal de selecties van de gebruiker op uit de keuzelijst.
- Verwijder de bestandsnamen uit de keuzelijst nadat de geselecteerde bestanden zijn verwijderd.
In het volgende C++-codevoorbeeld initialiseert de dialoogvensterprocedure de keuzelijst met meerdere keuzemogelijkheden (IDC_FILELIST) met behulp van de functie DlgDirList om de keuzelijst te vullen met de namen van alle bestanden in de huidige map.
Wanneer de gebruiker een groep bestanden selecteert en de knop Verwijderen kiest, verzendt de procedure van het dialoogvenster het LB_GETSELCOUNT bericht om het aantal geselecteerde bestanden en het LB_GETSELITEMS bericht op te halen om een matrix met geselecteerde keuzelijstitems op te halen. Nadat u een bestand hebt verwijderd, wordt met de dialoogvensterprocedure het bijbehorende item uit de keuzelijst verwijderd door het LB_DELETESTRING bericht te verzenden.
#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;
}
}
Verwante onderwerpen