动态创建了一个CButton
把它放在Dialog窗口上的话,可以响应单击事件
可是把它放在CListCtrl中时,为什么就不能响应单击事件了呢?
        请高人指教!    xxxxx.h中的消息映射函数
protected:
//消息映射函数
afx_msg void OnMyCheckBox(); 
DECLARE_MESSAGE_MAP()    xxxxx.cpp中的消息映射函数
BEGIN_MESSAGE_MAP(CListControlCheckDlg, CDialog)
ON_BN_CLICKED(IDC_CHECK_BOX, OnMyCheckBox) 
END_MESSAGE_MAP() //创建动态按钮
CRect rect;
m_listCtrl.GetClientRect(&rect);
    
CButton* m_checkbox = new CButton();
m_checkbox->Create(_T(""),WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX,
        CRect(rect.left,rect.top+20,rect.left+12,rect.top+30), 
        &m_listCtrl, IDC_CHECK_BOX);
m_checkbox->ShowWindow(SW_SHOWNORMAL);

解决方案 »

  1.   

    如果放在CListCtrl上的话那个消息就发到CListCtrl上了,窗口是收不到的~~你可以自己重做一个CListCtrl类来处理这个消息~~
      

  2.   

    不是吧
    还要自已重写CListCtrl?
      

  3.   

    继承CListCtrl  响应相对的消息就行了
      

  4.   

    继承CListCtrl后,响应那个消息呢?
    我对不消息响映这一块不太懂,请高手多指教啊
      

  5.   

    PreTranslateMessage
    上网查一下这个函数,对你感兴趣的消息处理就行了~~~
      

  6.   

    控件事件是发给其父控件的,在这里按钮事件就是发给ListCtrl了。通常的做法是自己派生一个CListCtrl类来用,在CListCtrl类里面创建按钮,然后重载CListCtrl类的WindowProc函数,判断WM_COMMAND消息BN_CLICKED事件。另外,也可以用SetWindowLong重设ListCtrl的WindowProc函数,或者用SetWindowHookEx来处理。
      

  7.   

    可以再把消息从ListCtrl传给Dialog嘛
      

  8.   

    CButton放在Dialog窗口上的话,它的单击消息发送给了Dialog
    而你把它放在CListCtrl中时,消息自然也就发给了CListCtrl