1.创建回调函数

int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)

{

    switch (uMsg)

    {

    case BFFM_INITIALIZED:    //初始化消息

    ::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);//传递默认打开路径 

    break;

    case BFFM_SELCHANGED:    //选择路径变化,

    {

     char curr[MAX_PATH];

    SHGetPathFromIDList((LPCITEMIDLIST)lParam, curr);

    ::SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0, (LPARAM)curr);

    }

    break;

    default:

    break;

    }

    return 0;

}

2.按钮处理函数

TCHAR szDefaultDir[MAX_PATH];

CString strDef(_T("C://WINDOWS//"));

memcpy(szDefaultDir, strDef.GetBuffer(strDef.GetLength()), strDef.GetLength());

strDef.ReleaseBuffer();

TCHAR szPath[MAX_PATH];

BROWSEINFO br;

ITEMIDLIST* pItem;

br.hwndOwner = this->GetSafeHwnd();

br.pidlRoot = 0;

br.pszDisplayName = 0;

br.lpszTitle = "选择路径";

br.ulFlags = BIF_STATUSTEXT | BIF_USENEWUI;

br.lpfn = BrowseCallbackProc;        //设置CALLBACK函数

br.iImage = 0;

br.lParam = long(&szDefaultDir);    //设置默认路径

pItem = SHBrowseForFolder(&br);

if (pItem != NULL)

{

if (SHGetPathFromIDList(pItem, szPath) == TRUE)

{

CString strDir = szPath;

}

}