C++ 消息映射MFC:继承多个消息映射
我使用的是MFC100、VS2010和MDI 我过度使用了CPreviewView的基本功能 我希望它的行为非常类似于我的CMyView(这是一个CView) CMyView和CMyPreviewView不在同一类继承路径中 因此,我希望继承CPreviewView消息映射和CMyView消息映射。目前,它仅继承CPreviewView消息映射C++ 消息映射MFC:继承多个消息映射,c++,mfc,afx,C++,Mfc,Afx,我使用的是MFC100、VS2010和MDI 我过度使用了CPreviewView的基本功能 我希望它的行为非常类似于我的CMyView(这是一个CView) CMyView和CMyPreviewView不在同一类继承路径中 因此,我希望继承CPreviewView消息映射和CMyView消息映射。目前,它仅继承CPreviewView消息映射 BEGIN_MESSAGE_MAP(CMyPreviewView, CPreviewView) //{{AFX_MSG_MAP(CMyPrevi
BEGIN_MESSAGE_MAP(CMyPreviewView, CPreviewView)
//{{AFX_MSG_MAP(CMyPreviewView)
ON_COMMAND(AFX_ID_PREVIEW_CLOSE, OnPreviewClose)
ON_COMMAND(AFX_ID_PREVIEW_PRINT, OnPreviewPrint)
ON_UPDATE_COMMAND_UI(ID_WINDOW_NEW, OnUpdateWindowNew)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
有什么想法吗?我看到过这样的事情
ALT_MSG_MAP(UINT msgMapID)
但这只适用于ATL。我可以复制并粘贴我的整个CMyView消息映射,但这真的很混乱,因为它有300多个处理程序。根据上的CWnd和消息映射部分,无法使MFC消息映射与多继承一起工作,因为任何CWnd
派生的类型都必须是其继承中最左边的派生基。由于CView
派生自CWnd
,因此不能从这些类进行乘法继承
为了避免代码的直接复制,您可以使用composition或CRTP将希望共享的代码重构为某种混合形式。将消息映射放在单独的.h文件中,并将其包含在两个类中
BEGIN_MESSAGE_MAP(CMyPreviewView, CPreviewView)
//{{AFX_MSG_MAP(CMyPreviewView)
ON_COMMAND(AFX_ID_PREVIEW_CLOSE, OnPreviewClose)
ON_COMMAND(AFX_ID_PREVIEW_PRINT, OnPreviewPrint)
ON_UPDATE_COMMAND_UI(ID_WINDOW_NEW, OnUpdateWindowNew)
#include "SharedViewMessageMap.h"
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
我似乎记得很久以前读过一篇关于MFC的“多重继承”的文章,但它并不好看。有什么原因不能只使用CMyView并将CMyPreviewView嵌入其中?应该足够简单。CMyPreviewView和CMyView是完全不同的类。“CMyPreviewView->CPreviewView->CScrollView…->CView”和“CMyView->CView”不能位于同一继承路径中。。我只想让他们有相同的命令处理程序。没有复制、粘贴和维护两个位置。这不是我的意思,但你似乎发现你的解决方案太简单了。对不起,我想我弄糊涂了。我没有使用“类多重继承”,我指的是“消息映射继承”。我希望CMyPreviewView类有两个消息映射,CPreview和CMyView消息映射。您是说我可以将命令处理程序移动到单独/单个位置?在两个地方都提到它?像宏/定义?