在对话框中,怎样使一个按钮具有象一般WINDOWS程序中,保存的功能,即可以选择文件夹,指定文件名等等? 问题同标题,谢谢. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是的,这个对话框是内部封装好的,你调用这个类的函数自己就会出来的。你可依找msdn上的例子看看。 CFileDialog fDlg;fDlg.DoModal(); 呵呵,可能是我没说清楚,我的意思是说我已经写好了一个对话框了,我想在上面加一个按钮,该按钮实现的功能是和WINDOWS的"保存"按钮功能差不多,即可以选择要保存的文件放在哪个文件夹.和文件名.该按钮的单击函数应该怎么写呢?谢谢 在对话框资源上面加上一个按钮,用类向导给它加入一个单击的函数。函数体:{ CFileDialog fDlg(FALSE);//如果是TRUE就是打开文件 fDlg.DoModal();} 在对话框资源上面加上一个按钮,用类向导给它加入一个单击的函数。函数体:{ CFileDialog fDlg(FALSE);//如果是TRUE就是打开文件 fDlg.DoModal();} void CTestView::OnBUTTONSelPlayFile() { CFileDialog cf(1,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"all files(*.*)|*.*|",NULL); cf.m_ofn.lpstrInitialDir = szCurPath; if(cf.DoModal() == IDOK) { if(!m_SelectAllCh) { strcpy(szCurPlayFilePath[CurCh], cf.GetPathName()); strcpy(szCurPlayFile[CurCh] , cf.GetFileName()); SetDlgItemText(IDC_EDIT_PLAYFILENAME, szCurPlayFile[CurCh]); UpdateData(false); } else { int nStartCh = GetDlgItemInt(IDC_EDIT_SelectAllChStart, NULL, TRUE); int nEndCh = GetDlgItemInt(IDC_EDIT_SelectAllChEnd, NULL, TRUE); for(int ch=nStartCh; ch<=nEndCh; ch++) { strcpy(szCurPlayFilePath[ch], cf.GetPathName()); strcpy(szCurPlayFile[ch] , cf.GetFileName()); SetDlgItemText(IDC_EDIT_PLAYFILENAME, szCurPlayFile[ch]); //UpdateData(false); } } }}消化消化這個,妳的要求應該就全部滿足鳥~~~ CFileDialog Filedlg(TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT|OFN_EXPLORER, "Data Files (*.bak;*.txt)|*.bak;*.txt|All files(*.*)|*.*||", NULL); if(Filedlg.DoModal() == IDOK) { CString strFilePath = Filedlg.GetPathName(); } 哈哈 我也来晚了 这么多人都会 我前些天也用到这个着 就是使用CFileDialog类一种情况是用来打开文件的 一种则是用来保存的 那当用户点击OK按钮,即Filedlg.DoModal() == IDOK时,空文件就已经建立好,我就直接可以往里面写数据了吗?真不好意思,刚开始学VC,好多都不懂. virtual void Serialize( CArchive& ar );// example for CObject::Serializevoid CAge::Serialize( CArchive& ar ) { CObject::Serialize( ar ); if( ar.IsStoring() ) ar << m_years; else ar >> m_years; }//这个东东较复杂(不像上面那么简单了),你看资料要看1天才能弄明白。 (???我楼上的帖子上面一部分怎么没有了,呵呵,我补上:)这个问题就复杂了。保存文件就涉及到序列化的问题了:serialize... (???我楼上的帖子上面一部分怎么没有了,呵呵,我补上:)这个问题就复杂了。保存文件就涉及到序列化的问题了:serialize... 不用什么序列化你在你的按钮中加上如下代码就可以了 OPENFILENAME ofn; // common dialog box structure char szFile[260]={0}; // buffer for file name char szTitle[40]={0}; // Initialize OPENFILENAME ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = NULL; ofn.lpstrFile = szFile; ofn.nMaxFile = sizeof(szFile); ofn.lpstrFilter = "All\0*.*\0Exe\0*.exe\0"; ofn.nFilterIndex = 1; ofn.lpstrFileTitle = szTitle; ofn.nMaxFileTitle = sizeof(szTitle); ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; // Display the Open dialog box. if (GetOpenFileName(&ofn)==FALSE) { return; } 这里为什么又用OPENFILENAME?前面的人说用CFileDialog,我已经试出来了,他们两个有什么区别吗? opengl红宝书readImage.c,读出的数据错误 SetDIBitsToDevice显示的视频怎么保存下来 使用 WININET 中的 InternetOpenUrl 读取页面时,404错误如何检测 怎样让对话框的菜单选项打勾啊? mfc 中使用STL的问题 如何改变IE控件滚动条的颜色? 如何使用桌面程序向web页面填充数据 用MFC框架CView及CFrameWnd类作打印模块默认A4不知道如何设成A3纸? visual c++技术内幕(第4版) mfc的几个问题 谁能告诉我,究竟怎样自定义消息? 高手帮忙啊 结构数组中一元素的地址作为函数参数传递总是出错!
fDlg.DoModal();
该按钮的单击函数应该怎么写呢?谢谢
函数体:
{
CFileDialog fDlg(FALSE);//如果是TRUE就是打开文件
fDlg.DoModal();
}
函数体:
{
CFileDialog fDlg(FALSE);//如果是TRUE就是打开文件
fDlg.DoModal();
}
{
CFileDialog cf(1,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"all files(*.*)|*.*|",NULL);
cf.m_ofn.lpstrInitialDir = szCurPath;
if(cf.DoModal() == IDOK)
{
if(!m_SelectAllCh)
{
strcpy(szCurPlayFilePath[CurCh], cf.GetPathName());
strcpy(szCurPlayFile[CurCh] , cf.GetFileName());
SetDlgItemText(IDC_EDIT_PLAYFILENAME, szCurPlayFile[CurCh]);
UpdateData(false);
}
else
{
int nStartCh = GetDlgItemInt(IDC_EDIT_SelectAllChStart, NULL, TRUE);
int nEndCh = GetDlgItemInt(IDC_EDIT_SelectAllChEnd, NULL, TRUE);
for(int ch=nStartCh; ch<=nEndCh; ch++)
{
strcpy(szCurPlayFilePath[ch], cf.GetPathName());
strcpy(szCurPlayFile[ch] , cf.GetFileName());
SetDlgItemText(IDC_EDIT_PLAYFILENAME, szCurPlayFile[ch]);
//UpdateData(false);
}
}
}
}消化消化這個,妳的要求應該就全部滿足鳥~~~
NULL,
NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT |
OFN_ALLOWMULTISELECT|OFN_EXPLORER,
"Data Files (*.bak;*.txt)|*.bak;*.txt|All files(*.*)|*.*||",
NULL); if(Filedlg.DoModal() == IDOK)
{
CString strFilePath = Filedlg.GetPathName();
}
一种情况是用来打开文件的 一种则是用来保存的
CArchive& ar
);// example for CObject::Serialize
void CAge::Serialize( CArchive& ar )
{
CObject::Serialize( ar );
if( ar.IsStoring() )
ar << m_years;
else
ar >> m_years;
}//这个东东较复杂(不像上面那么简单了),你看资料要看1天才能弄明白。
你在你的按钮中加上如下代码就可以了
OPENFILENAME ofn; // common dialog box structure
char szFile[260]={0}; // buffer for file name
char szTitle[40]={0};
// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = NULL;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Exe\0*.exe\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = szTitle;
ofn.nMaxFileTitle = sizeof(szTitle);
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
// Display the Open dialog box.
if (GetOpenFileName(&ofn)==FALSE)
{
return;
}
前面的人说用CFileDialog,我已经试出来了,他们两个有什么区别吗?