前言:

转载请附上连接,本帖原创请勿照抄。

主界面:

.h文件


// Test_FileDlg.h: 头文件
//#pragma once// CTestFileDlg 对话框
class CTestFileDlg : public CDialogEx
{
// 构造
public:CTestFileDlg(CWnd* pParent = nullptr);  // 标准构造函数// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_TEST_FILE_DIALOG };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持// 实现
protected:HICON m_hIcon;// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()
public:afx_msg void OnBnClickedButton1();afx_msg void OnBnClickedButton2();CString BrowseFolder(HWND hWnd, LPCTSTR lpTitle);
};

.cpp文件


// Test_FileDlg.cpp: 实现文件
//#include "stdafx.h"
#include "Test_File.h"
#include "Test_FileDlg.h"
#include "afxdialogex.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif// 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogEx
{
public:CAboutDlg();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_ABOUTBOX };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持// 实现
protected:DECLARE_MESSAGE_MAP()
};CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()// CTestFileDlg 对话框CTestFileDlg::CTestFileDlg(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_TEST_FILE_DIALOG, pParent)
{m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CTestFileDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CTestFileDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, &CTestFileDlg::OnBnClickedButton1)ON_BN_CLICKED(IDC_BUTTON2, &CTestFileDlg::OnBnClickedButton2)
END_MESSAGE_MAP()// CTestFileDlg 消息处理程序BOOL CTestFileDlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != nullptr){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动//  执行此操作SetIcon(m_hIcon, TRUE);            // 设置大图标SetIcon(m_hIcon, FALSE);        // 设置小图标// TODO: 在此添加额外的初始化代码return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}void CTestFileDlg::OnSysCommand(UINT nID, LPARAM lParam)
{if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialogEx::OnSysCommand(nID, lParam);}
}// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。void CTestFileDlg::OnPaint()
{if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{CDialogEx::OnPaint();}
}//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CTestFileDlg::OnQueryDragIcon()
{return static_cast<HCURSOR>(m_hIcon);
}void CTestFileDlg::OnBnClickedButton1()
{CString SelectPath = BrowseFolder(this->m_hWnd, "选择目录");GetDlgItem(IDC_EDIT1)->SetWindowText(SelectPath);
}void CTestFileDlg::OnBnClickedButton2()
{CString m_strFilePathName;CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("All Files(*.exe)|*.exe|所有文件(*.*)|*.*|"), NULL);if (dlg.DoModal()){m_strFilePathName = dlg.GetPathName();}SetDlgItemText(IDC_EDIT2, m_strFilePathName);
}
CString CTestFileDlg::BrowseFolder(HWND hWnd, LPCTSTR lpTitle)
{char szPath[MAX_PATH] = { 0 };BROWSEINFO m_bi;m_bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;m_bi.hwndOwner = hWnd;m_bi.pidlRoot = NULL;m_bi.lpszTitle = lpTitle;m_bi.lpfn = NULL;m_bi.lParam = NULL;m_bi.pszDisplayName = szPath;LPITEMIDLIST pidl = ::SHBrowseForFolder(&m_bi);if (pidl){if (!::SHGetPathFromIDList(pidl, szPath)) szPath[0] = 0;IMalloc * pMalloc = NULL;if (SUCCEEDED(::SHGetMalloc(&pMalloc))) // 取得IMalloc分配器接口{pMalloc->Free(pidl); // 释放bai内存pMalloc->Release(); // 释放接口}}return szPath;
}

说明:

OnBnClickedButton1 选择文件夹

OnBnClickedButton2 选择文件

MFC获取文件及文件夹相关推荐

  1. CodeProject - 在C#使用SHGetFileInfo获取(管理)文件或者文件夹图标(C#封装Win32函数的一个例子)...

    Obtaining (and managing) file and folder icons using SHGetFileInfo in C# 作者:Paul Ingles  翻译:小新0574 审 ...

  2. R语言dir函数获取目录中文件或者文件夹名称实战

    R语言dir函数获取目录中文件或者文件夹名称实战 目录 R语言dir函数获取目录中文件或者文件夹名称实战 #基本语法

  3. Windows Store App JavaScript 开发:获取文件和文件夹列表

    在应用程序中有时可能需要获取用户库中的内容,以便执行相关的操作.如果要获取某个用户库中的内容,需要先获取到这个用户库,获得用户库可以通过Windows.Storage命名空间中的KnownFolder ...

  4. 获取应用程序文件夹路径的最佳方法

    我看到有一些方法可以获取应用程序文件夹路径: Application.StartupPath System.IO.Path.GetDirectoryName( System.Reflection.As ...

  5. microsoft visual sourcesafe explorer 获取不了文件夹的解决方法

    使用vss explorer 8.0一段时间后发现, 获取不了文件夹目录,没有弹出选择可复选树型的目录框.重装了两次 microsoft visual sourcesafe explorer 8.0都 ...

  6. Python 技术篇-不使用os模块遍历文件夹,pathlib库获取直接下级文件和所有下级文件

    pathlib.Path("路径").iterdir() 可以获取直接下级文件和文件夹. pathlib.Path("路径").glob("**/*& ...

  7. c++如何获取文件时间_如何在Windows 10上获取文件或文件夹的所有权

    要访问Windows 10上的任何文件或文件夹,你必须具有相应的权限.遗憾的是,如果你没有编辑某些文件和文件夹的权限,则可能会出现某些问题,这时你必须对该文件夹或文件取得所有权. 要想取得某个文件夹的 ...

  8. Windows Store App 获取文件及文件夹列表

    通过使用13.2.1小节给出的方法和属性,不仅可以对用户库中的文件和文件夹进行操作,还可以获取其中所有的文件或者文件夹,比如为了完整地展现整个音乐库,可以获取并列举出音乐库中所有的音乐文件,以便能够在 ...

  9. MFC初探 —— 文件与文件夹的选择与拷贝

    一.选择文件 其中CFileDialog类中的参数OFN_ALLOWMULTISELECT表示多个文件的选择,若只需要选择一个文件,删除该参数即可. /// <summary> /// 选 ...

  10. JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤...

    JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...

最新文章

  1. spark重要端口号
  2. Spark和Hadoop,孰优孰劣?
  3. javax.crypto.BadPaddingException: Given final block not properly padded解决方案
  4. django之ORM介绍与基本用法(一)
  5. 重构-打造爱因斯坦谜题最快算法
  6. 用 Microsoft Expression Design 制作图形资源
  7. Minor GC和Major GC和Full GC
  8. html li 做瀑布流,js实现瀑布流效果(自动生成新的内容)
  9. iOS开发之SQLite的Object-C封装
  10. IIS安装及ASPNet开发环境配置
  11. ieeetran_IEEEtran BibTex样式
  12. C/C++存储区域划分(栈区,堆区,全局区,代码区)
  13. 黑马头条推荐系统完整版(包括虚拟机和数据,代码已修复过可完美跑起来)
  14. 工作室官网整站源码有后台
  15. 零基础入门学习Python(31)--永久存储:腌制一缸美味的泡菜
  16. linux u盘空间越小 写入越慢,解决U盘容量变小问题
  17. 高通量测序与生物信息学面临的挑战
  18. 蓝牙核心技术概述(一):蓝牙概述-转-
  19. 联想服务器TS130主板芯片组,【ThinkServer TS130配置】ThinkServer TS130塔式服务器配置-ZOL中关村在线...
  20. python 向已有excel写数据_将数据写入已有的excel文件并制作汇总页签

热门文章

  1. win7 x64下安装 KB958559 出现 0x80240037 错误解决方法(win7 x64 安装VB6、Media Studio 8)
  2. python爬虫学习之电视剧弹幕的抓取
  3. 全新个性化地图服务发布,更好支持自定义地图样式
  4. 文件分卷压缩和压缩的区别是什么
  5. Vue实战篇十六:导航菜单
  6. python行业发展前景_python为什么这么火|为什么要学Python?过来人告诉你Python的行业发展前景...
  7. 种草!.NET开发控件集ComponentOne Studio Enterprise!
  8. 8.11 拉姆齐定理(1929)
  9. 2024考研《游戏设计概论》复习笔记-全集(1-6章)
  10. spring boot中jackson时间格式和东八区的设置