Здравствуйте.
Почему при множественном наследовании не обрабатываются все сообщения и как это исправить?
mylistctrl.h:
#include "BaseListCtrl.h"
#include "EditListCtrl.h"
#include "DragDropListCtrl.h"
class CMyListCtrl : virtual public CBaseListCtrl,
virtual public CEditListCtrl,
virtual public CDragDropListCtrl
{
private:
int x;
public:
CMyListCtrl();
//using CListCtrl::SubclassDlgItem;
using CBaseListCtrl::SubclassDlgItem; // FIX Compiler Error C2385
// Implementation
protected:
//DECLARE_MESSAGE_MAP()
};
baselistctrl.h:
class CBaseListCtrl : public CListCtrl
{
...
// Implementation
public:
afx_msg void OnRButtonDown( UINT, CPoint ); // это работает
DECLARE_MESSAGE_MAP()
};
baselistctrl.cpp:
#include "BaseListCtrl.h"
BEGIN_MESSAGE_MAP(CBaseListCtrl, CListCtrl)
ON_WM_RBUTTONDOWN()
END_MESSAGE_MAP()
//--------------------------------------------------------------------------------
void CBaseListCtrl::OnRButtonDown(UINT nFlags,CPoint point)
{
... // это работает
editlistctrl.h:
class CEditListCtrl : public CListCtrl
{
...
// Implementation
public:
afx_msg void OnLButtonDblClk( UINT, CPoint ); // это НЕ работает
DECLARE_MESSAGE_MAP()
};
editlistctrl.cpp:
#include "EditListCtrl.h"
BEGIN_MESSAGE_MAP(CEditListCtrl, CListCtrl)
ON_WM_LBUTTONDBLCLK()
END_MESSAGE_MAP()
//--------------------------------------------------------------------------------
void CEditListCtrl::OnLButtonDblClk( UINT nFlags,CPoint point )
{
... // это НЕ работает
Dialog.cpp:
void Clc1Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, (CWnd&)MyListCtrl);
}
//--------------------------------------------------------------------------------
BOOL Clc1Dlg::OnInitDialog()
{
MyListCtrl->SubclassDlgItem(IDC_LIST1,this);
CDialog::OnInitDialog();
CenterWindow();
...
Так не поддерживает MFC множественное наследование, соответственно и заточка граблей в каждом случае строго индивидуальна.