MSDN上说32bitwindows下面控件会发出Notify消息,16bit是COMMAND消息
但是我在一个Dialog里重载了OnNotify函数,确收不到控件的任何Notify消息
用Spy++也看不到,用OnCommand函数就能响应,真是奇怪,我是在2000下面编程。另外还有关于OnCommand函数的lParam参数的解释,MSDN说是发出消息的Control的
窗口句柄HWND,那么如何由这个句柄得到这个控件的指针,或者对象呢?谢谢各位大侠,感激不尽。

解决方案 »

  1.   

    比较老的控件,如控钮,都发送WM_COMMAND消息给父窗口作为通知消息。新的windows通用控件,如组合框,列表框才发送WM_NOTIFY作为通知消息。CWnd* pWnd=CWnd::FromHandle(hwnd);
      

  2.   

    1.不会呀!可能你的DLG没有发送WM_NOTIFY消息的控件!在你的Dlg上放一个CListCtrl控件试试!
    2.
      int id=GetDlgCtrlID((HWND)lParam));
      CWnd *pWnd=GetDlgItem(id);
      

  3.   

    1、组合框,列表框才发送WM_NOTIFY作为通知消息,按钮不会
    2、CWnd* pWnd=CWnd::FromHandle(hwnd);
       可以将句柄转化为指针
      

  4.   

    但是我用的是ComboBox,按说应该有Notify的吧?
      

  5.   

    OnNotify主要是用来接收一些新控件的消息的,如TreeCtrl,ListCtrl。
    如下面的消息:
    The NM_CLICK notification message notifies the parent window of a control that the user has clicked the left mouse button within the control. NM_CLICK is sent in the form of a WM_NOTIFY message. NM_CLICK 
    pnmh = (NMHDR FAR *) lParam;
    还有:
    The TVN_SELCHANGED notification message notifies a tree-view control’s parent window that the selection has changed from one item to another. This notification message is sent in the form of a WM_NOTIFY message. TVN_SELCHANGED 
    pnmtv = (NM_TREEVIEW FAR *) lParam 
    这些消息无法通过OnCommand获得,而OnCommand主要是用来接收一些老控件的消息的,如button、edit等等。
      

  6.   

    to 搂主,
      你收不到任何空间notify消息的原因,是你创建的控件时没指明具有NOTIFY 风格,你仔细检查一下程序,看看MSDN.
     OnCommand消息,据我所知只有按下BUTTON和相应菜单项被选中时才发送的,仅此而已。to webber84(糕鱼昏)兄:
     不知你说的老的控件具体指哪些控件,是否可以一一罗列。
      

  7.   

    比较老的控件,如控钮,都发送WM_COMMAND消息给父窗口作为通知消息。新的windows通用控件,如组合框,列表框才发送WM_NOTIFY作为通知消息
    仔细检查一下创建的控件时没指明具有NOTIFY 风格