при множественном наследовании не обраб-ся все сообщ-я
От: verelex  
Дата: 23.12.09 14:57
Оценка:
Здравствуйте.
Почему при множественном наследовании не обрабатываются все сообщения и как это исправить?
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();
    ...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.