CFileDialog problem
Martin Lacasse -- lacassem@berclain.com Sunday, April 21, 1996 Hello, I'm using VC++ 2.1 on Windows NT. What I'd like to do is to display a custom CFileDialog. When the user clicks on a file name, I'd like to display some information (FROM THE SELECTED FILE) at the bottom of the dialog. To do this, I must have the complete path and filename to "fopen" it. The problem is, when I'm overriding the CFileDialog::OnLBSelChangedNotify member, I can't call the CFileDialog::GetFileName member. The CFileDialog::m_ofn attribute (OPENFILENAME structure) has not been updated with the newest selected file information. Can you help me ??? Thanks in advance. ---------------------------------------------------------------------- Martin Lacasse, analyst-prgm. Berclain Group, Inc. e-mail: lacassem@berclain.com Development Group Tel: (418) 656-0055 ext 1522 979, de Bourgogne, suite 220 Fax: (418) 656-6317 Sainte-Foy (QC) Canada, G1W 2L4
Kanir Pandya -- kpandya@harbinger.net Wednesday, April 24, 1996 [Mini-digest: 2 responses] What you need to do here is as follows: //First get the current index in the file list box. int index = m_fileList.GetCurSel(); if ( index != LB_ERR ) { CString filename; CString dirname; //get the filename. m_fileList.GetText(index, filename); //now get the dir name //Get current selected item in the list box and concatenate all // the items till current item to form the full path. CListBox *pLB = (CListBox*)GetDlgItem(IDC_DIRLIST); int ind = pLB->GetCurSel(); CString str; pLB->GetText(0, strPath); for( int i=1; i <= ind; i++) { pLB->GetText(i, str); strPath += str + "\\"; } CString m_Fullname; // At last you get the filename. m_Fullname = strPath + filename; I hope this helps. -----From: "rick cameron"Salut, Martin! Windows 95 (and, presumably, NT 4.0) supports a nice way of doing this: look up CDM_GETFILEPATH. However, it looks to me like, under NT 3.x, you'll have to get the text of various controls in the dialog and build the pathname yourself. One shortcut: it may be true that the dialog sets the current directory, so perhaps all you need to do is to get the text of the 'File Name' edit control. As you may know, you can retrieve the text as follows: CString filename; GetDlgItem (edt1)->GetWindowText (filename); - rick
yogesh -- yogesh@cytel.com Tuesday, March 11, 1997 >> >> What I am really looking for is this. The user enters some data in the >> CMyFileDialog edit controls and hits OK. As soon as the user hits OK, I >> want to validate the path and file name which he has selected. If the >> wrong file and path name are selected, I want to pop up an appropriate >> message box and give the user another chance to enter the file name and >> select the path. I use DoDataExchange function to do validation of dialog items. The following code may solve your problem. /////////////////////////////////////////////////////////////////// void CMySaveAsDlg::DoDataExchange(CDataExchange* pDX) { CFileDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMySaveAsDlg) DDX_Text(pDX, IDC_FILENAME, m_filename); //}}AFX_DATA_MAP if(pDX->m_bSaveAndValidate) // pDX->m_bSaveAndValidate becomes TRUE DoDataValidation(pDX); // when user clicks OK } /////////////////////////////////////////////////////////////////// void CMySaveAsDlg::DoDataValidation(CDataExchange* pDX) { pDX->PrepareCtrl(IDC_FILENAME); // make filename item as current if(m_filename.IsEmpty()) { AfxMessageBox(IDS_FNAMEREQ); pDX->Fail(); // cursor will be back on filename } } ////////////////////////////////////////////////////////////////////// void CMySaveAsDlg::OnOK() { CFileDialog::OnOK(); } -------------------------------------------------- Yogesh Gajjar ? yogesh@cytel.com : www.cytel.com
John Bundgaard -- piano_boxer@post1.com Sunday, March 16, 1997 [Mini-digest: 2 responses] A simpler method: void CMySaveAsDlg::OnOK() { UpdateData(FALSE) // This will get the data from the edit control. if(m_filename.IsEmpty()) { AfxMessageBox(IDS_FNAMEREQ); return; } EndDialog(ID_OK); } ---------- > From: yogesh> To: m_dalal@ECE.concordia.CA > Cc: mfc-l@netcom.com > Subject: Re: CFileDialog Problem > Date: 11. marts 1997 22:18 > > >> > >> What I am really looking for is this. The user enters some data in the > >> CMyFileDialog edit controls and hits OK. As soon as the user hits OK, I > >> want to validate the path and file name which he has selected. If the > >> wrong file and path name are selected, I want to pop up an appropriate > >> message box and give the user another chance to enter the file name and > >> select the path. > > > I use DoDataExchange function to do validation of dialog items. The following > code may solve your problem. > > /////////////////////////////////////////////////////////////////// > void CMySaveAsDlg::DoDataExchange(CDataExchange* pDX) > { > CFileDialog::DoDataExchange(pDX); > > //{{AFX_DATA_MAP(CMySaveAsDlg) > DDX_Text(pDX, IDC_FILENAME, m_filename); > //}}AFX_DATA_MAP > > if(pDX->m_bSaveAndValidate) // pDX->m_bSaveAndValidate becomes TRUE > DoDataValidation(pDX); // when user clicks OK > } > > /////////////////////////////////////////////////////////////////// > void CMySaveAsDlg::DoDataValidation(CDataExchange* pDX) > { > pDX->PrepareCtrl(IDC_FILENAME); // make filename item as current > if(m_filename.IsEmpty()) > { > AfxMessageBox(IDS_FNAMEREQ); > pDX->Fail(); // cursor will be back on filename > } > } > > > ////////////////////////////////////////////////////////////////////// > void CMySaveAsDlg::OnOK() > { > CFileDialog::OnOK(); > } -----From: Hieu Nguyen Overwrite virtual method OnFileNameOK() in your CFileDialog's derived class. Hope it help -Hieu
Become an MFC-L member | Вернуться в корень Архива |