请教关于树控件CTreeCtrl的参数的一个小问题

时间:2021-12-23 17:36:01
双击CTreeCtrl的时候,有如下这个双击事件:

void CTestDlg::OnDblclkTree1(NMHDR* pNMHDR, LRESULT* pResult) 
{
// TODO: Add your control notification handler code here
*pResult = 0;
}

请教pNMHDR,pResult这两个参数有什么作用呢?例如我想得到刚才双击的是哪列表中的哪一项,可以由这两个参数得到而不是通过GetSelectedItem()可以吗?

5 个解决方案

#1


up

#2


参数pNMHDR指向NMHDR及其扩充结构,里面包含着消息相关的内容,GetSelectedItem()的功能也可以通过它来得到!参数result指向一个处理结果!

下面的内容是复制的,希望你能看懂!

较之传统的Windows 3.x控件,新的Win32控件更加复杂和先进.在新控件发送通知消息的同时,往往还需要附加一些数据来描述控件的状态.传统的WM_COMMAND消息通知机制显然不能完成这一任务,因为WM_COMMAND消息的wParam和lParam已经被占满了,无法容纳新的数据.所以在Win32中,采用新的WM_NOTIFY消息来实现新控件的消息通知机制.在该消息的wParam中含有控件的ID,lParam中则有一个指针,这个指针指向一个结构.这个结构要么是NMHDR结构,要么是一个以NMHDR结构作为第一个成员的扩充结构.通过NMHDR结构及其扩充结构可以传递附加数据.从理论上讲,可以通过扩充结构传送任意多的数据.需要指出的是,由于NMHDR结构是扩充结构的第一个成员,因此lParam中的指针即可以认为是指向NMHDR结构的,也可以认为指向包含NMHDR结构的扩充结构的.
NMHDR结构如下所示:

typedef struct tagNMHDR {

HWND hwndFrom; //控件窗口的句柄

UINT idFrom; //控件的ID

UINT code; //控件的通知消息码

} NMHDR;

一个典型的扩充结构如下所示,该结构用于列表视图控件的LVN_KEYDOWN通知消息.

typedef struct tagLV_KEYDOWN {

NMHDR hdr; //NMHDR结构作为第一个成员

WORD wVKey; 

UINT flags; 

} LV_KEYDOWN;


#3


你看NMHDR里面是不是包含了wParam和lParam,所以比以前的好使

#4


LPNMTREEVIEW pItem = (LPNMTREEVIEW)pNMHDR
pItem->itemOld->hItem就被选中的项的句柄,用GetSelectedItem也可以

#5


你只要通过它得到了itme的句柄就好用了.

#1


up

#2


参数pNMHDR指向NMHDR及其扩充结构,里面包含着消息相关的内容,GetSelectedItem()的功能也可以通过它来得到!参数result指向一个处理结果!

下面的内容是复制的,希望你能看懂!

较之传统的Windows 3.x控件,新的Win32控件更加复杂和先进.在新控件发送通知消息的同时,往往还需要附加一些数据来描述控件的状态.传统的WM_COMMAND消息通知机制显然不能完成这一任务,因为WM_COMMAND消息的wParam和lParam已经被占满了,无法容纳新的数据.所以在Win32中,采用新的WM_NOTIFY消息来实现新控件的消息通知机制.在该消息的wParam中含有控件的ID,lParam中则有一个指针,这个指针指向一个结构.这个结构要么是NMHDR结构,要么是一个以NMHDR结构作为第一个成员的扩充结构.通过NMHDR结构及其扩充结构可以传递附加数据.从理论上讲,可以通过扩充结构传送任意多的数据.需要指出的是,由于NMHDR结构是扩充结构的第一个成员,因此lParam中的指针即可以认为是指向NMHDR结构的,也可以认为指向包含NMHDR结构的扩充结构的.
NMHDR结构如下所示:

typedef struct tagNMHDR {

HWND hwndFrom; //控件窗口的句柄

UINT idFrom; //控件的ID

UINT code; //控件的通知消息码

} NMHDR;

一个典型的扩充结构如下所示,该结构用于列表视图控件的LVN_KEYDOWN通知消息.

typedef struct tagLV_KEYDOWN {

NMHDR hdr; //NMHDR结构作为第一个成员

WORD wVKey; 

UINT flags; 

} LV_KEYDOWN;


#3


你看NMHDR里面是不是包含了wParam和lParam,所以比以前的好使

#4


LPNMTREEVIEW pItem = (LPNMTREEVIEW)pNMHDR
pItem->itemOld->hItem就被选中的项的句柄,用GetSelectedItem也可以

#5


你只要通过它得到了itme的句柄就好用了.