我有以下代码:
void OpenJpgFile(HWND hWnd)
{
OPENFILENAME ofn;
wchar_t szFileName[17*MAX_PATH] = L"";
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hWnd;
ofn.lpstrTitle = L"Selecione as fotos que deseja adicionar...";
ofn.lpstrFilter = L"Arquivos JPEG (*.jpg)\0*.jpg\0Todos os Arquivos (*.*)\0*.*\0";
ofn.lpstrFile = szFileName;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT;
ofn.lpstrDefExt = L"jpg";
if(GetOpenFileName(&ofn))
{
//Test
MessageBox(hWnd,ofn.lpstrFileTitle,L"TESTE",NULL);
if(gpBitmap)
{
delete gpBitmap;
}
gpBitmap = new Bitmap(szFileName);
InvalidateRect(hWnd, NULL, TRUE);
UpdateWindow(hWnd);
}
}
我想知道的是如何获取用户选择的所有文件的名称......
我能得到的只是文件夹的路径......是否有一个保存文件名的数组?
答案 0 :(得分:2)
当documentation of OFN_ALLOWMULTISELECT
同时指定OFN_EXPLORER
时,lpstrFile
将包含目录,后跟文件名,以空字符分隔,并以两个相邻的空字符结束。当您调用new Bitmap(szFileName)
时,您正在错误地处理szFileName
- 即您将其传递给期望标准的单空终止字符串的构造函数。相反,您必须更仔细地处理它以读取初始空值,并可能重新创建完整的文件路径。
此字符串格式恰好与REG_MULTI_SZ
使用的格式相同,因此,除了不必担心缺少最终终止符之外,与处理REG_MULTI_SZ
类型值相关的建议可以帮助您。
请注意,要完全通用,您可能还需要处理需要更大缓冲区的情况。有关该
的另一个角度,请参阅GetOpenFileName() with OFN_ALLOWMULTISELECT flag set