【转载】CFileDialog文件选择对话框的使用

CFileDialog文件选择对话框的使用:首先构造一个对象并提供相应的参数,构造函数原型如下: 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变量。

 实例:

char  szFliter[]  =   " log Fliex(*.log)|*.log|| " ;
 CFileDialog dlg(TRUE,NULL,
"" , OFN_HIDEREADONLY  |  OFN_OVERWRITEPROMPT  |
     OFN_ALLOWMULTISELECT, szFliter);
 m_itrVecStrPathSave 
=  m_vecStrPathSave.begin();
 
int  iNum  =   0 ;
 
 
for ( int  iCount  =   0 ; m_vecStrPathSave.size()  >  iCount; iCount ++ )
ExpandedBlockStart.gifContractedBlock.gif 
{
  m_vecStrPathSave.erase(m_vecStrPathSave.begin(), m_vecStrPathSave.end());
  
break;
 }

   
 
if (IDOK  ==  dlg.DoModal())
ExpandedBlockStart.gifContractedBlock.gif 
{
  POSITION mPos 
= dlg.GetStartPosition();
  CFileStatus status;
  itrVecStrSort 
= vecStrSort.begin();
  itrVecStrSortName 
= vecStrSortName.begin();
  CMainFrame 
* pMainFrame;
  CLogSwitchToolView 
*pView;
  pMainFrame 
= (CMainFrame *)AfxGetApp()->m_pMainWnd;
  pView 
= (CLogSwitchToolView*)pMainFrame->GetActiveView();
  pView
->m_bScrollSet = TRUE;

  
while(NULL != mPos)
ExpandedSubBlockStart.gifContractedSubBlock.gif  
{
   m_vecStrPathSave.push_back(dlg.GetNextPathName(mPos));  
   iNum
++;  
  }

  iNum
--;  
  CStdioFile sdfFile;
  CFileException en;
  CString strLine;

  
if(!sdfFile.Open(m_vecStrPathSave[0], CFile::modeRead, &en))
ExpandedSubBlockStart.gifContractedSubBlock.gif  
{
   en.ReportError();
   
return;
  }

  sdfFile.Close();

  
while(0 < iNum)
ExpandedSubBlockStart.gifContractedSubBlock.gif  
{
   itrVecStrSort 
= vecStrSort.begin();
   itrVecStrSortName 
= vecStrSortName.begin();
   OnPateDel(m_vecStrPathSave[iNum]);
   iNum
--;   
  }

  m_strUse 
= m_vecStrPathSave[0];
  m_iMain 
= 1;   
  pView
->m_iCol = 1;  
  m_bSearchDiff 
= FALSE;
  m_iSearchDiffCount
= 0;
  m_bSearchSame 
= FALSE;
  m_bExtract 
= FALSE;
  m_bFileOpen 
= TRUE;
  
  
for(int iCount = 0; pView->m_vecStrText.size() > iCount; iCount++)
ExpandedSubBlockStart.gifContractedSubBlock.gif  
{
   pView
->m_vecStrText.erase(pView->m_vecStrText.begin(), pView->m_vecStrText.end());
   
break;
  }


  
for(int iCountTwo = 0; pView->m_vecNum.size() > iCountTwo; iCountTwo++)
ExpandedSubBlockStart.gifContractedSubBlock.gif  
{
   pView
->m_vecNum.erase(pView->m_vecNum.begin(), pView->m_vecNum.end());
   
break;
  }
  
  m_compDlgBar.m_comboBoxFile.ShowWindow(SW_SHOW);  
  m_compDlgBar.m_comboBoxFile.ResetContent();
  m_compDlgBar.m_comboBoxFileTwo.ResetContent();
  
int iCountThree;
  iCountThree 
= 0;
  
  OnPateDel(m_vecStrPathSave[
0]);

  
for(int iCountFour = vecStrSortName.size() - 10 <= iCountFour; iCountFour--)
ExpandedSubBlockStart.gifContractedSubBlock.gif  
{
   m_compDlgBar.m_comboBoxFile.InsertString(iCountThree,vecStrSortName[iCountFour]);
   iCountThree
++;
  }

  m_compDlgBar.m_comboBoxFile.SetCurSel(
0);
  iCountThree 
= 0;
ExpandedSubBlockStart.gifContractedSubBlock.gif
/**//   
  for(int iCountFive = vecStrSortName.size() - 10 <= iCountFive; iCountFive--)
ExpandedSubBlockStart.gifContractedSubBlock.gif  
{
   m_compDlgBar.m_comboBoxFileTwo.InsertString(iCountThree,vecStrSortName[iCountFive]);
   iCountThree
++;
  }

  m_compDlgBar.m_comboBoxFileTwo.SetCurSel(
1);
  OnTextDel();
  Invalidate();
  g_intPoint 
= 1;
 }

 [一些小心得]

例: CFileDialog GetFile(TRUE,NULL,NULL,OFN_FILEMUSTEXIST,"Microsoft Excel(*.xls)|*.xls|All Files(*.*)|*.*||");

CFileDialog GetFile(打开文件对话框(TRUE),扩展名(NULL),文件名(NULL),风格-文件必须存在(OFN_FILEMUSTEXIST),查 看文件类型-EXCEL文件,所有文件(Microsoft Excel(*.xls)|*.xls|All Files(*.*)|*.*||);

风格的宏定义

#define OFN_READONLY                 0x00000001 #define OFN_OVERWRITEPROMPT          0x00000002 #define OFN_HIDEREADONLY             0x00000004 #define OFN_NOCHANGEDIR              0x00000008 #define OFN_SHOWHELP                 0x00000010 #define OFN_ENABLEHOOK               0x00000020 #define OFN_ENABLETEMPLATE           0x00000040 #define OFN_ENABLETEMPLATEHANDLE     0x00000080 #define OFN_NOVALIDATE               0x00000100 #define OFN_ALLOWMULTISELECT         0x00000200 #define OFN_EXTENSIONDIFFERENT       0x00000400 #define OFN_PATHMUSTEXIST            0x00000800 #define OFN_FILEMUSTEXIST            0x00001000 #define OFN_CREATEPROMPT             0x00002000 #define OFN_SHAREAWARE               0x00004000 #define OFN_NOREADONLYRETURN         0x00008000 #define OFN_NOTESTFILECREATE         0x00010000 #define OFN_NONETWORKBUTTON          0x00020000 #define OFN_NOLONGNAMES              0x00040000     // force no long names for 4.x modules #if(WINVER >= 0x0400) #define OFN_EXPLORER                 0x00080000     // new look commdlg #define OFN_NODEREFERENCELINKS       0x00100000 #define OFN_LONGNAMES                0x00200000     // force long names for 3.x modules #define OFN_ENABLEINCLUDENOTIFY      0x00400000     // send include message to callback #define OFN_ENABLESIZING             0x00800000 #endif /* WINVER >= 0x0400 */ #if (_WIN32_WINNT >= 0x0500) #define OFN_DONTADDTORECENT          0x02000000 #define OFN_FORCESHOWHIDDEN          0x10000000    // Show All files including System and hidden files #endif // (_WIN32_WINNT >= 0x0500)

这个就不解释了,应该都能看懂吧

需要注意的是,用了CFileDialog之后,会把程序的当前路径设置成选中文件的路径 所以,如果程序里有用到IO访问或者数据库访问之类的本地操作时,需要注意你的当前路径 用相对路径的话就不是原来你的程序路径了,切记!

CFileDialog文件选择对话框的使用

CFileDialog文件选择对话框的使用: 首先构造一个对象并提供相应的参数,构造函数原型如下: 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( ) 得到所选字体的其他属性,是否有删除线,是否有下划线,是否为粗体,是否为斜体。

 

附   dwFlags

Flags
A set of bit flags you can use to initialize the dialog box. When the dialog box returns, it sets these flags to indicate the user's input. This member can be a combination of the following flags.
OFN_ALLOWMULTISELECT
Specifies that the File Name list box allows multiple selections. If you also set the OFN_EXPLORER flag, the dialog box uses the Explorer-style user interface; otherwise, it uses the old-style user interface.
If the user selects more than one file, the lpstrFile buffer returns the path to the current directory followed by the file names of the selected files. The nFileOffset member is the offset, in bytes or characters, to the first file name, and the nFileExtension member is not used. For Explorer-style dialog boxes, the directory and file name strings are NULL separated, with an extra NULL character after the last file name. This format enables the Explorer-style dialog boxes to return long file names that include spaces. For old-style dialog boxes, the directory and file name strings are separated by spaces and the function uses short file names for file names with spaces. You can use the FindFirstFile function to convert between long and short file names.
If you specify a custom template for an old-style dialog box, the definition of the File Name list box must contain the LBS_EXTENDEDSEL value.
OFN_CREATEPROMPT
If the user specifies a file that does not exist, this flag causes the dialog box to prompt the user for permission to create the file. If the user chooses to create the file, the dialog box closes and the function returns the specified name; otherwise, the dialog box remains open. If you use this flag with the OFN_ALLOWMULTISELECT flag, the dialog box allows the user to specify only one nonexistent file.
OFN_DONTADDTORECENT
Windows 2000/XP: Prevents the system from adding a link to the selected file in the file system directory that contains the user's most recently used documents. To retrieve the location of this directory, call the SHGetSpecialFolderLocation function with the CSIDL_RECENT flag.
OFN_ENABLEHOOK
Enables the hook function specified in the lpfnHook member.
OFN_ENABLEINCLUDENOTIFY
Windows 2000/XP: Causes the dialog box to send CDN_INCLUDEITEM notification messages to your OFNHookProc hook procedure when the user opens a folder. The dialog box sends a notification for each item in the newly opened folder. These messages enable you to control which items the dialog box displays in the folder's item list.
OFN_ENABLESIZING
Windows 2000/XP, Windows 98/Me: Enables the Explorer-style dialog box to be resized using either the mouse or the keyboard. By default, the Explorer-style Open and Save As dialog boxes allow the dialog box to be resized regardless of whether this flag is set. This flag is necessary only if you provide a hook procedure or custom template. The old-style dialog box does not permit resizing.
OFN_ENABLETEMPLATE
Indicates that the lpTemplateName member is a pointer to the name of a dialog template resource in the module identified by the hInstance member. If the OFN_EXPLORER flag is set, the system uses the specified template to create a dialog box that is a child of the default Explorer-style dialog box. If the OFN_EXPLORER flag is not set, the system uses the template to create an old-style dialog box that replaces the default dialog box.
OFN_ENABLETEMPLATEHANDLE
Indicates that the hInstance member identifies a data block that contains a preloaded dialog box template. The system ignores lpTemplateName if this flag is specified. If the OFN_EXPLORER flag is set, the system uses the specified template to create a dialog box that is a child of the default Explorer-style dialog box. If the OFN_EXPLORER flag is not set, the system uses the template to create an old-style dialog box that replaces the default dialog box.
OFN_EXPLORER
Indicates that any customizations made to the Open or Save As dialog box use the new Explorer-style customization methods. For more information, see Explorer-Style Hook Procedures and Explorer-Style Custom Templates.
By default, the Open and Save As dialog boxes use the Explorer-style user interface regardless of whether this flag is set. This flag is necessary only if you provide a hook procedure or custom template, or set the OFN_ALLOWMULTISELECT flag.
If you want the old-style user interface, omit the OFN_EXPLORER flag and provide a replacement old-style template or hook procedure. If you want the old style but do not need a custom template or hook procedure, simply provide a hook procedure that always returns FALSE.
OFN_EXTENSIONDIFFERENT
Specifies that the user typed a file name extension that differs from the extension specified by lpstrDefExt. The function does not use this flag if lpstrDefExt is NULL.
OFN_FILEMUSTEXIST
Specifies that the user can type only names of existing files in the File Name entry field. If this flag is specified and the user enters an invalid name, the dialog box procedure displays a warning in a message box. If this flag is specified, the OFN_PATHMUSTEXIST flag is also used. This flag can be used in an Open dialog box. It cannot be used with a Save As dialog box.
OFN_FORCESHOWHIDDEN
Windows 2000/XP: Forces the showing of system and hidden files, thus overriding the user setting to show or not show hidden files. However, a file that is marked both system and hidden is not shown.
OFN_HIDEREADONLY
Hides the Read Only check box.
OFN_LONGNAMES
For old-style dialog boxes, this flag causes the dialog box to use long file names. If this flag is not specified, or if the OFN_ALLOWMULTISELECT flag is also set, old-style dialog boxes use short file names (8.3 format) for file names with spaces. Explorer-style dialog boxes ignore this flag and always display long file names.
OFN_NOCHANGEDIR
Restores the current directory to its original value if the user changed the directory while searching for files.
Windows NT 4.0/2000/XP: This flag is ineffective for GetOpenFileName.
OFN_NODEREFERENCELINKS
Directs the dialog box to return the path and file name of the selected shortcut (.LNK) file. If this value is not specified, the dialog box returns the path and file name of the file referenced by the shortcut.
OFN_NOLONGNAMES
For old-style dialog boxes, this flag causes the dialog box to use short file names (8.3 format). Explorer-style dialog boxes ignore this flag and always display long file names.
OFN_NONETWORKBUTTON
Hides and disables the Network button.
OFN_NOREADONLYRETURN
Specifies that the returned file does not have the Read Only check box selected and is not in a write-protected directory.
OFN_NOTESTFILECREATE
Specifies that the file is not created before the dialog box is closed. This flag should be specified if the application saves the file on a create-nonmodify network share. When an application specifies this flag, the library does not check for write protection, a full disk, an open drive door, or network protection. Applications using this flag must perform file operations carefully, because a file cannot be reopened once it is closed.
OFN_NOVALIDATE
Specifies that the common dialog boxes allow invalid characters in the returned file name. Typically, the calling application uses a hook procedure that checks the file name by using the FILEOKSTRING message. If the text box in the edit control is empty or contains nothing but spaces, the lists of files and directories are updated. If the text box in the edit control contains anything else, nFileOffset and nFileExtension are set to values generated by parsing the text. No default extension is added to the text, nor is text copied to the buffer specified by lpstrFileTitle. If the value specified by nFileOffset is less than zero, the file name is invalid. Otherwise, the file name is valid, and nFileExtension and nFileOffset can be used as if the OFN_NOVALIDATE flag had not been specified.
OFN_OVERWRITEPROMPT
Causes the Save As dialog box to generate a message box if the selected file already exists. The user must confirm whether to overwrite the file.
OFN_PATHMUSTEXIST
Specifies that the user can type only valid paths and file names. If this flag is used and the user types an invalid path and file name in the File Name entry field, the dialog box function displays a warning in a message box.
OFN_READONLY
Causes the Read Only check box to be selected initially when the dialog box is created. This flag indicates the state of the Read Only check box when the dialog box is closed.
OFN_SHAREAWARE
Specifies that if a call to the OpenFile function fails because of a network sharing violation, the error is ignored and the dialog box returns the selected file name. If this flag is not set, the dialog box notifies your hook procedure when a network sharing violation occurs for the file name specified by the user. If you set the OFN_EXPLORER flag, the dialog box sends the CDN_SHAREVIOLATION message to the hook procedure. If you do not set OFN_EXPLORER, the dialog box sends the SHAREVISTRING registered message to the hook procedure.
OFN_SHOWHELP
Causes the dialog box to display the Help button. The hwndOwner member must specify the window to receive the HELPMSGSTRING registered messages that the dialog box sends when the user clicks the Help button. An Explorer-style dialog box sends a CDN_HELP notification message to your hook procedure when the user clicks the Help button.
OFN_USESHELLITEM
Do not use.

转载于:https://www.cnblogs.com/alonecat06/archive/2009/05/05/1450280.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值