创建多选列表框

【勇芳软件工作室】汉化HomePreviousNext

以下示例显示和初始化上述示例中使用的对话框。但是,此代码使用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;

}

}