您的位置:首页 > 其它

MFC:如何使用Boost.Signal2在Document-View结构中添加事件响应机制

2010-05-21 10:40 543 查看

传统方式

1. XXDoc.h
//...
class CXXDoc : public CDocument
{
//...
// Operations
public:
	void Foo1();
	void Foo2();
	void Foo3();
//...
};

2. XXDoc.cpp
//...

void CXXDoc::Foo1()
{
	// Do Foo1
}

void CXXDoc::Foo2()
{
	// Do Foo2
}

void CXXDoc::Foo3()
{
	// Do Foo3
}

3. XXView.h
//...
class CXXView : public CView
{
//...
protected:
//...
	afx_msg void OnFoo1();
	afx_msg void OnFoo2();
	afx_msg void OnFoo3();
//...
};

4. XXView.cpp
//...

void CXXView::OnFoo1()
{
	GetDocument()->Foo1();
	Invalidate();
}

void CXXView::OnFoo2()
{
	GetDocument()->Foo2();
	Invalidate();
}

void CXXView::OnFoo3()
{
	GetDocument()->Foo3();
	Invalidate();
}

新方式

1. XXDoc.h
#include <boost/signals2.hpp>
//...
class CXXDoc : public CDocument
{
//...
// Attributes
public:
	boost::signals2::signal<void()> m_sigDocChanged;
// Operations
public:
	void Foo1();
	void Foo2();
	void Foo3();
//...
};

2. XXDoc.cpp
//...

void CXXDoc::Foo1()
{
	// Do Foo1
	m_sigDocChanged();
}

void CXXDoc::Foo2()
{
	// Do Foo2
	m_sigDocChanged();
}

void CXXDoc::Foo3()
{
	// Do Foo3
	m_sigDocChanged();
}

3. XXView.h
//...
class CXXView : public CView
{
//...
public:
	virtual void OnInitialUpdate();
protected:
	void OnDocChanged();
//...
	afx_msg void OnFoo1();
	afx_msg void OnFoo2();
	afx_msg void OnFoo3();
//...
};

4. XXView.cpp
//...

void CXXView::OnInitialUpdate()
{
	CView::OnInitialUpdate();

	GetDocument()->m_sigDocChanged.connect(std::bind(&CXXView::OnDocChanged, this));
}

void CXXView::OnDocChanged()
{
	Invalidate();
}

void CXXView::OnFoo1()
{
	GetDocument()->Foo1();
}

void CXXView::OnFoo2()
{
	GetDocument()->Foo2();
}

void CXXView::OnFoo3()
{
	GetDocument()->Foo3();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐