现在的位置: 首页 > 综合 > 正文

编写自己的CMFCEditBrowseCtrl,实现打开指定类型的文件

2013年10月02日 ⁄ 综合 ⁄ 共 1561字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.