您的位置:首页 > 运维架构

如何得到通过GetOpenFileName选择的多个文件的文件名

2013-11-10 10:46 435 查看
下面的代码演示了如何得到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 ) )

{

//把第一个文件名前的复制到szPath,即:

//如果只选了一个文件,就复制到最后一个'\'

//如果选了多个文件,就复制到第一个NULL字符

lstrcpyn(szPath, szOpenFileNames, ofn.nFileOffset );

//当只选了一个文件时,下面这个NULL字符是必需的.

//这里不区别对待选了一个和多个文件的情况

szPath[ ofn.nFileOffset ] = '\0';

nLen = lstrlen(szPath);

if( szPath[nLen-1] != '\\' ) //如果选了多个文件,则必须加上'\\'

{

lstrcat(szPath, TEXT("\\"));

}

p = szOpenFileNames + ofn.nFileOffset; //把指针移到第一个文件

ZeroMemory(szFileName, sizeof(szFileName));

while( *p )

{

lstrcat(szFileName, szPath); //给文件名加上路径

lstrcat(szFileName, p); //加上文件名

lstrcat(szFileName, TEXT("\n")); //换行

p += lstrlen(p) +1; //移至下一个文件

}

MessageBox(NULL, szFileName, TEXT("MultiSelect"), MB_OK);

}

}

摘自:http://xxkkff.blog.51cto.com/162016/26222
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: