//父窗口中有个 CListCtrl控件m_lstChan,我在CListCtrl控件中动态生成一个 CComboBox控件,指定其父窗口为m_lstChan
//在父窗口中响应不了ccomboBox控件的消息,
//但是指定mybtn的父窗口为this时可以响应.
mybtn = new CComboBox();
mybtn->Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWN|CBS_DROPDOWN|CBS_AUTOHSCROLL,rect,
               /*this*/(CWnd *)&m_lstChan,IDC_COMBO_TEMP);
不采用派生新类,还能有什么方法

解决方案 »

  1.   

    消息映射是没错,
    mybtn->Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWN|CBS_DROPDOWN|CBS_AUTOHSCROLL,rect,
                   this,IDC_COMBO_TEMP);
    这样是能成功响应的
    但是不是我想要的(mybtn成为了父窗口的直接子窗口)、
      

  2.   

    this是指CListCtrl还是指“父窗口”?
      

  3.   

    消息被ListCtrl接收到了,没有额外处理的话自然不会通知到父窗口。在不重载ListCtrl的情况下以ListCtrl作为父窗口到底有何意义?
      

  4.   

    如果不以ListCtrl为父窗口,创建出来的Combo box 会被listCtrl遮盖掉
      

  5.   

    提两种方法:
    1、SetWindowLong/SetWindowLongPtr重设m_lstChan的窗口函数,在新的窗口函数中响应,其它消息调用原窗口函数。
    2、SetWindowsHookEx,钩WH_CALLWNDPROC来响应。
      

  6.   

    要在“父窗口”处理,没错,你在“父窗口”处理啊。比如你的代码,就在m_lstChan这个“父窗口”处理,不是吗?
      

  7.   

    mybtn 是什么?你自己定义的按钮?
    而且,你的想法很新奇哦
      

  8.   

    自定义一个消息。子窗口发消息:   (父窗口指针)-〉postmessage();父窗口的.h文件添加 ::OnNotify(WPARAM wp,LPARAM lp);
    父窗口添加消息映射 ONMESSAGE(WM_YOUR_OWN_DEFINED_MESSAGE,OnNotify)父窗口响应消息: 父窗口::OnNotify(wp,lp)
    {
       .........
    }
      

  9.   

    有些消息是通知拥有者窗口的,你可以把ListCtrl设置成parent,把“父窗口”设置成它的owner试试
      

  10.   

    父窗口是指最顶层的窗口,m_lstChan是直接父窗口。