qinyi75 发表于 2017-6-2 13:28:34

选择文件夹代码的封装

DirDialog.h 和DirDialog.cpp
DirDialog.h代码:

#pragma once
#ifndef __DIRDIALOG_H_HH
#define __DIRDIALOG_H_HH

#include <Shlobj.h>


class CDirDialog
{
protected:
        BROWSEINFO m_bi;
        char m_szDisplayName; //显示名称
        char m_szPath; //选择的目录

public:
        //显示对话框
        BOOL DoBrowse(HWND hwndOwner, LPTSTR pszDisplayName);

        LPCTSTR GetPath(){return m_szPath;};

        CDirDialog(void);
        ~CDirDialog(void);
};

#endif





DirDialog.cpp代码:
#include "DirDialog.h"


CDirDialog::CDirDialog(void)
{
        ::ZeroMemory((void*)&amp;m_bi, sizeof(BROWSEINFO));
        memset(m_szDisplayName, 0, MAX_PATH);
        memset(m_szPath, 0, MAX_PATH);
        m_bi.hwndOwner = NULL;
        m_bi.pidlRoot = NULL;
        m_bi.lpszTitle = "请选择文件夹";
        m_bi.ulFlags = BIF_RETURNONLYFSDIRS ;
        m_bi.lpfn = NULL;
        m_bi.lParam = NULL;
        m_bi.iImage = NULL;
}

BOOL CDirDialog::DoBrowse(HWND hwndOwner, LPTSTR pszTitle)
{
        m_bi.hwndOwner = hwndOwner;
        m_bi.lpszTitle = pszTitle;
        PIDLIST_ABSOLUTE pItem = ::SHBrowseForFolderA(&amp;m_bi);
        if (pItem != NULL)
        {
                ::SHGetPathFromIDListA(pItem, m_szPath);
                return TRUE;
        }
       
        return FALSE;
}

CDirDialog::~CDirDialog(void)
{
}

使用时的代码:
CDirDialog dir;
                                        if (dir.DoBrowse(hwndDlg, "title"))
                                        {
                                                ::MessageBoxA(hwndDlg, dir.GetPath(), "", MB_OK);
                                        }
页: [1]
查看完整版本: 选择文件夹代码的封装