this->Getparent()->GetDlgItem(控件ID);这条语句所在的窗口和我想得到的控件属于同一个父窗口,所以用这种方式,但是我发现凡是用这种方式得到的指针的m_hWnd都为NULL,但指针都不是NULL,所以就不能用控件.Attach(m_hWnd);只有把这个指针转换为相应控件的指针才能操作该控件;不知为什么为NULL???

解决方案 »

  1.   

    Getparent() 保存的父窗口句柄不对
      

  2.   

    Getparent() 保存的父窗口句柄不对???/
    不解!!!
      

  3.   

    GetDlgItem(控件ID) 得到的是一个 临时窗口指针(CTempWnd), 要操作控件直接 强制到控件指针即可. 这个临时窗口是比较特殊的MFC对象. 一般不能保存下来的.但是可以操作
      

  4.   

    同意楼上的,得到的是一个临时的c++对象,不能保持为以后使用.如果要得到持久的对象,可以用这个GetDescendantWindow函数,或者得到handle再来转换!
      

  5.   

    1:this指的是一个控件,是我派生的
    2:只有这一种情况m_hWnd为NULL:this->Getparent()->GetDlgItem(控件ID);但是当我直接在其父窗口获取如:
    GetDlgItem(控件ID);,则m_hWnd不为NULL,可以用控件.Attach(m_hWnd);
      

  6.   

    在对话框类里这样写:  ControlWnd.Attach(m_hWnd); 楼主不要Attach的是对话框的句柄吧??
      

  7.   

    1.这里和临时不临时没直接关系,可以这样使用.
    2.只有这一种情况m_hWnd为NULL:this->Getparent()->GetDlgItem(控件ID);
    有一种情况就是你使用这个函数的时候主窗口还没有初始化完成,此时m_hWnd为NULL.
      

  8.   

    我还是说详细点,我的这条语句是写在一个控件派生类里面的,而想得到的控件是没有作任何改动,这个控件和想得到的那个控件是属于同一个父窗口;各位你们可以自己试试,还要说明的是我这个控件派生不是直接Create,而是先加入了个控件,然后再派生的,不知和这个有没有关系?