在Visual Studio 2010和Visual Studio 2008 SP1中,微软采用了BCG库对应用程序界面进行美化,其中CMFCEditBrowseCtrl控件可以实现在Edit控件中浏览打开文件的功能。
但是,问题出现了,该控件默认的打开文件类型是所有文件,要如何才能打开自己指定的文件类型呢?这时就需要编写自己的CMFCEditBrowseCtrl类。
具体步骤:
1.添加类,选择MFC类,在类名中填入自定义的类名如:CMyEditBrowseCtrl,选择父类为CMFCEditBrowseCtrl。
2.在头文件中添加如下代码
#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文件中添加如下代码
#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”: 未声明的标识符