我的控件ID是IDC_LIST_CONNECT使用WM_NOTIFY能够捕获控件的ID但是我想获取,选中列表的事件或者是按钮按下的消息LVN_KEYDOWN.
尝试了下WM_NOTIFY消息一直有,但是WPARAM发来的一直是控件IDIDC_LIST_CONNECT。那我想事LVN_KEYDOWN消息应该不是通过WPARAM传递的,就想应该用LPARAM传递的LPARAM传递结构是typedef struct tagNMHDR {
//发送消息的控件的句柄,相当于原WM_COMMAND消息的lParam
HWND hwndFrom;
//发送消息的控件的ID,相当于原WM_COMMAND消息的wParam(LOWORD)
UINT idFrom; 
//通知码,也就是发送的具体消息,相当于原WM_COMMAND消息的wParam(HIWORD)通知码
UINT code; 
} NMHDR;
测试了下 NMHDR* p = (NMHDR*)lParam;
unsigned int a = p->code;


if( a  == LVN_KEYDOWN )
{
EnableWindow( GetDlgItem( hDlg, IDOK ) ,TRUE );
}一直没有收到LVN_KEYDOWN 消息 ,有经验的朋友提示下,3Q

解决方案 »

  1.   

    Notify是发给父窗口,通知父窗口,子窗口发生了变化的。
    我刚才在我的CListCtrl子类里面试了半天也不行,后来才发现应该重载父窗口的OnNotify啊
      

  2.   

    你用的是MFC吗?我用的是win32,我自己尝试了下输出
     NMHDR* p = (NMHDR*)lParam;
     unsigned int a = p->code;p->code是有不同返回值的
    在我做KEYDOWN的时候,p->code返回的是0xfffffff0但是LVN_KEYDOWN 是0xffffff65,怀疑是不是win32下捕捉list control不是LVN_KEYDOWN这个消息啊,
    当疼,实在不行自己写个宏算了。。
                            
      

  3.   

    是用的MFC,因为有个CListCtrl的实验工程,就讲究用了,Win32下应该一样的。你确信你是在IDC_LIST_CONNECT的父窗口的窗口函数中处理的WM_NOTIFY消息?并且CreateWindow创建IDC_LIST_CONNECT时指定了父窗口的?
      

  4.   

    listcontrol不是自绘的,是直接拖上去的,现在我消息是能捕获到的,如果子父关系没确立,消息应该无法捕捉到的
      

  5.   

    WM_NOTIFY可能是任何控件发过来的啊,NMHDR的idFrom是IDC_LIST_CONNECT?
      

  6.   

    拖上去的,如果你是在对话框的窗口函数中处理,那么关系是对的。你在List-View里面加点数据,然后选中某一条,再来按键盘呢?
      

  7.   

    以前自己也习惯用mfc,或者wtl,现在喜欢上了看direct的例子,也想习惯下用win32写界面。找了下 在子窗体 Listcontrol中 鼠标左键的时候并没有触发LVN_KEYDOWN,
    触发了这个NM_RELEASEDCAPTURE消息,这个是释放鼠标按钮的消息,就是无论左键还是右键UP的时候触发。消息主要定义在commctrl.h中,//====== Generic WM_NOTIFY notification codes =================================
    NM_定义从这里开始。lvn_从这里开始
    #define LVN_ITEMCHANGING        (LVN_FIRST-0)。网上的资料介绍的比较少,mfc和win32触发的消息还是有略微的不同的。用到的朋友注意一下。
      

  8.   

    WM_NOTIFY可能是任何控件发过来的啊,NMHDR的idFrom是IDC_LIST_CONNECT恩,是的,多谢关注!!稍候结贴。
      

  9.   

     鼠标左键的时候并没有触发LVN_KEYDOWN这个是键盘消息,不是鼠标消息