다음 예제에서는 목록 상자에서 현재 디렉터리의 내용을 표시 하 고 사용자가 한 번에 하나의 파일을 삭제할 수 있도록 하는 방법을 보여 줍니다.
표준 목록 상자 스타일 외에이 목록 상자는 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;
}
}