Using Win32 functions in Visual FoxPro Image Gallery
Code examples:
How to change display settings: screen resolution, screen refresh rate
Enumerating data formats currently available on the clipboard
Custom GDI+ class
Mapping and disconnecting network drives
Winsock: sending email messages (SMTP, port 25)
Capturing keyboard activity of another application with the Raw Input API (VFP9)
Winsock: retrieving directory listing from an FTP server using passive data connection (FTP, port 21)
Converting Unicode data from the Clipboard to a character string using a given code page
Disk in drive A:
Enumerating raw input devices attached to the system (keyboard, mouse, human interface device)
How to display the Properties dialog box for a file (ShellExecuteEx)
Enumerating network resources
Detecting changes in connections to removable drives (VFP9)
How to download a file from the FTP server using FtpGetFile
Splash Screen for the VFP application
Using Font and Text functions
Using EnumPrinters function to enumerate locally installed printers
How to play AVI file on the _screen
Retrieving the name of the network resource associated with a local device
Using Video Capture: displaying on FoxPro form frames and previewing video obtained from a digital camera
Running MSDOS Shell as a child process with redirected input and output (smarter RUN command)
Creating irregularly shaped FoxPro form using transparency color key
Creating a console window for Visual FoxPro application
How to put a horizontal text scrolling on the form (a news line)
Displaying system dialog that selects a folder

User rating: 0/10 (0 votes)
Rate this code sample:
  • ~
More code examples    Listed functions    Add comment     W32 Constants      Translate this page Printer friendly version of this code sample
Versions:
click to open
Before you begin:

Starting with VFP7 the original GETDIR function is changed to be a wrapper around the SHBrowseForFolder function.

Check a similar code published in FoxTalk November 1999 by Andrew Coates.

See also:
 
#include "stdafx.h"
#include < Shlobj.h >
 
TCHAR *BrowseForFolder( TCHAR *wszStartPath );
 
int _tmain()
{
    HRESULT hr = CoInitialize( NULL );
 
    if SUCCEEDED(hr)
    {
        TCHAR szCurDir[MAX_PATH];
        GetCurrentDirectory(
            sizeof(szCurDir)/sizeof(TCHAR), szCurDir);
 
        //displays Browse For Folder dialog
        //and selects szCurDir
        TCHAR *szSelectedDir = BrowseForFolder( szCurDir );
 
        if ( szSelectedDir != NULL )
        {
            //do something with the new path
        }
 
        CoUninitialize();
    }
 
    return 0;
}
 
INT CALLBACK BrowseCallbackProc( HWND hwnd, UINT uMsg, 
    LPARAM lp,  LPARAM pData ) 
{
    TCHAR szDir[MAX_PATH];
 
    switch(uMsg) 
    {
        case BFFM_INITIALIZED:
            if ( pData ) wcscpy( szDir, (TCHAR *)pData );
            else GetCurrentDirectory(
                sizeof(szDir) / sizeof(TCHAR), szDir);
 
            //selects the specified folder 
            //in the Browse For Folder dialog box
            SendMessage(hwnd, BFFM_SETSELECTION, 
                TRUE, (LPARAM)szDir);
 
            break;
 
        case BFFM_SELCHANGED: 
            if (SHGetPathFromIDList(
                (LPITEMIDLIST) lp, szDir))
            {
                //sets the status text 
                //in the Browse For Folder dialog box
                SendMessage(hwnd, BFFM_SETSTATUSTEXT,
                    0, (LPARAM)szDir);
            }
        break;
    }
    return 0;
}
 
TCHAR *BrowseForFolder( TCHAR *wszStartPath )
{
    TCHAR szwNewPath[MAX_PATH];
 
    BROWSEINFO bInfo;
    bInfo.hwndOwner = GetActiveWindow();
    bInfo.pidlRoot = NULL; 
    bInfo.pszDisplayName = szwNewPath;
    bInfo.lpszTitle = _T("Select a folder");
 
    bInfo.ulFlags = BIF_NONEWFOLDERBUTTON
        | BIF_NEWDIALOGSTYLE
        | BIF_EDITBOX
        //| BIF_SHAREABLE
        //| BIF_RETURNFSANCESTORS
        | BIF_RETURNONLYFSDIRS;
 
    bInfo.lpfn = BrowseCallbackProc;
    bInfo.lParam = (LPARAM)wszStartPath;
 
    LPITEMIDLIST lpItem = SHBrowseForFolder( &bInfo);
 
    if( lpItem != NULL )
    {
        SHGetPathFromIDList( lpItem, szwNewPath );
        CoTaskMemFree( lpItem );
        return szwNewPath;
    }
    else return NULL;
}
 

User rating: 0/10 (0 votes)
Rate this code sample:
  • ~
1933 bytes  
Created: 2003-01-02 15:38:46  
Modified: 2011-02-16 07:01:05  
Visits in 7 days: 185  
Listed functions:
GetActiveWindow
GlobalAlloc
GlobalFree
GlobalSize
SHBrowseForFolder
SHGetPathFromIDList
SHParseDisplayName
Printer friendly API declarations
My comment:
I use the GlobalFree function to release the allocated memory.

In Andrew Coates code this is
= CoTaskMemFree(lpIDList)
which is probably a better way.

The SHParseDisplayName translates the initial path to the pointer to an item identifier list (PIDL).

* * *
Windows Shell script:
oShell = CREATEOBJECT("Shell.Application")

oFolder = oShell.Application.BrowseForFolder(_screen.HWnd,;
        "Select Folder", 1, "c:\Program Files")

IF NOT ISNULL(oFolder)
        ? oFolder.self.Path
ENDIF
Word Index links for this example:
Translate this page:
  Spanish    Portuguese    German    French    Italian  
FreeTranslation.com offers instant, free translations of text or web pages.
User Contributed Notes:
R vd Wiel | 2005-05-23 04:25:08
Hi,
Great function to document, I only think that the last update broke something. Function 'buf2dword' isn't defined and the call to SHBrowseForFolder gives an exception.
A.M. | 2005-05-23 07:25:32
The buf2dword() added. I'll check what possibly could be wrong with the SHBrowseForFolder call.

Copyright © 2001-2013 News2News, Inc. Before reproducing or distributing any data from this site please ask for an approval from its owner. Unless otherwise specified, this page is for your personal and non-commercial use. The information on this page is presented AS IS, meaning that you may use it at your own risk. Microsoft Visual FoxPro and Windows are trade marks of Microsoft Corp. All other trademarks are the property of their respective owners. 

Privacy policy
Credits: PHP (4.4.9), an HTML-embedded scripting language, MySQL (5.1.55-log), the Open Source standard SQL database, AceHTML Freeware Version 4, freeware HTML Editor of choice.   Hosted by Korax Online Inc.
Last Topics Visited (50.17.109.248)
3.04 hrs.Example: 'How to activate Windows Calculator'
 Example: 'Creating a window using CreateWindowEx function'
 Function: 'RegSaveKey'
Function group: 'Registry'
4.79 hrs.Example: 'Accessing examples contained in this reference from a VFP application'
 Example: 'Retrieving Window Class information for the VFP window'
 Function: 'CreateWaitableTimer'
6.19 hrs.Example: 'Reading parameters of streams in AVI file'
7.46 hrs.Example: 'Obtaining I/O counts for the current process'
 Example: 'Displaying the drive type value'
8.94 hrs.Example: 'Simple Window Viewer'
Google
Advertise here!