以下示例演示如何在列表框中显示当前目录的内容,并允许用户一次删除一个文件。
除了标准列表框样式之外,此列表框还包含LBS_MULTICOLUMN和LBS_HSCROLL样式。该代码通过使用DlgDirList函数来初始化列表框,以使用当前目录中的所有文件的名称填充列表框。当用户选择删除按钮时,DlgDirSelectEx功能将检索所选文件的名称。代码使用DeleteFile功能删除文件,并通过发送LB_DELETESTRING消息更新目录列表框。
#define BUFFER MAX_PATH
/*
*功能:DlgDelFileProc(HWND,无符号,UINT,LONG)
*
*目的:“删除文件”对话框
*/
BOOL APIENTRY DlgDelFileProc(
HWND hDlg,/ *对话框的窗口句柄* /
UINT消息,/ *消息类型* /
UINT wParam,/ *消息特定信息* /
LONG lParam)
{
DWORD cchCurDir;
LPTSTR lpszCurDir;
LPTSTR lpszFileToDelete;
int nItem;
int nTotal;
TCHAR tchBuffer[BUFFER];
BOOL fResult;
switch(message){
case WM_INITDIALOG:
/*
*通过从列表框中填入文件来初始化列表框
*当前目录。
*/
lpszCurDir = tchBuffer;
GetCurrentDirectory(cchCurDir, lpszCurDir);
DlgDirList(hDlg, lpszCurDir, IDL_FILES, IDS_PATHTOFILL, 0);
SetFocus(GetDlgItem(hDlg, IDL_FILES));
return FALSE;
case WM_COMMAND:
开关(LOWORD(wParam)){
case IDOK:
/*
*当用户按DEL(IDOK)按钮时,
*删除所选文件。
*/
lpszFileToDelete = tchBuffer;
DlgDirSelectEx(hDlg,lpszFileToDelete,MAX_PATH,
IDL_FILES);
fResult = DeleteFile(lpszFileToDelete);
if(!fResult){
MessageBox(hDlg,“无法删除文件”。
NULL, MB_OK);
}
else {
nItem = SendMessage(GetDlgItem(hDlg, IDL_FILES),
LB_GETCURSEL, 0, 0);
nTotal = SendMessage(GetDlgItem(hDlg,
IDL_FILES), LB_DELETESTRING, nItem, 0);
/ *更新列表框。*/
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:
/ *销毁对话框。*/
EndDialog(hDlg, TRUE);
return TRUE;
默认:
return FALSE;
}
默认:
return FALSE;
}
}