File name in CFileDialog
Bobi Gilburd -- bobi@netvision.net.il Thursday, May 02, 1996 I am working on WFW 3.1, VC 1.52 (I know it's old, but our project is still 16 bits...) In our application there is a file browse dialog. I want to add a preview button for the file-open common dialog, and when it pressed i want to preview the currently selected file. I had no problems with adding all the required controls, but my problem is to get the name of the currently selected file in the dialog. I saw that MFC provides 'OnLBSelChangedNotify' handler, but still I haven't menaged to find the name of the currently selected file. Thanx in advance, Bobi Gilburd, Ramat-Gan, Israel bobi@netvision.net.il
Rick Esterling -- rick@eco.twg.com Sunday, May 05, 1996 [Mini-digest: 3 responses] On 2 May 96 at 22:28, Bobi Gilburd wrote: > I am working on WFW 3.1, VC 1.52 Thanks. [Moderator's note: Sheesh! What is this thing you folks have for thanking people for info that I require in any question?] > In our application there is a file browse dialog. I want to add a > preview button for the file-open common dialog, and when it pressed > i want to preview the currently selected file. I had no problems > with adding all the required controls, but my problem is to get the > name of the currently selected file in the dialog. I saw that MFC > provides 'OnLBSelChangedNotify' handler, but still I haven't > menaged to find the name of the currently selected file. Try this: // Include the IDs of the controls on the FileOpen dialog #includeLPSTR GetSelFile( void ) { char lpszSelFile[ MAX_BUFF ]; // Retrieve the current subdirectory name (selecting directories // in the directory listbox *does* update the value returned by // getcwd( )). getcwd( lpszSelFile, MAX_BUFF ); /*** Add code here to ensure a trailing backslash exists at the end of the string ***/ // Get a pointer to the filename listbox (lst1 is defined // in dlgs.h) CListBox* pLstFiles = (CListBox*) GetDlgItem( lst1 ); int nCurSel = pLstFiles->GetCurSel( ); // Make sure a file is actually selected if( nCurSel == LB_ERR ) { lpszSelFile = NULL; } else { // Get the selected item from the filename listbox. If you're // filename listbox has multi-select enabled, this will need // to be a loop based on the return value of // pLstFlies->GetSelCount( ). char lpszFileName[ MAX_BUFF ]; pLstFiles->GetText( nCurSel, lpszFileName ); // Put the two strings together strcat( lpszSelFile, lpszFileName ); } return lpszSelFile; } Please note that this is just the general idea. I've successfully used the method described here, but the actual code snippet above is off-the-cuff and untested. Since your target platform is 16-bit, you may need to use _fstrcpy( ) and _fstrcat( ) depending on your memory model and also please see the comments in the code; a couple of them are very important with regard to trailing backslashes and multi-select listboxes. Hope that helps, Rick ------------------------------------------------------------------------ Richard A. Esterling Attachmate Internet Products Group (IPG) Senior Software Engineer McLean, VA 703-847-4500 http://widget.eco.twg.com:1080 http://www.twg.com -----From: "Grant Shirreffs (Great Elk)" Couldn't you get the name of the current file from the File Name edit box? -----From: "Fredrik Gunne" There are at least two ways of doing this: 1. Override OnFileNameOK. When this function is called, the OPENFILENAME struct has been filled in with the chosen filename(s). 2. Loop through the entries in the filename listbox, and check what files have been chosen. Like this: #include pFileList = (CListBox*)GetDlgItem(lst1); // lst1 is ID for the listbox for (int i = 0; i < pFileList->GetCount(); i++) { if (pFileList->GetSel(i)) { // Use GetText to extract filename } } Note that only the filenames are in the listbox, not the complete path. Use GetCurrentDirectory to get the path. Hope this helps Fredrik Gunne -- Fredrik Gunne Agema Infrared Systems AB
| Вернуться в корень Архива |