void CDepManDlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult) 
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
                // TODO: Add your control notification handler code here

*pResult = 0;
}先创建一个树控件 然后在classwizard中 选取TVN_SELCHANGED请问NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;这句语句是什么意思呢
为什么最后要*pResult = 0;呢
它是怎么运作的呢?谢谢

解决方案 »

  1.   

    或者说:
    OnSelchangedTree1这个函数实现的是什么功能呢?
      

  2.   

    OnSelchangedTree1 是一个处理 EN_SELCHANGE 通知的函数。当树控件当选中项发生改变已经,处理这个消息,可以实现一些特殊的功能。如,现在CTreeCtrl选中的是索引为0的项,当你单击索引为1的项时,就是SelectChange,然后你可以从 NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDRNM_TREEVIEW结构体的索引变量,就可以写出下面的代码,提示用户选中了哪一行。 int nCurrentSelIndex = pNMTreeView ->itemNew;
    CString strText;
    strText.Format(_T("用户点击了树中索引为%d的项", nCurrentSelIndex);
    MessageBox(strText....);
    不过建议还是处理TVN_SELCHANGED通知吧。
      

  3.   

    这种问题首先想到的就应该是MSDN
    http://msdn.microsoft.com/zh-cn/library/bb773544(en-us,VS.85).aspx
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    这是强制类型转换
    因为NMHDR是通知类消息比较通用的数据类型
    对于每一个特定控件转成对应的类型可以得到更丰富的信息*pResult = 0;是返回值
    按MSDN的说法它会被忽略
    所以这条语句没有实际意义