我是靠谱客的博主 冷静水池,最近开发中收集的这篇文章主要介绍MFC使用button选择文件(夹)的实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.打开文件

	CFileDialog ObjFile(TRUE, NULL, NULL, OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY,
_T("图片文件(*.png; *.jpg; *.jpeg; *.bmp)|*.png; *.jpg; *.jpeg; *.bmp|所有文件(*.*)|*.*||"), NULL);
	if (IDOK == ObjFile.DoModal())
	{
		m_strImgPath = ObjFile.GetPathName();
        }

在界面上使用这个按钮时, 会出现主界面的的标题栏变灰,也就是失焦,解决办法:

  • 如果使用VS2008以上的版本就会有这个问题,这里最直接的处理办法:

       将界面的CDialogEx全部替换成CDialog就解决(主观认为是扩展窗口类的小bug)

  • 如果需要用到扩展类的一些特性,也可以用下面的方式替代:
       CFileDialog ObjFile(TRUE, NULL, NULL, OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY,
                                         NULL, theApp.GetMainWnd()->GetWindow (GW_HWNDPREV));
       if (IDOK == ObjFile.DoModal())
       { 
            ...
            SetFocus();
        }

 

2.打开文件夹

	CString strDirPath;
	BROWSEINFO stDirInfo;
	::ZeroMemory(&stDirInfo, sizeof(stDirInfo));

	stDirInfo.pidlRoot = 0;
	stDirInfo.lpszTitle = _T("选择文件存储路径:");
	stDirInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_EDITBOX | BIF_DONTGOBELOWDOMAIN;
	stDirInfo.lpfn = nullptr;

	LPITEMIDLIST lpidlBrowse = ::SHBrowseForFolder(&stDirInfo);
	if (nullptr != lpidlBrowse)
	{
		if (::SHGetPathFromIDList(lpidlBrowse, strDirPath.GetBuffer(MAX_PATH)))
		{
		    //获得文件夹路径strDirPath,由程式作者实现功能
                }
		::CoTaskMemFree(lpidlBrowse);
	}

 

最后

以上就是冷静水池为你收集整理的MFC使用button选择文件(夹)的实现的全部内容,希望文章能够帮你解决MFC使用button选择文件(夹)的实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部