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 använder en listruta med en enda markering för att visa och komma åt innehållet i en katalog. Listruta för enkelval är standardtypen. En användare kan endast välja ett objekt i taget från en listruta med en enda markering.
Med C++-kodexemplet i det här avsnittet kan en användare visa en lista över filer i den aktuella katalogen, välja en fil i listan och ta bort den.
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 filnamnet från listrutan när den valda filen har tagits bort.
I följande C++-kodexempel initierar dialogruteproceduren listrutan (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 fil och väljer knappen Ta bort hämtar funktionen DlgDirSelectEx namnet på den valda filen. Koden tar bort filen med hjälp av funktionen DeleteFile och uppdaterar kataloglistrutan genom att skicka LB_DELETESTRING meddelandet.
INT_PTR CALLBACK DlgDelFileProc(HWND hDlg, UINT message,
UINT wParam, LONG lParam)
{
PTSTR pszCurDir;
PTSTR pszFileToDelete;
int iLBItem;
int cStringsRemaining;
int iRet;
TCHAR achBuffer[MAX_PATH];
TCHAR achTemp[MAX_PATH];
BOOL fResult;
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 selected file.
pszFileToDelete = achBuffer;
DlgDirSelectEx(hDlg, pszFileToDelete, MAX_PATH,
IDC_FILELIST);
// Make sure the user really wants to delete the file.
achTemp[MAX_PATH];
StringCbPrintf (achTemp, ARRAYSIZE(achTemp),
TEXT("Are you sure you want to delete %s?"),
pszFileToDelete);
iRet = MessageBox(hDlg, achTemp, L"Deleting Files",
MB_YESNO | MB_ICONEXCLAMATION);
if (iRet == IDNO)
return TRUE;
// Delete the file.
fResult = DeleteFile(pszFileToDelete);
if (!fResult)
{
MessageBox(hDlg, L"Could not delete file.",
NULL, MB_OK);
}
else // Remove the filename from the list box.
{
// Get the selected item.
iLBItem = SendMessage(GetDlgItem(hDlg, IDC_FILELIST),
LB_GETCURSEL, 0, 0);
// Delete the selected item.
cStringsRemaining = SendMessage(GetDlgItem(hDlg, IDC_FILELIST),
LB_DELETESTRING, iLBItem, 0);
// If this is not the last item, set the selection to
// the item immediately following the one just deleted.
// Otherwise, set the selection to the last item.
if (cStringsRemaining > iLBItem)
{
SendMessage(GetDlgItem(hDlg, IDC_FILELIST),
LB_SETCURSEL, iLBItem, 0);
}
else
{
SendMessage(GetDlgItem(hDlg, IDC_FILELIST),
LB_SETCURSEL, cStringsRemaining, 0);
}
}
return TRUE;
case IDCANCEL:
// Destroy the dialog box.
EndDialog(hDlg, TRUE);
return TRUE;
default:
return FALSE;
}
default:
return FALSE;
}
}
Relaterade ämnen
-
Om listrutor
-
Använda listrutor