在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”: 未声明的标识符