本站启用国内永久域名: www.LewenSky.cn,请大家使用新域名访问网站!
9月3

CFileDialog文件选择对话框的使用

| |
23:33MFC/VC++  From: 网络
首先构造一个对象并提供相应的参数,构造函数原型如下:
CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );
参数意义如下:
    
bOpenFileDialog 为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框。    
lpszDefExt 指定默认的文件扩展名。    
lpszFileName 指定默认的文件名。    
dwFlags 指明一些特定风格。    
lpszFilter 是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。参数格式如: "Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。    
pParentWnd 为父窗口指针。
创建文件对话框可以使用DoModal(),在返回后可以利用下面的函数得到用户选择:
    
CString CFileDialog::GetPathName( ) 得到完整的文件名,包括目录名和扩展名如:c:\test\test1.txt    
CString CFileDialog::GetFileName( ) 得到完整的文件名,包括扩展名如:test1.txt    
CString CFileDialog::GetExtName( ) 得到完整的文件扩展名,如:txt    
CString CFileDialog::GetFileTitle ( ) 得到完整的文件名,不包括目录名和扩展名如:test1    
POSITION CFileDialog::GetStartPosition( ) 对于选择了多个文件的情况得到第一个文件位置。    
CString CFileDialog::GetNextPathName( POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。
CColorDialog颜色选择对话框的使用:首先通过CColorDialog::CColorDialog( COLORREF clrInit = 0, DWORD dwFlags = 0, CWnd* pParentWnd = NULL )构造一个对象,其中clrInit为初始颜色。通过调用DoModal()创建对话框,在返回后调用COLORREF CColorDialog::GetColor( )得到用户选择的颜色值。
CFontDialog字体选择对话框的使用:首先构造一个对象并提供相应的参数,构造函数原型如下: CFontDialog::CFontDialog( LPLOGFONT lplfInitial = NULL, DWORD dwFlags = CF_EFFECTS | CF_SCREENFONTS, CDC* pdcPrinter = NULL, CWnd* pParentWnd = NULL );构造一个对象,其中参数lplfInitial指向一个LOGFONG结构.如果该参数设置为NULL表示不设置初始字体。pdcPrinter指向一个代表打印机设备环境的DC对象,若设置该参数则选择的字体就为打印机所用。pParentWnd用于指定父窗口。通过调用DoModal()创建对话框,在返回后通过调用以下函数来得到用户选择:
    
void CFontDialog::GetCurrentFont( LPLOGFONT lplf );用来获得所选字体的属性。该函数有一个参数,该参数是指向LOGFONT结构的指针,函数将所选字体的各种属性写入这个LOGFONT结构中。    
CString CFontDialog::GetFaceName( ) 得到所选字体名字。    
int CFontDialog::GetSize( ) 得到所选字体的尺寸(以10个象素为单位)。    
COLORREF CFontDialog::GetColor( ) 得到所选字体的颜色。    
BOOL CFontDialog::IsStrikeOut( ) BOOL CFontDialog::IsUnderline( ) BOOL CFontDialog::IsBold( ) BOOL CFontDialog::IsItalic( ) 得到所选字体的其他属性,是否有删除线,是否有下划线,是否为粗体,是否为斜体。
需要注意的是,用了CFileDialog之后,会把程序的当前路径设置成选中文件的路径所以,如果程序里有用到IO访问或者数据库访问之类的本地操作时,需要注意你的当前路径用相对路径的话就不是原来你的程序路径了,切记!

CFileDialog dllDlg(TRUE);
char tempPath[256];
GetCurrentDirectoryA(255, tempPath);
if(dllDlg.DoModal() == IDOK);
SetCurrentDirectoryA(tempPath);



引用
如何进行文件操作

取得文件名
{
       CString  
       FilePathName;
       CFileDialog dlg(TRUE);///TRUE为OPEN对话框,FALSE为SAVE AS对话框
       if(dlg.DoModal()==IDOK)
       FilePathName=dlg.GetPathName();
}    
相关信息:CFileDialog 用于取文件名的几个成员函数:
假如选择的文件是C:\\WINDOWS\\TEST.EXE
则:
   (1)GetPathName();取文件名全称,包括完整路径。取回C:\\WINDOWS\\TEST.EXE
   (2)GetFileTitle();取文件全名:TEST.EXE
   (3)GetFileName();取回TEST
   (4)GetFileExt();取扩展名EXE

打开文件
CFile file(\"C:\\HELLO.TXT\",CFile::modeRead);///只读方式打开
///CFile::modeRead可改为 CFile::modeWrite(只写),CFile::modeReadWrite(读写),CFile::modeCreate(新建)
例子:
{
     CFile file;
     file.Open(\"C:\\HELLO.TXT\",CFile::modeCreate|Cfile::modeWrite);
     ...
     ...
}

移动文件指针
     file.Seek(100,CFile::begin);///从文件头开始往下移动100字节
     file.Seek(-50,CFile::end);///从文件末尾往上移动50字节
     file.Seek(-30,CFile::current);///从当前位置往上移动30字节
     file.SeekToBegin();///移到文件头
     file.SeekToEnd();///移到文件尾

读写文件
   读文件:
       char buffer[1000];
       file.Read(buffer,1000);
   写文件:
       CString string(\"这个世界只有偏执狂才能成功\");
       file.Write(string,8);

关闭文件
   file.Close();

DoModal()是窗口类的成员函数,函数代码系统已经写好了的,只需要用建立过类对象(如C**Dlg),对DoModal()(如C**Dlg.DoModal())进行调用即可,调用该函数的作用是弹出一个对话框。

主要作用是
1.在DoModal里加载了对话框资源并调用CreateDlgIndirect()创建对话框
2.使对话框进入有模式消息循环:
DWORD dwFlags=MLF_SHOWONIDLE;
if(GetStyl()&DS_NOIDLEMSG;
VERIFY(RunModalLoop(dwFlags)==m_nModalResult;
3.在消息循环结束得时候销毁窗口,释放资源:
DestroyWindow();
PostModal();
UnlockResource(hDialogTemplate);
FreeResource(hDialogTemplat);

GetPathName()函数用来取得文件所在路径的全名



UpdateData()函数:

UpdateData(TRUE);//把界面中控件的当前值传给和控件变量  
  UpdateData(FALSE);//把控件变量中的值显示在界面的控件中UpdateData函数是有返回值的,可以利用其返回值判断输入变量的合法性,如:你规定了某个文本框的输入变量类型或者取值范围,而用户输入时不符合你的要求便可以通过该函数的返回值进行判断。

在对话框初始化的时候或者从新显示对话框中的信息的时候用  
  比如对话框中有个editctrl,成员变量是CString   m_str  
    
  在初始化的时候m_str   =   \"aaa\";  
  Updatedata(FALSE);  
  这样就是在editctrl中显示了aaa  
    
  如果在editctrl中改变成了bbb,为了让m_str也变成bbb  
  就要Updatedata(TRUE);  
    
  CString   str   =   m_str;  
    
  这样str就是\"bbb\"了




出处:网络
转载时必须以链接形式注明出处及本声明!


最新日志 随机日志 综合排行
  • OFFICE 2010 VOL...
  • 格式工厂绿色版 V2.90
  • Password Invent...
  • VideoCacheView ...
  • 电脑店U盘启动盘制作工具 3....
  • 阿里旺旺AliIM2011_7...
  • 极点五笔十周年纪念版
  • PPTV网络电视3.1.1.0...
  • WinRAR注册方法
  • 紫光华宇拼音输入法 6.8.0...
  • PPStream V2.6.8...
  • 黑营QQ军刀v5.6.1绿色版...
  • [03-06]最新绿色免费软件...
  • QQ伴侣 2.57 去广告绿色...
  • 格式工厂去广告 V2.00┊支...
  • CVSNT-2.5.03 设置...
  • VideoCacheView ...
  • 酷狗7 (7.1.07Beta...
  • MSNLite V1.0 Be...
  • 一个简单的 Microsoft...
  • 安装软件时出现系统提示&quo...
  • XP与XP无线共享设置(笔记本...
  • ZineMaker目录模板大集...
  • 没有不可能 轻松实现PDG转P...
  • CString转char的方法...
  • [转]MSDN精简版、MSDN...
  • 将IE、FIREFOR (火狐...
  • VC多线程编程(转)
  • MyEclipse6.5下载地...
  • Diskeeper 2010 ...
  • 阅读(4016) | 评论(14) | 引用(0)
    发表评论
    表情
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    打开HTML
    打开UBB
    打开表情
    隐藏
    记住我
    昵称   密码   游客无需密码
    网址   电邮   [注册]