创建了一个Dialog  内有一个button  IDC_BUTTON1
还有一个CListctrl mylist 
给mylist了一个 ON_BN_CLICKED(IDC_BUTTON1, &mylist::OnBnClickedButton1)消息 通过该消息触发mylist里的事件
void mylist::OnBnClickedButton1()
{
   AfxMessageBox(_T("HELLO"),0,MB_OK) ;//没有响应
}
但是如果消息是给mydialog的就可以正常响应
ON_BN_CLICKED(IDC_BUTTON1, &mydialog::OnBnClickedButton1)
void mydialog::OnBnClickedButton1()
{
   AfxMessageBox(_T("HELLO"),0,MB_OK) ;//OK
}请问是为什么?

解决方案 »

  1.   

    why don't u set a BreakPoint to debug it?
    otherwise paste your code here?
      

  2.   

    ON_BN_CLICKED(IDC_BUTTON1, &mylist::OnBnClickedButton1)
    ============================================================
    这么写居然能通过?!!
    你想让mylist有反映可以在OnBnClickedButton1里处理mylist
      

  3.   


    这不是我写的,是wizard添加的
      

  4.   

    有这么复杂的事情@@我以前也遇到过这种,但是我的情况是:ON_BN_CLICKED(IDC_BUTTON1, CListctrl::OnBnClickedButton1) 这样就解决了的,不知道楼主的可以这样搞不?
      

  5.   

    ON_BN_CLICKED(IDC_BUTTON1, &mydialog::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON1, &mylist::OnBnClickedButton1)注意你的mydialog是个类名,而mylist是个变量名
    为何第二个编译通过不得而知你重载CListCtrl在子类增加OnBnClickedButton1函数应该是没问题的,这里只需要一个函数地址
      

  6.   

    BEGIN_MESSAGE_MAP(Clistbox, CDialog)
    ON_BN_CLICKED(IDC_BUTTON1, &Clistbox::OnBnClickedButton1)
    END_MESSAGE_MAP()
      

  7.   

    列位
    我的mylist不是变量,是个继承于CListCtrl的类
    class mylist:public CListCtrl
    我没有直接在dialog里画一个ClistCtrl
    而是独立创建了一个mylist类 然后在dialog的OnInitDialog里通过
    mylist.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT,rectlist,this,IDC_LIST1);
    mylist.ShowWindow(SW_SHOW);
    来显示mylist的,rectlist是mylist在dialog中的位置
      

  8.   

    试试看:
    把mylist里面的message map 改成这样: ON_BN_CLICKED(IDC_BUTTON1, &mydialog::OnBnClickedButton1)让他把消息扔给mydialog类处理  :)
      

  9.   

    汗,你是不是要倒过来用的:把mydialog里面的message map 改成这样:ON_BN_CLICKED(IDC_BUTTON1, &mylist::OnBnClickedButton1)让他把消息扔给mylist类处理  :)
      

  10.   

    button  IDC_BUTTON1 的父窗口是mydialog,可以通过mydialog将消息转发给mylist 
      

  11.   

    这位大虾,我现在就是这么干的,但是觉得麻烦,难倒只有父窗口才能收到button的消息?
      

  12.   

    当然了. 每个消息循环都是在自己的window里, 父窗体的消息泵 你的listctrl不会接受到消息的, 
    你可以改改,  在上面的消息映射里改成在dlg里处理, 然后在dlg里调用pListctrl->SendMessage发送给listctrl.
      

  13.   

    BEGIN_MESSAGE_MAP(Clistbox, CDialog)-----------这里改成CxxxDialog
    ON_BN_CLICKED(IDC_BUTTON1, &Clistbox::OnBnClickedButton1)
    END_MESSAGE_MAP()
      

  14.   

    BEGIN_MESSAGE_MAP(CxxxDialog, CDialog)--------上面说的有歧义,应该这样
    ON_BN_CLICKED(IDC_BUTTON1, &Clistbox::OnBnClickedButton1)
    END_MESSAGE_MAP()
      

  15.   

    你为什么非要发给mylist呢。。
    你把mylist的OnBnClickedButton1函数要做的内容封装成比如说 fun()
    你就在dialog的OnBnClickedButton1里调用mylist的相应函数fun不行么..