WEB开发网
开发学院软件开发VC 在打开文件对话框上实现图象预览 阅读

在打开文件对话框上实现图象预览

 2010-06-15 20:40:25 来源:WEB开发网   
核心提示:6、多选问题的解决:1).使用CFileDialog类选择多个文件时,发现选择的文件个数有限,在打开文件对话框上实现图象预览(7),这是因为m_ofn.nMaxFile的值有限:256Btye,解决的办法是:将m_ofn.lpstrFile的缓冲区换成自己的指针,实现对3D图形的预览,也就是对STL(CAD中常用的存储

6、多选问题的解决:

1).使用CFileDialog类选择多个文件时,发现选择的文件个数有限,这是因为m_ofn.nMaxFile的值有限:256Btye,解决的办法是:将m_ofn.lpstrFile的缓冲区换成自己的指针。选择多个文件,首先要给m_ofn的标志nFlags加上OFN_ALLOWMULTISELECT。当用户选择多个文件,CFileDialog会把选择后的文件名拷贝到一个缓冲区,默认这个缓冲区有256个字符,这对于要求多选的用户来说是不够的。你可以将m_ofn.lpstrFile替换成自己的缓冲区指针:

char sBuffer[2000];

memset(sBuffer, 0, 2000);

CSTLFileDialog dlg(TRUE);

dlg.m_ofn.lpstrFile = sBuffer;

dlg.m_ofn.nMaxFile = 2000; //解决多选问题

这个方法解决多选问题,就是简便易懂。如果你多选的真好是257或300个字符,那么其余的1400个空间易浪费了。下面介绍一个动态解决分配的方法,请看代码:

//------1.动态分配内存空间,解决多选的问题---------------------------------------

void CSTLFileDialog::SolveMoreSelect()
{
TCHAR chBuffer;
TCHAR *chFiles = NULL;
TCHAR *chFolder = NULL;

UINT nFileSize;
UINT nFolderSize;

nFileSize = CommDlg_OpenSave_GetSpec(GetParent()->m_hWnd, &chBuffer,
1);
nFolderSize = CommDlg_OpenSave_GetFolderPath(GetParent()->m_hWnd, &chBuffer,
1);

if((nFileSize + nFolderSize) > m_ofn.nMaxFile)
{
if(chFiles)
{
delete[] chFiles;
}
chFiles = new TCHAR[nFileSize + 1];
CommDlg_OpenSave_GetSpec(GetParent()->m_hWnd, chFiles, nFileSize);
if(chFolder)
{
delete[] chFolder;
}
chFolder = new TCHAR[nFolderSize + 1];
CommDlg_OpenSave_GetSpec(GetParent()->m_hWnd, chFolder, nFolderSize);
}
else
{
if(chFiles)
{
delete[] chFiles;
chFiles = NULL;
}
if(chFolder)
{
delete[] chFolder;
chFolder = NULL;
}
}

7、对预览问题的收集,如对文本,声音等

结束语:

在这里我要感谢帮助过我的朋友们,希望您对我写的文章提出宝贵的意见!另外如果有时间我的另一篇文章将介绍在CFileDialog的打开文件对话框中,实现对3D图形的预览,也就是对STL(CAD中常用的存储格式)格式的文件进行预览,这才是我的要做的!如果表述不清之处,请Email联系!

本文配套源码

上一页  2 3 4 5 6 7 

Tags:打开 文件 对话框

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接