我自定义一个继承自CListCtrl的类对listctrl控件进行自绘,玩的不亦乐乎。
但是突然想再加一个listctrl控件,就不知道怎么办了。
主要是继承的类里面一些函数,比如
DrawItem
MeasureItem
OnClick
OnKillFocus
怎么区分是对哪一个listctrl操作的?还是要再继承一个类出来?求教!继承控件

解决方案 »

  1.   

    你这还是一个控件,只有两个不同类型的控件才算两个控件。你可以这么做看看能不能满足你的要求:再继承CListCtrl这个类产生一个新类
      

  2.   

    “怎么区分是对哪一个listctrl操作的”
    int GetDlgCtrlID(
      HWND hwndCtl   // handle of control
    );
      

  3.   

    没用啊 ,后加的那个listctrl根本就不响应OnClick等
      

  4.   

    没用啊 ,后加的那个listctrl根本就不响应OnClick等
    NM_CLICK通知,第一个怎么加的,第二个就怎么加,消息映射加的对吗?ID号有效不?
      

  5.   

    后加的那个控件 必须是你 派生的类!在 派生类中用  GetDlgCtrlID 来区分是哪个 实例
      

  6.   

    没用啊 ,后加的那个listctrl根本就不响应OnClick等
    NM_CLICK通知,第一个怎么加的,第二个就怎么加,消息映射加的对吗?ID号有效不?
    第一个是这样:
    ON_NOTIFY_REFLECT(NM_CLICK,OnClick)afx_msg void OnClick(NMHDR* pNMHDR, LRESULT* pResult);没用关联ID
      

  7.   

    CMyListCtrl m_motion_list;
    是这样不,已经定义为我派生的类的实例了
      

  8.   

    贴下代码,大家帮我看看吧,只学点表层的东西真的不行
    我两个控件是在两个对话框里面的,CMyListCtrl是我继承的类
    第一个对话框类里面:CMyListCtrl m_listctrl;
    第二个对话框类:CMyListCtrl m_motion_list;
    CMyListCtrl类的定义里:
    protected:
    //{{AFX_MSG(CMyListCtrl)
    afx_msg void OnClick(NMHDR* pNMHDR, LRESULT* pResult); 
    afx_msg void OnSelchangecombobox();
    afx_msg void OnKillFocus();
    afx_msg void OnClickMotionList(NMHDR* pNMHDR, LRESULT* pResult);
    //}}AFX_MSG
    virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
    virtual void MeasureItem(LPMEASUREITEMSTRUCT lp);
    DECLARE_MESSAGE_MAP()
    .CPP里:
    BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
    //{{AFX_MSG_MAP(CMyListCtrl)
    ON_NOTIFY_REFLECT(NM_CLICK,OnClick)
    ON_CBN_SELCHANGE(IDC_COMBOXID,OnSelchangecombobox)
    ON_EN_KILLFOCUS(IDC_EDITID,OnKillFocus)
    ON_NOTIFY(NM_CLICK, IDC_MOTION_LIST, OnClickMotionList)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    然后就是一些具体的消息函数:
    void CMyListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
    void CMyListCtrl::OnClick(NMHDR* pNMHDR, LRESULT* pResult)
    .
    .
    .
      

  9.   

    在 派生类中用  GetDlgCtrlID 来区分是哪个 实例1. 2个 实例 ,都应该进入 CMyListCtrl
    进入没有?
    2. 2个 实例 区分得开不 ?
      

  10.   

    可以呀,一个类两个实例。不过两个对话框的功能就完全一样了,就算界面不同也白搭。MFC还是按照它的思维来吧,一个对话框一个类,除非两个对话框除了界面,功能完全一样
    ------------------------------------------------------AutoCSDN签名档------------------------------------------------------
      

  11.   

    第一个对话框类里面:CMyListCtrl m_listctrl;
    第二个对话框类:CMyListCtrl m_motion_list;
    是你自己 写的?不是 向导 产生的?
    有没有create ?
    看看你的代码。
      

  12.   

    没create ,我是拖了一个listctrl,然后自定义一个继承自clistctrl的类cmylistctrl,再定义一个与控件关联的cmylistctrl的对象,然后进行自绘什么的,这些都没有问题,
    问题是后面还需要在别的对话框用到listctrl控件,为了避免需要派生cmylistctrl2、cmylistctrl3...这样,我就在想能不能只用一个派生类就好,也就是打开哪个对话框就对哪个对话框上面的listctrl控件进行自绘、响应NM_CLICK等等对话框是模式对话框,相关代码都贴在上面了
      

  13.   

    "我是拖了一个listctrl,然后自定义一个继承自clistctrl的类cmylistctrl,"拖了一个listctrl 向导产生的 是 CListCtrl m_motion_list;
    你把 CListCtrl 改成 CMyListCtrl 就行了。不要 改别的。
      

  14.   

    第一个对话框类里面:CMyListCtrl m_listctrl;
    第二个对话框类:CMyListCtrl m_motion_list;你把 第一个对话框类里面:CMyListCtrl m_listctrl;改
    CListCtrl m_listctrl;看看。第二个对话框类:CMyListCtrl m_motion_list;
    起不起作用。
      

  15.   

    同时定义CMyListCtrl m_Ctrl1;
    CMyListCtrl  m_ctrl2;
    分别操作两个变量。这样不行吗?