急!求助:怎样处理自己定制的打开文件对话框(继承自CFileDialog)中的控件逻辑? 需要一个特制的打开文件对话框,使用老式风格(驱动器下拉列表,目录列表框),另外增加一个listbox用来显示当前选中目录的子目录,提供用户一次从中选择多个子目录的功能,返回这些子目录名。已经使用模板方式构造了新的对话框,只是不知道如何在用户选择目录时控制子目录listbox的变化,以及返回这些子目录。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CFileDialog本身就可以实现多选功能FIX: Common File Dialog Multiple Selection File Limit Q179372 #include "cderr.h" //for definition of FNERR_BUFFERTOOSMALL CFileDialog dlg( TRUE, NULL, NULL, OFN_ALLOWMULTISELECT, NULL, NULL ); DWORD MAXFILE = 2562; //2562 is the max dlg.m_ofn.nMaxFile = MAXFILE; char* pc = new char[MAXFILE]; dlg.m_ofn.lpstrFile = pc; dlg.m_ofn.lpstrFile[0] = NULL; int iReturn = dlg.DoModal(); if(iReturn == IDOK) { int nCount = 0; POSITION pos = dlg.GetStartPosition(); while (pos != NULL) { dlg.GetNextPathName(pos); nCount++; } CString str; str.Format("Successfully opened %d files\n", nCount); AfxMessageBox(str); } else if(iReturn == IDCANCEL) AfxMessageBox("Cancel"); if(CommDlgExtendedError() == FNERR_BUFFERTOOSMALL) AfxMessageBox("BUFFERTOOSMALL"); delete []pc; 从CFileDialog继承一个新类,添加CListBox成员用来控制你的listbox控件,并用这个类来产生你的文件对话框。 不是多选文件,是选择一个目录后,列出它的所有子目录在另一个listbox中,提供用户选择多个子目录,要得到的就是选中的子目录名,新加上的listbox不知道怎样能够在用户选择目录时填写这个listbox中的子目录名。 webber84(糕鱼昏) 大哥请详细讲讲,我用VC没多久,还有怎样控制填写这个listbox呢。 打印特殊字符问题 codejock MFC修改菜单快捷键 将一个单色位图转换成256位图 一个非常需要被解决的问题 请教:怎么显示位图 一个奇怪的编译错误 产生随机数用什么函数啊? mfc多文档中怎么改变子窗口的位置 如何判断一个字符串中是否包含一些特定得字符,比如包含"snow"之类得? .asp文档如何阅读?为何用WORD或记事本打开时出现乱码?即答即给分,谢谢! oracle中的数据decimal类型如何变成float?
Q179372
#include "cderr.h" //for definition of FNERR_BUFFERTOOSMALL CFileDialog dlg( TRUE, NULL, NULL, OFN_ALLOWMULTISELECT, NULL, NULL );
DWORD MAXFILE = 2562; //2562 is the max
dlg.m_ofn.nMaxFile = MAXFILE;
char* pc = new char[MAXFILE];
dlg.m_ofn.lpstrFile = pc;
dlg.m_ofn.lpstrFile[0] = NULL; int iReturn = dlg.DoModal();
if(iReturn == IDOK)
{
int nCount = 0;
POSITION pos = dlg.GetStartPosition();
while (pos != NULL)
{
dlg.GetNextPathName(pos);
nCount++;
}
CString str;
str.Format("Successfully opened %d files\n", nCount);
AfxMessageBox(str);
}
else if(iReturn == IDCANCEL)
AfxMessageBox("Cancel"); if(CommDlgExtendedError() == FNERR_BUFFERTOOSMALL)
AfxMessageBox("BUFFERTOOSMALL");
delete []pc;