我的树控件是这么继承的:
class CShellTree : public CTreeCtrl, public CShellPidl
我把它放在一个对话框中:
class CStep11 : public CFormView
当我在在树初始化成功,都已经显示了一些内容后,点击树上一个item,想展开树的时候,报错。
BOOL CShellTree::OnFolderSelected(NMHDR* pNMHDR, LRESULT* pResult, CString &szFolderPath) 
中执行GetSelectedItem()的时候就会出错。
我跟了一下,发现是m_hWnd的值是非法的。但是我直接用在对话框程序里是没事的,在formview中就会出错。请问应该怎么修改?

解决方案 »

  1.   

    你的Tree没有创建。你是不是在对话框用DDX方式使用的tree?在formview中,MFC不会自动subclasswindow的。你必须手动创建。
      

  2.   

    我已经创建了呀
    void CStep11::OnInitialUpdate() 
    {
    CFormView::OnInitialUpdate();
    m_step11_tree = (CShellTree*)GetDlgItem(IDC_TREE_PATH);
    m_step11_tree->EnableImages();
    m_step11_tree->PopulateTree();
    初始化结束后,界面都能显示出来。我显示的是本机硬盘盘符,也都成功了。我再点击盘符,想继续展开的时候,GetSelectedItem()出错。
      

  3.   

    是m_step11_tree->GetSelectedItem()出错么?
    你检查检查m_step11_tree的m_hWnd在初始化以后是对的么?
      

  4.   

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

    CString szPath;
    if(m_step11_tree->OnFolderSelected(pNMHDR,pResult,szPath))
    然后在类中执行:
    BOOL CShellTree::OnFolderSelected(NMHDR* pNMHDR, LRESULT* pResult, CString &szFolderPath) 
    {
    HTREEITEM hItem=NULL; if((hItem = GetSelectedItem()))
    这个时候就出错。我看调试信息。当执行m_step11_tree->OnFolderSelected(pNMHDR,pResult,szPath))的时候,m_step11_tree中的m_hWnd就已经不对了。