以下示例显示和初始化上述示例中使用的对话框。但是,此代码使用LBS_MULTIPLESEL样式来允许用户一次选择多个文件。当用户选择删除按钮时,该示例发送LB_GETSELCOUNT消息(以检索所选文件数)和LB_GETSELITEMS消息(以检索所选列表框项目的数组)。删除文件后,代码将通过发送LB_DELETESTRING消息从列表框中删除相应的项目。
#define BUFFER MAX_PATH
#define BIGBUFF 8192
/*
*功能:DlgDelFilesProc(HWND,无符号,UINT,LONG)
*
*目的:“删除文件”对话框
*/
BOOL APIENTRY DlgDelFilesProc(
HWND hDlg,/ *对话框的窗口句柄* /
UINT消息,/ *消息类型* /
UINT wParam,/ *消息特定信息* /
LONG lParam)
{
DWORD cchCurDir;
LPTSTR lpszCurDir;
LPTSTR lpszFileToDelete;
int nSelItems;
int nSelItemsInBuffer;
TCHAR tchBuffer[BUFFER];
TCHAR tchMsgBuff[BUFFER];
int nBuffer[BIGBUFF];
int i;
BOOL fResult;
HWND hListBox;
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:
/*
*当用户按Delete(IDOK)
*按钮,删除所有选定的文件。
*/
lpszFileToDelete = tchBuffer;
hListBox = GetDlgItem(hDlg, IDL_FILES);
nSelItems = SendMessage(hListBox,
LB_GETSELCOUNT, 0, 0);
nSelItemsInBuffer = SendMessage(hListBox,
LB_GETSELITEMS, 512, (LPARAM) nBuffer);
if(nSelItems > nSelItemsInBuffer){
MessageBox(hDlg,“选择的项目太多”,
NULL, MB_OK);
}
else {
/*
*经过列表后退
*删除每个索引变化的项目
*后续项目。通过向后走,
*从来没有指示任何失效。
*/
for (i = nSelItemsInBuffer - 1; i >= 0; i--) {
SendMessage(hListBox,LB_GETTEXT,
nBuffer [i],
(LPARAM) lpszFileToDelete);
fResult = DeleteFile(lpszFileToDelete);
if(!fResult){
sprintf(tchMsgBuff,
“无法删除文件:%s”
"GetLastError = %u",
(LPARAM) lpszFileToDelete);
/ *调用应用程序定义的错误处理程序。*/
ErrorHandler(tchMsgBuff);
}
else {
SendMessage(hListBox,LB_DELETESTRING,
nBuffer[i], 0);
}
}
SendMessage(hListBox, LB_SETCARETINDEX, 0, 0);
}
return TRUE;
case IDCANCEL:
/ *销毁对话框。*/
EndDialog(hDlg, TRUE);
return TRUE;
默认:
return FALSE;
}
默认:
return FALSE;
}
}