向CListBox发送一个LB_SETCURSEL消息改变选中项。
 
那么我在哪里(是不是CListBox的窗口过程函数里)接受到这个消息?
为什么我接受不到???

解决方案 »

  1.   

    子类化CListBox,在虚函数中DefWindowProc/WindowProc中拦截LB_SETCURSEL应该都是可以的
    LRESULT CNewListBox::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(LB_SETCURSEL == message)
    {
    AfxMessageBox(_T("HELLO"));
    }
    return CListBox::WindowProc(message, wParam, lParam);
    }
      

  2.   


    这个类是我自定义的派生自CListBox类的,我还要子类化吗??
      

  3.   

    CListBoxEx:public CListBox在CListBoxEx::WindProc(message,wParam ,lParam)
    {
    if(message == LB_SETCURSEL)
    {
    /////////////////////没有执行到》?????
    }
    }
      

  4.   

    LRESULT CListBoxEx::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(LB_SETCURSEL == message)
    {
    AfxMessageBox(_T("HELLO"));
    }
    return CListBox::WindowProc(message, wParam, lParam);
    }
    这个没有执行到??你的CListBoxEx对象关联了吗?
      

  5.   

    你只是定义了CListBoxEx,并没有把他与某个实际的控件关联起来,建议看看子类化的定义http://blog.csdn.net/yuntongsf/archive/2009/08/13/4443356.aspx
      

  6.   


    是动态创建的 调用Create/
      

  7.   


    怎么子类化?LRESULT CListBoxEx::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
    {
    // TODO: 在此添加专用代码和/或调用基类

    switch (message)
    {
     if(LB_SETCURSEL == message)
        {
            AfxMessageBox(_T("HELLO"));
        }
    case WM_LBUTTONDOWN:
      

  8.   

    不用子类化,直接在控件上点鼠标右键,选择"添加事件处理程序",再选择"LB_SELCHANGE".
      

  9.   

    LB_SETCURSEL能这个吗?  不是LBN_SELCHANGE 
      

  10.   

    用子类化,直接在控件上点鼠标右键,选择"添加事件处理程序",再选择"LB_SETCURSEL