请升级到MicrosoftEdge以使用最新的功能、安全更新和技术支持。
封装用于文件打开操作或文件保存操作的常见对话框。
注意
使用CFileDialog时,WindowsVista或更高版本中的控件ID系统与早期版本的Windows不同。必须先更新对代码中的CFileDialog控件的所有引用,然后才能从早期版本的Windows移植项目。
WindowsVista或更高版本不支持某些CFileDialog方法。请查看各个方法主题,了解方法是否受支持。此外,WindowsVista或更高版本不支持下面这些继承的函数:
CFileDialog包括多个受保护的成员,这些成员可用于对共享冲突、文件名验证和列表框更改通知进行自定义处理。这些受保护的成员是大多数应用程序不必使用的回调函数,因为会自动执行默认处理。不需要这些函数的消息映射条目,因为它们是标准虚拟函数。
若要让用户选择多个文件,请在调用DoModal之前设置OFN_ALLOWMULTISELECT标志。必须提供自己的文件名缓冲区才能容纳返回的包含多个文件名的列表。为此,请在构造CFileDialog之后(但在调用DoModal之前)将m_ofn.lpstrFile替换为已分配的缓冲区的指针。
此外,必须使用m_ofn.lpstrFile所指向的缓冲区中的字符数来设置m_ofn.nMaxFile。如果将要选择的最大文件数设置为n,则所需的缓冲区大小为n*(_MAX_PATH+1)+1。缓冲区中返回的第一项是所选文件所在的文件夹的路径。对于WindowsVista或更高版本的样式的对话框,目录和文件名字符串会以null结尾,在最后一个文件名后面会加上额外的null字符。此格式使资源管理器样式的对话框能够返回包含空格的长文件名。对于旧样式对话框,目录和文件名字符串用空格分隔,对于带空格的文件名,此函数使用短文件名。
以下示例演示如何使用缓冲区检索并列出多个文件名。
如果从CFileDialog派生新类,则可使用消息映射来处理任何消息。若要扩展默认消息处理,请从CFileDialog派生一个类,将消息映射添加到新类,并为新消息提供成员函数。无需提供挂钩函数来自定义对话框。
若要自定义对话框,请从CFileDialog派生类,提供自定义对话框模板,并添加消息映射以处理来自扩展控件的通知消息。将任何未处理的消息传递给基类。无需自定义挂钩函数。
使用WindowsVista或更高版本样式的CFileDialog时,不能使用消息映射和对话框模板。必须改用COM接口来实现类似的功能。
CFileDialog
标头:afxdlgs.h
向对话框添加复选按钮。
HRESULTAddCheckButton(DWORDdwIDCtl,constCString&strLabel,BOOLbChecked);参数dwIDCtl要添加的复选按钮的ID。
strLabel复选按钮名称。
bChecked一个布尔值,指示复选按钮的当前状态。如果选中,则为TRUE;否则为FALSE
向对话框添加组合框。
HRESULTAddComboBox(DWORDdwIDCtl);参数dwIDCtl要添加的组合框的ID。
将项添加到对话框中的容器控件。
HRESULTAddControlItem(DWORDdwIDCtl,DWORDdwIDItem,constCString&strLabel);参数dwIDCtl要向其添加项的容器控件的ID。
dwIDItem项的ID。
strLabel项的文本。
向对话框添加编辑框。
HRESULTAddEditBox(DWORDdwIDCtl,constCString&strText);参数dwIDCtl要添加的编辑框的ID。
strText编辑框名称。
向对话框添加菜单。
HRESULTAddMenu(DWORDdwIDCtl,constCString&strLabel);参数dwIDCtl要添加的菜单的ID。
strLabel菜单名称。
将文件夹添加到可供用户打开或保存项的位置列表中。
voidAddPlace(LPCWSTRlpszFolder,FDAPfdap=FDAP_TOP)throw();voidAddPlace(IShellItem*psi,FDAPfdap=FDAP_TOP)throw();参数lpszFolder要提供给用户的文件夹的路径。这只能是文件夹。
fdap指定文件夹在列表中的放置位置。
psi指向IShellItem(表示要提供给用户的文件夹)的指针。这只能是文件夹。
向对话框添加按钮。
HRESULTAddPushButton(DWORDdwIDCtl,constCString&strLabel);参数dwIDCtl要添加的按钮的ID。
strLabel按钮名称。
将选项按钮(也称单选按钮)组添加到对话框。
HRESULTAddRadioButtonList(DWORDdwIDCtl);参数dwIDCtl要添加的选项按钮组的ID。
向对话框添加分隔符。
HRESULTAddSeparator(DWORDdwIDCtl);参数dwIDCtl要添加的分隔符的ID。
向对话框添加文本。
HRESULTAddText(DWORDdwIDCtl,constCString&strText);参数dwIDCtl要添加的文本的ID。
strText文本名称。
调用此函数可构造标准Windows文件对话框。
explicitCFileDialog(BOOLbOpenFileDialog,LPCTSTRlpszDefExt=NULL,LPCTSTRlpszFileName=NULL,DWORDdwFlags=OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,LPCTSTRlpszFilter=NULL,CWnd*pParentWnd=NULL,DWORDdwSize=0,BOOLbVistaStyle=TRUE);参数bOpenFileDialog[in]参数,指定要创建的对话框类型。将其设置为TRUE可构造“文件>打开”对话框。将其设置为FALSE可构造“文件>另存为”对话框。
lpszDefExt[in]默认的文件扩展名。如果用户未在“文件名”框中包括已知扩展名(在用户的计算机上存在关联的扩展名),会将通过lpszDefExt指定的扩展名自动追加到文件名中。如果此参数为NULL,则不会追加任何扩展名。
lpszFileName[in]“文件名”框中显示的初始文件名。如果为NULL,则不会显示初始文件名。
lpszFilter[in]一系列字符串对,用于指定可应用于文件的筛选器。如果指定文件筛选器,则只有与筛选条件匹配的文件才会显示在“文件”列表中。请参阅“注解”部分,详细了解如何使用文件筛选器。
pParentWnd[in]一个指针,指向文件对话框的父窗口或所有者窗口。
dwSize[in]OPENFILENAME结构的大小。此值取决于操作系统版本。MFC使用了此参数来确定要创建的相应对话框类型。默认大小为0表示MFC代码将根据运行程序的操作系统版本确定要使用的正确的对话框大小。
bVistaStyle[in]注意此参数在VisualStudio2008及更高版本中可用,因此,仅当你在WindowsVista或更高版本中运行时,才使用新样式对话框。
指定文件对话框样式的参数。将其设置为TRUE可使用新Vista样式文件对话框。否则将使用旧样式的对话框。请参阅“注解”部分,详细了解如何在Vista下运行。
将构造“文件>打开”或“文件>另存为”对话框,具体取决于bOpenFileDialog的值。
使用lpszDefExt指定默认扩展名可能不会产生预期的行为,因为很难预测哪些扩展名在用户的计算机上存在文件关联。如果需要对追加默认扩展名的操作进行更多控制,则可从CFileDialog派生你自己的类,并重写CFileDialog::OnFileNameOK方法以执行你自己的扩展名处理操作。
#defineMAX_CFileDialog_FILE_COUNT99#defineFILE_LIST_BUFFER_SIZE((MAX_CFileDialog_FILE_COUNT*(MAX_PATH+1))+1)CStringfileName;wchar_t*p=fileName.GetBuffer(FILE_LIST_BUFFER_SIZE);CFileDialogdlgFile(TRUE);OPENFILENAME&ofn=dlgFile.GetOFN();ofn.Flags|=OFN_ALLOWMULTISELECT;ofn.lpstrFile=p;ofn.nMaxFile=FILE_LIST_BUFFER_SIZE;dlgFile.DoModal();fileName.ReleaseBuffer();wchar_t*pBufEnd=p+FILE_LIST_BUFFER_SIZE-2;wchar_t*start=p;while((p
例如,MicrosoftExcel允许用户打开扩展名为.xlc(图表)或.xls(工作表)等的文件。Excel的筛选器可以编写为:
staticTCHARBASED_CODEszFilter[]=_T("ChartFiles(*.xlc)|*.xlc|")_T("WorksheetFiles(*.xls)|*.xls|DataFiles(*.xlc;*.xls)|")_T("*.xlc;*.xls|AllFiles(*.*)|*.*||");但是,如果打算使用此字符串直接更新OPENFILENAME结构,则应使用null字符'\0'来分隔字符串,而不应使用垂直条('|')。
仅当在WindowsVista或更高版本中运行时,bVistaStyle参数才适用。在早期版本的Windows中,会忽略此参数。如果将bVistaStyle设置为TRUE,则使用VisualStudio2008或更高版本编译程序时,将使用新的Vista样式文件对话框。否则,将使用以前的MFC样式文件对话框。
基于bVistaStyle的对话框不支持对话框模板
调用此函数可显示Windows通用文件对话框,并允许用户浏览文件和目录并输入文件名。
IDOK和IDCANCEL是常量,指示用户选择的是“确定”还是“取消”按钮。
如果要通过设置m_ofn结构的成员来初始化各种文件对话框选项,则应在调用DoModal之前但在构造对话框对象之后执行此操作。
例如,如果要允许用户选择多个文件,请在调用DoModal之前设置OFN_ALLOWMULTISELECT标志,如本主题中的代码示例所示。
当用户单击对话框的“确定”或“取消”按钮或者从对话框的控制菜单中选择“关闭”选项时,控制将返回到应用程序。然后,你可以调用其他成员函数来检索用户在对话框中输入的设置或信息。
DoModal是从类CDialog重写的虚拟函数。
voidCMyClass::OnFileOpen(){//szFiltersisatextstringthatincludestwofilenamefilters://"*.my"for"MyTypeFiles"and"*.*'for"AllFiles."TCHARszFilters[]=_T("MyTypeFiles(*.my)|*.my|AllFiles(*.*)|*.*||");//CreateanOpendialog;thedefaultfilenameextensionis".my".CFileDialogfileDlg(TRUE,_T("my"),_T("*.my"),OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,szFilters);//Displaythefiledialog.WhenuserclicksOK,fileDlg.DoModal()//returnsIDOK.if(fileDlg.DoModal()==IDOK){CStringpathName=fileDlg.GetPathName();//Implementopeningandreadingfileinhere.//Changethewindow'stitletotheopenedfile'stitle.CStringfileName=fileDlg.GetFileTitle();SetWindowText(fileName);}}CFileDialog::EnableOpenDropDown在对话框中的“打开”或“保存”按钮上启用下拉列表。
HRESULTEnableOpenDropDown(DWORDdwIDCtl);参数dwIDCtl下拉列表的ID。
停止将元素添加到对话框中的视觉对象组。
HRESULTEndVisualGroup();返回值如果成功,则返回S_OK;否则返回错误值。
检索对话框中的复选按钮(复选框)的当前状态。
HRESULTGetCheckButtonState(DWORDdwIDCtl,BOOL&bChecked);参数dwIDCtl复选框的ID。
bChecked复选框的状态。TRUE指示已选中;FALSE指示未选中。
检索在对话框中找到的容器控件中的项的当前状态。
HRESULTGetControlItemState(DWORDdwIDCtl,DWORDdwIDItem,CDCONTROLSTATEF&dwState);参数dwIDCtl容器控件的ID。
dwState对从CDCONTROLSTATE枚举(指示控件的当前状态)接收一个或多个值的变量的引用。
检索给定控件的当前可见性和启用状态。
HRESULTGetControlState(DWORDdwIDCtl,CDCONTROLSTATEF&dwState);参数dwIDCtl控件的ID。
检索编辑框控件中的当前文本。
HRESULTGetEditBoxText(DWORDdwIDCtl,CString&strText);参数dwIDCtl编辑框的ID。
strText文本值。
调用此函数可检索输入到对话框中的文件扩展名。
CStringGetFileExt()const;返回值文件扩展名。
例如,如果输入的文件的名称为DATA.TXT,GetFileExt会返回“TXT”。
调用此函数可检索输入到对话框中的文件名。
CStringGetFileName()const;返回值文件的名称。
文件名包括前缀和扩展名。例如,对于文件C:\FILES\TEXT.DAT,GetFileName会返回“TEXT.DAT”。
调用此函数可检索输入到对话框中的文件标题。
CStringGetFileTitle()const;返回值文件的标题。
文件的标题仅包含其前缀,没有路径或扩展名。例如,对于文件C:\FILES\TEXT.DAT,GetFileTitle会返回“TEXT”。
调用此成员函数可为资源管理器样式的“打开”或“另存为”常见对话框检索当前处于打开状态的文件夹或目录的路径。
必须已使用OFN_EXPLORER样式创建对话框;否则,该方法会失败并出现断言。
只有在显示对话框时,才能调用此方法。关闭对话框后,此函数将不再有效,该方法会失败并出现断言。
IFileDialogCustomize*GetIFileDialogCustomize();返回值指向CFileDialog的内部COM对象的指针。你有责任正确地释放此指针。
仅在WindowsVista或更高版本中使用此函数,其对象已将bVistaStyle设置为TRUE。如果在bVistaStyle为FALSE时使用此函数,它会在发布模式下返回NULL,在调试模式下引发断言。
此示例检索内部COM对象。若要运行此代码示例,必须在WindowsVista或更高版本中对其进行编译。
//GettheinterfacepointerIFileDialogCustomize*customDlgPtr=m_myFileDialogPtr->GetIFileDialogCustomize();//Makesurethatitisnotnullif(customDlgPtr!=NULL){////Performanyinterfacefunctionalityhere////ReleasethepointercustomDlgPtr->Release();}CFileDialog::GetIFileOpenDialog检索指向给定CFileDialog的内部COM对象的指针。
IFileOpenDialog*GetIFileOpenDialog();返回值指向CFileDialog的内部COM对象的指针。你有责任正确地释放此指针。
仅在WindowsVista或更高版本中使用此函数,其对象已将bVistaStyle设置为TRUE。如果CFileDialog不是“打开”对话框或者bVistaStyle已设置为FALSE,此函数会返回NULL。在这最后一种情况下,该函数仅在发布模式下返回NULL-在调试模式下,它会引发断言。
此示例检索内部COM对象。若要运行此代码,必须在WindowsVista或更高版本中对其进行编译。
//GettheinterfacepointerIFileOpenDialog*openDlgPtr=m_myFileDialogPtr->GetIFileOpenDialog();//Makesurethatitisnotnullif(openDlgPtr!=NULL){////Performanyinterfacefunctionalityhere////ReleasethepointeropenDlgPtr->Release();}CFileDialog::GetIFileSaveDialog检索指向给定CFileDialog的内部COM对象的指针。
IFileSaveDialog*GetIFileSaveDialog();返回值指向CFileDialog的内部COM对象的指针。你有责任正确地释放此指针。
仅在WindowsVista或更高版本中使用此函数,其对象已将bVistaStyle设置为TRUE。如果CFileDialog不是“保存”对话框或者bVistaStyle已设置为FALSE,此函数会返回NULL。在这最后一种情况下,该函数仅在发布模式下返回NULL-在调试模式下,它会引发断言。
//GettheinterfacepointerIFileSaveDialog*saveDlgPtr=m_myFileDialogPtr->GetIFileSaveDialog();//Makesurethatitisnotnullif(saveDlgPtr!=NULL){////Performanyinterfacefunctionalityhere////ReleasethepointersaveDlgPtr->Release();}CFileDialog::GetNextPathName调用此函数可从对话框中选择的组检索下一个文件名。
CStringGetNextPathName(POSITION&pos)const;参数pos一个引用,引用由先前的GetNextPathName或GetStartPosition函数调用返回的POSITION值。如果已到达列表末尾,则为NULL。
文件的完整路径。
文件名的路径包括文件的标题以及整个目录路径。例如,对于文件C:\FILES\TEXT.DAT,GetNextPathName会返回“C:\FILES\TEXT.DAT”。如果通过调用GetStartPosition建立初始位置,则可以在正向迭代循环中使用GetNextPathName。
如果所选内容仅包含一个文件,则返回该文件名。
检索关联的OPENFILENAME结构。
使用此函数的第二个版本初始化“文件>打开”或“文件>另存为”对话框的外观,这发生在构造该对话框之后,使用DoModal成员函数显示该对话框之前。例如,可以将m_ofn的lpstrTitle成员设置为你希望对话框具有的标题。
调用此函数可检索输入到对话框中的文件完整路径。
CStringGetPathName()const;返回值文件的完整路径。
文件名的路径包括文件的标题以及整个目录路径。例如,对于文件C:\FILES\TEXT.DAT,GetPathName会返回“C:\FILES\TEXT.DAT”。
调用此函数可确定是否已在Windows的标准“文件>打开”和“文件>另存为”对话框中选中“只读”复选框。
BOOLGetReadOnlyPref()const;返回值如果选中对话框中的“只读”复选框,则为非零值;否则为0。
可以通过在CFileDialog构造函数中设置OFN_HIDEREADONLY样式来隐藏“只读”复选框。
检索用户在对话框中所做的选择。
IShellItem*GetResult()throw();返回值一个指向IShellItem(表示用户的选择)的指针。
检索用户在某个允许多项选择的对话框中所做的选择。
IShellItemArray*GetResults()throw();返回值一个指向IShellItemArray的指针,可通过它访问对话框中选定的项。
从对话框中的指定容器控件检索特定项。
HRESULTGetSelectedControlItem(DWORDdwIDCtl,DWORD&dwIDItem);参数dwIDCtl容器控件的ID。
dwIDItem用户在控件中选择的项的ID。
调用此成员函数可检索列表中第一个文件路径名的位置,前提是m_ofn.Flags设置了OFN_ALLOWMULTISELECT标志。
POSITIONGetStartPosition()const;返回值可用于迭代的POSITION值;如果列表为空,则为NULL。
调用此成员函数可隐藏资源管理器样式的“打开”或“另存为”常见对话框中的指定控件。
voidHideControl(intnID);参数nID要隐藏的控件的ID。
必须已使用OFN_EXPLORER样式创建对话框;否则,该函数会失败并出现断言。
确定当前对话框是否处于文件夹选取器模式。
BOOLIsPickFoldersMode()const;返回值如果对话框处于文件夹选取器模式,则为TRUE;否则为FALSE。
m_ofn是类型为OPENFILENAME的结构。此结构中的数据表示CFileDialog的当前状态。
WindowsVista或更高版本样式的文件对话框不支持CFileDialog的某些成员和标志。因此,这些项将无效。
下面是WindowsVista或更高版本不支持的成员的列表:
以下标志不受支持,因此在你使用WindowsVista或更高版本样式的CFileDialog时无效:
将某个控件放在对话框中,使其突出显示(相对于其他控件而言)。
HRESULTMakeProminent(DWORDdwIDCtl);参数dwIDCtl控件的ID。
在单击按钮时调用。
virtualvoidOnButtonClicked(DWORDdwIDCtl);参数dwIDCtl按钮的ID。
在选中或取消选中复选框时调用。
virtualvoidOnCheckButtonToggled(DWORDdwIDCtl,BOOLbChecked);参数dwIDCtl复选框的ID。
bChecked已选中或已取消选中。
在激活控件时调用。
virtualvoidOnControlActivating(DWORDdwIDCtl);参数dwIDCtl控件的ID。
如果要处理WM_NOTIFYCDN_SELCHANGE消息,请重写此方法。
virtualvoidOnFileNameChange();备注当用户在“打开”或“另存为”对话框的文件列表中选择新文件或文件夹时,系统会发送CDN_SELCHANGE消息。如果要执行响应此消息的任何操作,请重写此方法。
仅当你想要提供已输入到通用文件对话框中的文件名的自定义验证时,才重写此函数。
virtualBOOLOnFileNameOK();返回值如果文件名不是有效的文件名,则为1;否则为0。
使用此函数,你可以出于任何特定于应用程序的原因拒绝某个文件名。通常无需使用此函数,因为框架会提供对文件名的默认验证,并会在输入无效文件名时显示消息框。
如果返回1,该对话框会保持显示状态,以便用户输入另一个文件名。如果返回值为0,则对话框过程会关闭该对话框。其他非零返回值目前为保留值,不应使用。
重写此函数以处理WM_NOTIFYCDN_FOLDERCHANGE消息。
virtualvoidOnFolderChange();备注在“打开”或“另存为”对话框中打开新文件夹时,会发送通知消息。
重写此函数以处理WM_NOTIFYCDN_INITDONE消息。
virtualvoidOnInitDone();注解当系统在“打开”或“另存为”对话框中排列好控件,为子对话框的控件腾出空间时,系统会发送此通知消息。
在选择容器项时调用。
virtualvoidOnItemSelected(DWORDdwIDCtl,DWORDdwIDItem);参数dwIDCtl容器控件的ID。
每当列表框中的当前选定内容即将更改时,会调用此函数。
virtualvoidOnLBSelChangedNotify(UINTnIDBox,UINTiCurSel,UINTnCode);参数nIDBox进行选择时所在的列表框或组合框的ID。
iCurSel当前选择内容的索引。
nCode控件通知代码。此参数必须具有以下值之一:
重写此函数可在列表框中提供对选项内容更改的自定义处理。例如,可以使用此函数显示用户选择的每个文件的访问权限或上次修改日期。
重写此函数可提供对共享冲突的自定义处理。
virtualUINTOnShareViolation(LPCTSTRlpszPathName);参数lpszPathName发生共享冲突的文件的路径。
以下值之一:
通常不需要使用此函数,因为框架提供对共享冲突的默认检查,并在发生共享冲突时显示消息框。
如果要禁用共享冲突检查,请使用按位与运算符将标志OFN_SHAREAWARE与m_ofn.Flags配合使用。
重写此函数以处理WM_NOTIFYCDN_TYPECHANGE消息。
virtualvoidOnTypeChange();备注当用户从“打开”或“另存为”对话框中的文件类型列表中选择一个新文件类型时,系统会发送通知消息。
将项从对话框的容器控件中删除。
HRESULTRemoveControlItem(DWORDdwIDCtl,DWORDdwIDItem);参数dwIDCtl要从中删除项的容器控件的ID。
设置对话框中的复选按钮(复选框)的当前状态。
HRESULTSetCheckButtonState(DWORDdwIDCtl,BOOLbChecked);参数dwIDCtl复选框的ID。
设置在对话框中找到的容器控件中的项的当前状态。
HRESULTSetControlItemState(DWORDdwIDCtl,DWORDdwIDItem,CDCONTROLSTATEFdwState);参数dwIDCtl容器控件的ID。
dwStateCDCONTROLSTATE枚举(指示控件的新状态)中的一个或多个值。
设置控件项的文本。例如,单选按钮或菜单中项附带的文本。
HRESULTSetControlItemText(DWORDdwIDCtl,DWORDdwIDItem,constCString&strLabel);参数dwIDCtl容器控件的ID。
设置与控件关联的文本,例如按钮文本或编辑框标签。
HRESULTSetControlLabel(DWORDdwIDCtl,constCString&strLabel);参数dwIDCtl控件的ID。
strLabel控件名称。
设置给定控件的当前可见性和启用状态。
HRESULTSetControlState(DWORDdwIDCtl,CDCONTROLSTATEFdwState);参数dwIDCtl控件的ID。
dwStateCDCONTROLSTATE枚举(指示控件的当前状态)中的一个或多个值。
调用此方法可在资源管理器样式的“打开”或“另存为”对话框中设置指定控件的文本。
voidSetControlText(intnID,LPCSTRlpsz);voidSetControlText(intnID,constwchar_t*lpsz);参数nID[in]要设置其文本的控件的ID。
lpsz[in]一个指向字符串的指针,字符串中包含要为控件设置的文本。
此函数的两个版本对于使用Unicode的应用程序都有效。但是,只有LPCSTR类型的版本对使用ANSI的应用程序有效。
若要使用此方法,必须创建OFN_EXPLORER样式的对话框。否则,函数会失败并显示断言。
调用此函数可为资源管理器样式的“打开”或“另存为”常见对话框设置默认文件扩展名。
voidSetDefExt(LPCSTRlpsz);参数lpsz一个指向字符串的指针,字符串中包含用于对话框对象的默认扩展。此字符串不得包含句点(.)。
设置编辑框控件中的当前文本。
HRESULTSetEditBoxText(DWORDdwIDCtl,constCString&strText);参数dwIDCtl编辑框的ID。
提供一个属性存储,它定义将默认值用于正在保存的项。
在对话框中找到的选项按钮组或组合框中设置特定项的选定状态。
HRESULTSetSelectedControlItem(DWORDdwIDCtl,DWORDdwIDItem);参数dwIDCtl容器控件的ID。
voidSetTemplate(UINTnWin3ID,UINTnWin4ID);voidSetTemplate(LPCTSTRlpWin3ID,LPCTSTRlpWin4ID);参数nWin3ID[in]包含非资源管理器CFileDialog对象的模板资源的ID号。此模板仅在WindowsNT3.51上使用,或在不存在OFN_EXPLORER样式时使用。
nWin4ID[in]包含资源管理器CFileDialog对象的模板资源的ID号。此模板仅在WindowsNT4.0及更高版本和Windows95及更高版本上使用,或在OFN_EXPLORER样式存在时使用。
lpWin3ID[in]包含非资源管理器CFileDialog对象的模板资源的名称。此模板仅在WindowsNT3.51上使用,或在不存在OFN_EXPLORER样式时使用。
lpWin4ID[in]包含资源管理器CFileDialog对象的模板资源的名称。此模板仅在WindowsNT4.0及更高版本和Windows95及更高版本上使用,或在OFN_EXPLORER样式存在时使用。
系统将仅使用指定模板之一。系统根据存在的OFN_EXPLORER样式和运行应用程序的操作系统来确定要使用的模板。通过同时指定非资源管理器样式模板和资源管理器样式模板,可以轻松支持WindowsNT3.51、WindowsNT4.0及更高版本和Windows95及更高版本。
HRESULTStartVisualGroup(DWORDdwIDCtl,constCString&strLabel);参数dwIDCtl视觉对象组的ID。
strLabel组名称。
本示例先更新CFileDialog,然后再显示它。在更新m_ofn成员变量之前,我们需要将其同步到对话框的当前状态。