我在工程中加入了一个静态的CTreeCtrl控件,并且添加了如下消息。 
  void   CTreeDlg::OnSelchangedTree(NMHDR*   pNMHDR,   LRESULT*   pResult)     
  {   
  (1)NM_TREEVIEW*   pNMTreeView   =   (NM_TREEVIEW*)pNMHDR;   
  //   TODO:   Add   your   control   notification   handler   code   here   
  (2)MessageBox("hello");   
                    *pResult   =   0;   
  }     void   CTreeDlg::OnSelchangvingTree(NMHDR*   pNMHDR,   LRESULT*   pResult)     
  {   
  (1)NM_TREEVIEW*   pNMTreeView   =   (NM_TREEVIEW*)pNMHDR;   
  //   TODO:   Add   your   control   notification   handler   code   here   
  (2)MessageBox("hello");   
                    *pResult   =   0;   
  }   
疑问:
1.上面两个函数传递进来的两个参数 NMHDR*   pNMHDR,   LRESULT*   pResult的作用是什么,包含了什么内容。
2. NM_TREEVIEW*   pNMTreeView   =   (NM_TREEVIEW*)pNMHDR;这样转换的作用是什么,把范围缩小了。
3. 在函数中如何区分选择了那个子项。*****************
4. *pResult   =   0;这句代码的作用是什么?

解决方案 »

  1.   

    1、typedef struct tagNMHDR {
        HWND hwndFrom;
        UINT_PTR idFrom;
        UINT code;
    } NMHDR;3、HTREEITEM hCurItem=m_TreeCtrl.GetSelectedItem(); 
    其他问题我也不是很明了。帮你顶
      

  2.   

    很多通知消息都统一成这样了,pNMHDR是传进来的参数,比如很多控件都可以发送NM_CUSTOMDRAW消息,ListCtrl,ToolBar等等,你根据自己的类把pNMHDR转换成不同的结构,pResult相当于一个返回值,也是视不同情况赋值的。
      

  3.   

    NMHDR*  pNMHDR, 包含了tree节点的一些相关信息,转化一下个人感觉只是为了方便取其中的item等信息。LRESULT*  pResult=0 返回值,可以代表你对该消息的处理结果,=0貌似是处理了,=1没有处理,
      

  4.   


    typedef struct tagNMHDR{
       HWND hwdnFrom;
       UNIT idFrom;
       UNIT code;
    }
    没有item的信息啊?