下面的代碼演示了如何得到GetOpenFileName允許多選的情況下選擇的文件名
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
OPENFILENAME ofn;
TCHAR szOpenFileNames[80*MAX_PATH];
TCHAR szPath[MAX_PATH];
TCHAR szFileName[80*MAX_PATH];
TCHAR* p;
int nLen = 0;
ZeroMemory( &ofn, sizeof(ofn) );
ofn.Flags = OFN_EXPLORER | OFN_ALLOWMULTISELECT;
ofn.lStructSize = sizeof(ofn);
ofn.lpstrFile = szOpenFileNames;
ofn.nMaxFile = sizeof(szOpenFileNames);
ofn.lpstrFile[0] = '\0';
ofn.lpstrFilter = TEXT("All Files(*.*)\0*.*\0");
if( GetOpenFileName( &ofn ) )
{
//把第一個(gè)文件名前的復制到szPath,即:
//如果只選了一個(gè)文件,就復制到最后一個(gè)'\'
//如果選了多個(gè)文件,就復制到第一個(gè)NULL字符
lstrcpyn(szPath, szOpenFileNames, ofn.nFileOffset );
//當只選了一個(gè)文件時(shí),下面這個(gè)NULL字符是必需的.
//這里不區別對待選了一個(gè)和多個(gè)文件的情況
szPath[ ofn.nFileOffset ] = '\0';
nLen = lstrlen(szPath);
if( szPath[nLen-1] != '\\' ) //如果選了多個(gè)文件,則必須加上'\\'
{
lstrcat(szPath, TEXT("\\"));
}
p = szOpenFileNames + ofn.nFileOffset; //把指針移到第一個(gè)文件
ZeroMemory(szFileName, sizeof(szFileName));
while( *p )
{
lstrcat(szFileName, szPath); //給文件名加上路徑
lstrcat(szFileName, p); //加上文件名
lstrcat(szFileName, TEXT("\n")); //換行
p += lstrlen(p) +1; //移至下一個(gè)文件
}
MessageBox(NULL, szFileName, TEXT("MultiSelect"), MB_OK);
}
}
==============================================