更新时间:2015-09-08 21:04:35浏览次数:1+次
对于“打开”“保存”对话框,我们不陌生,经常用到。今天我们就讲讲如何来创建这两种文件对话框。
对于那两种文件对话框,C,C++两种语言都有详细的介绍,但我还是觉得C语言相对过于复杂,C++有点复杂,若想学习了解这两种文件对话框,大家可看看相关书籍。我们还是用MFC来实现吧。
首先我们用VC6.0创建一个单文档项目,命名为File,接下来我们在VC自己给我们创建的菜单中添加项目,首先:
我们按如图在菜单中添加一个“文件”,并在其下拉列表中,增加两个子菜单”写入文件“”读取文件“,ID号分别为IDM_WRITE,IDM_READ,接着我们为他们创建建立类向导,右键点击,选择类向导,就会进入:
我们按照如图步骤操作,VC就会为我们生成两个函数:
void CFileView::OnFileWrite()
{
// TODO: Add your command handler code here
}
void CFileView::OnFileRead()
{
// TODO: Add your command handler code here
}
void CFileView::OnFileWrite()
{
// TODO: Add your command handler code here
CFileDialog fileDlg(FALSE);//保存对话框
fileDlg.DoModal();
}
对于MFC,windows程序员对它进行了类封装,使得众多的函数都封装在类里边,我们可以很方便的调用一个类就能使用一大堆的函数,我们创建文件对话框,就调用CFileDialog类,类名直译过来是不是就是文件对话框?windows程序员,在设计MFC时,就考虑了类名的记忆,因此我们能轻易的从类名理解它的作用。我们看看CFileDialog函数:
explicit CFileDialog(
BOOL bOpenFileDialog,
LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL,
DWORD dwSize = 0,
BOOL bVistaStyle = TRUE
);
就像我们说的,我们用CFiledialog类来创建两种文件对话框,而第一个参数时BOOL值,只有两个值,对应两种文件对话框,因此,当它为FALSE时就是表示保存保存对话框,TRUE就是打开对话框。接下来就是创建对话框了,然后我们就是创建对话框了
我们运行程序后,点击”写入文件“就会跳出这个对话框,标题为”另存为“,接下来我们修改标题,以及文件过滤器。
fileDlg.m_ofn.lpstrTitle="我的文件对话框";
fileDlg.m_ofn.lpstrFilter="Text File(*.txt)\0*.txt\0ALL Files(*.*)\0*.*\0\0"; // 过滤器
fileDlg.m_ofn.lpstrDefExt="txt";//默认拓展名
if(IDOK==fileDlg.DoModal())
{
CFile file(fileDlg.GetFileName(),CFile::modeCreate | CFile::modeWrite);
file.Write("httpcsdsdv",strlen("httpcsdsdv"));
file.Close();
}
CFile( );
CFile(
CAtlTransactionManager* pTM
);
CFile(
HANDLE hFile
);
CFile(
LPCTSTR lpszFileName,
UINT nOpenFlags
);
CFile(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CAtlTransactionManager* pTM
);
CFile::modeRead
只读取权限。
CFile::modeWrite
请求只写访问权。
CFile::modeReadWrite
读取的请求和写入。
我们创建的是“保存对话框”,选择写入(cfile::write),因此调用函数write,解析如下:
virtual void Write(
const void* lpBuf,
UINT nCount
);
void CFile1View::OnRead()
{
// TODO: Add your command handler code here
CFileDialog filedlg(TRUE);
filedlg.m_ofn.lpstrTitle="我的打开文件";
filedlg.m_ofn.lpstrFilter="Text File(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0";
if(IDOK==filedlg.DoModal())
{
CFile file(filedlg.GetFileName(),CFile::modeRead);
char pBuf[100];
DWORD dwfilelen;
dwfilelen=file.GetLength();
pBuf[dwfilelen]=0;
file.Read(pBuf,dwfilelen);
MessageBox(pBuf);
file.Close();
}
}
virtual UINT Read(
void* lpBuf,
UINT nCount
);
最后结果
我们以MessageBox(),弹出我们写入的文件。过两天,我在详细写篇文章讲解读取字符串的一些细节。并实现读取电脑上的文件,而不是我们自己写入的文件。
相关资讯