编写自己的CMFCEditBrowseCtrl,实现打开指定类型的文件
2017-04-11 16:37
344 查看
在Visual Studio 2010和Visual Studio 2008 SP1中,微软采用了BCG库对应用程序界面进行美化,其中CMFCEditBrowseCtrl控件可以实现在Edit控件中浏览打开文件的功能。
但是,问题出现了,该控件默认的打开文件类型是所有文件,要如何才能打开自己指定的文件类型呢?这时就需要编写自己的CMFCEditBrowseCtrl类。
具体步骤:
1.添加类,选择MFC类,在类名中填入自定义的类名如:CMyEditBrowseCtrl,选择父类为CMFCEditBrowseCtrl。
2.在头文件中添加如下代码
[html] view
plain copy
#pragma once
// CMyEditBrowseCtrl
class CMyEditBrowseCtrl : public CMFCEditBrowseCtrl
{
//DECLARE_DYNAMIC(CMyEditBrowseCtrl)
public:
CMyEditBrowseCtrl();
virtual ~CMyEditBrowseCtrl();
public:
CString m_strFileType;//自定义开文件类型
private:
virtual void OnBrowse();//重写CMFCEditBrowseCtrl的打开函数
protected:
DECLARE_MESSAGE_MAP()
};
在CPP文件中添加如下代码
[cpp] view
plain copy
#include "stdafx.h"
#include "MyEditBrowseCtrl.h"
// CMyEditBrowseCtrl
//IMPLEMENT_DYNAMIC(CMyEditBrowseCtrl, CMFCEditBrowseCtrl)
CMyEditBrowseCtrl::CMyEditBrowseCtrl()
{
m_strFileType = _T("All Files (*.*)|*.*||");
}
CMyEditBrowseCtrl::~CMyEditBrowseCtrl()
{
}
BEGIN_MESSAGE_MAP(CMyEditBrowseCtrl, CMFCEditBrowseCtrl)
END_MESSAGE_MAP()
// CMyEditBrowseCtrl 消息处理程序
void CMyEditBrowseCtrl::OnBrowse()
{
CString TempPathName;
CFileDialog dlg(TRUE,NULL,NULL,NULL,m_strFileType,NULL,0,TRUE);
(dlg.m_ofn).lpstrTitle=_T("打开文件");
if(dlg.DoModal()==IDOK)
{
TempPathName=dlg.GetPathName();
SetWindowText(TempPathName);
}
else
return;
}
在使用的时候只需:
在头文件中添加:
#include "MyEditBrowseCtrl.h"
CMyEditBrowseCtrl m_wndFileEdit;
在实现函数中添加:
m_wndFileEdit1.EnableFileBrowseButton();
m_wndFileEdit1.m_strFileType=_T("Text Files(*.txt)|*.txt|All Files (*.*)|*.*||");
注意:在创建CMyEditBrowseCtrl类时,一定要禁用如下宏:
头文件中:
DECLARE_DYNAMIC(CMyEditBrowseCtrl)
Cpp文件中:
IMPLEMENT_DYNAMIC(CMyEditBrowseCtrl, CMFCEditBrowseCtrl)
否则会编译会出现如下错误:
error C2065: “classCMFCEditBrowseCtrl”: 未声明的标识符
但是,问题出现了,该控件默认的打开文件类型是所有文件,要如何才能打开自己指定的文件类型呢?这时就需要编写自己的CMFCEditBrowseCtrl类。
具体步骤:
1.添加类,选择MFC类,在类名中填入自定义的类名如:CMyEditBrowseCtrl,选择父类为CMFCEditBrowseCtrl。
2.在头文件中添加如下代码
[html] view
plain copy
#pragma once
// CMyEditBrowseCtrl
class CMyEditBrowseCtrl : public CMFCEditBrowseCtrl
{
//DECLARE_DYNAMIC(CMyEditBrowseCtrl)
public:
CMyEditBrowseCtrl();
virtual ~CMyEditBrowseCtrl();
public:
CString m_strFileType;//自定义开文件类型
private:
virtual void OnBrowse();//重写CMFCEditBrowseCtrl的打开函数
protected:
DECLARE_MESSAGE_MAP()
};
在CPP文件中添加如下代码
[cpp] view
plain copy
#include "stdafx.h"
#include "MyEditBrowseCtrl.h"
// CMyEditBrowseCtrl
//IMPLEMENT_DYNAMIC(CMyEditBrowseCtrl, CMFCEditBrowseCtrl)
CMyEditBrowseCtrl::CMyEditBrowseCtrl()
{
m_strFileType = _T("All Files (*.*)|*.*||");
}
CMyEditBrowseCtrl::~CMyEditBrowseCtrl()
{
}
BEGIN_MESSAGE_MAP(CMyEditBrowseCtrl, CMFCEditBrowseCtrl)
END_MESSAGE_MAP()
// CMyEditBrowseCtrl 消息处理程序
void CMyEditBrowseCtrl::OnBrowse()
{
CString TempPathName;
CFileDialog dlg(TRUE,NULL,NULL,NULL,m_strFileType,NULL,0,TRUE);
(dlg.m_ofn).lpstrTitle=_T("打开文件");
if(dlg.DoModal()==IDOK)
{
TempPathName=dlg.GetPathName();
SetWindowText(TempPathName);
}
else
return;
}
在使用的时候只需:
在头文件中添加:
#include "MyEditBrowseCtrl.h"
CMyEditBrowseCtrl m_wndFileEdit;
在实现函数中添加:
m_wndFileEdit1.EnableFileBrowseButton();
m_wndFileEdit1.m_strFileType=_T("Text Files(*.txt)|*.txt|All Files (*.*)|*.*||");
注意:在创建CMyEditBrowseCtrl类时,一定要禁用如下宏:
头文件中:
DECLARE_DYNAMIC(CMyEditBrowseCtrl)
Cpp文件中:
IMPLEMENT_DYNAMIC(CMyEditBrowseCtrl, CMFCEditBrowseCtrl)
否则会编译会出现如下错误:
error C2065: “classCMFCEditBrowseCtrl”: 未声明的标识符
相关文章推荐
- 编写自己的CMFCEditBrowseCtrl,实现打开指定类型的文件
- 文件上传js打开文件管理器过滤只显示指定类型文件的实现
- 文件系统中打开某指定类型文件时,关联并用自己的APP打开
- JAVA实现打开文件对话框(可以指定所需打开文件的格式)
- 让自己的软件实现拖拽打开文件
- 编程实现双击某个文件用指定程序打开
- Python中实现从目录中过滤出指定文件类型的文件
- Java实现将指定目录内的指定类型的文件归类
- VC: 打开资源视图时提示“指南必须指定类型”,.rc资源文件损坏
- php下实现在指定目录搜索指定类型文件的函数
- VC++项目开发笔记——打开或保存指定类型的文件CFileDialog类
- 用Linux命令行实现删除和复制指定类型的文件
- JAVA实现显示指定类型的文件的例子
- c++编程实现指定目录下,捕获文件打开事件 。目录上锁
- FilenameFilter文件名过滤器——列出指定类型文件实现
- PHP实现点击a标签的href做链接时,直接保存文件(任何类型),而不是通过浏览器直接打开下载的文件
- SDI文件打开对话框的文档过滤器(支持多种类型的实现)
- 在程序中实现关联指定的文件类型
- [visual-studio] 打开 rc 文件指南必须指定类型出错
- Android 把自己应用放在某种类型文件的打开列表,并获取文件的路径