Microsoft KB Archive/131225

{|
 * width="100%"|

PRB: CFileDialog::DoModal Does Not Display FileOpen Dialog

 * }

Q131225

-

The information in this article applies to:


 * Microsoft Win32 Software Development Kit (SDK) on the following platform:
 * Microsoft Windows 95

-

SYMPTOMS
Calling CFileDialog::DoModal returns without displaying the FileOpen common dialog.

CAUSE
The CFileDialog class will automatically use the new Explorer-style FileOpen common dialog under Windows 95. This can break existing code which customizes these dialogs with custom templates, because the mechanism has changed in Windows 95.

NOTE: This does not apply to Windows NT 3.51, as this version of Windows NT will not display the new Explorer-style dialog.

RESOLUTION
An application that depends on the old behavior of customizing the File Open common dialogs will need to reset the OFN_EXPLORER bit in the Flags member of the OPENFILENAME structure before calling CFileDialog::DoModal.

MORE INFORMATION
The DIRPKR sample in particular, exhibits the symptoms described above, and will need to be modified to display the dialog box correctly in Windows 95. It works as is under Windows NT 3.51.

Sample Code
   CMyFileDlg  cfdlg(FALSE, NULL, NULL, OFN_SHOWHELP | OFN_HIDEREADONLY |                      OFN_OVERWRITEPROMPT | OFN_ENABLETEMPLATE,                      NULL, m_pMainWnd);

cfdlg.m_ofn.hInstance     = AfxGetInstanceHandle; cfdlg.m_ofn.lpTemplateName = MAKEINTRESOURCE(FILEOPENORD); cfdlg.m_ofn.Flags        &= ~OFN_EXPLORER;

if (IDOK==cfdlg.DoModal) {     :      :    } NOTE: For versions of Visual C++ 2.x, the OFN_EXPLORER flag has not been defined. You can use this code instead:

   cfdlg.m_ofn.Flags &= ~(0x00080000);