1

MFC100、VS2010、MDIを使用しています。

CPreviewView の基本的な機能を削除しています。

私のCMyView(これはCViewです)と非常によく似た動作をさせたいです

CMyView と CMyPreviewView は、同じクラス継承パスにありません。

したがって、CPreviewView メッセージ マップと CMyView メッセージ マップの両方を継承したいと考えています。現在、CPreviewView メッセージ マップのみを継承しています。

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 以上のハンドラーがあるため、これは非常に面倒です。

4

2 に答える 2

1

メッセージ マップを別の .h ファイルに入れ、#includeそれを両方のクラスに入れます。

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()
于 2014-05-15T18:15:33.930 に答える