GetDlgItem() 有以下原型:CWnd::GetDlgItem  CWnd* GetDlgItem( int nID ) const;
void CWnd::GetDlgItem( int nID, HWND* phWnd ) const;但是看不明白:窗口指针CWnd*  与 窗口句柄HWND*  有什么分别?

解决方案 »

  1.   

    美个窗口都有一个32位的标识服就是HWND类型大,CWnd类型我不知道是什么东西啦嘿嘿嘿就是一个累呀哈哈,,我瞎说的,高人快舅命呀
      

  2.   

    CWnd是封装了HWND。
    CWnd* pDlg=GetDlgItem(IDC_XX);
    一般检查一下pDlg是否为空,尽量不要直接使用。
    比如:GetDlgItem(IDC_XX)->SetWinWindowText("text")是不安全的。
      

  3.   

    CWnd* 和 HWND 差别很大HWND 是 SDK 定义的类型, 是一个无确切意义的 32-bit 值,在调用 API 时用于指代窗体。CWnd* 是一个有确切意义的指针,指向一个 MFC 窗体类 CWnd 的实例。因为 MFC 对 SDK 做了封装,大部分调用都可以用 CWnd* 作为参数,所以很容易混淆。从一个 CWnd* 获取句柄的方法是 pWnd->GetSafeHwnd(), 他比 pWnd->m_hWnd 安全,因为前者在 pWnd == NULL 的时候返回 NULL 而后者出现 access violation从 hWnd 转换到 CWnd * 一个可以使用的方法是 CWnd::FromHandle
    CWnd *pTempWnd = CWnd::FromHandle(hWnd); // 如果 hWnd 存在对应的 CWnd* ,则返回其指针,否则,创建一个 MFC 临时窗体并返回其指针。
    注意这个函数会返回临时窗体的指针,如果需要更安全,调用 CWnd::FromHandlePermanent ,他在不存在对应的 CWnd* 时返回 NULL。
      

  4.   


    Thank you  In355Hz(好象一条狗),我还有另一个问题:         我在 自制的 ActiveX 里 想获得ActiveX控件容器的其它常规控件的指针;如编辑框(IDC_EDIT1),从而操纵这些控件的行为。用GetDlgItem(IDC_XX)时老出现错误……我是 在ActiveX控件类的内部调用GetDlgItem(IDC_XX),想得到控件外面的其它常规控件指针,这个想法有错吗?还是要先获得父窗口的指针,再去调用GetDlgItem(IDC_XX)呢?
      

  5.   

    先要得到控件的父窗口的指针,再用这个指针来调用GetDlgItem
      

  6.   


    To: webber84(***闭关修炼中***)   那怎样得到 控件的父窗口的指针 急切想知道样板!
      我用过:GetParent,GetOwner,GetParentOwner,FindWindow
             结果只有GetParentOwner可以通过编译,但只是得到了最顶层的窗口的指针,我想要的是上一级窗口的指针?!?!?!?!?!
      

  7.   

    用GetParent会能不过编译?你怎么用的啊?
      

  8.   

    void CCtrltest1Ctrl::testadd() 
    {
    AfxMessageBox("You are in Event - addtest ");
    CWnd* pwnd=GetParentOwner();//这个是成功了,但不合要求,是顶层窗口指针
    //CWnd* pwnd=GetOwner();//以下不知得到的是什么指针,编译器说不是一个window
             //CWnd* pwnd=GetParent();
    //CWnd* qwnd=pwnd->GetDlgItem(IDC_EDIT1);
    //(pwnd->GetDlgItem(IDC_EDIT1))->EnableWindow(FALSE);
    CString cs;
    pwnd->GetWindowText(cs);
    AfxMessageBox(cs);
    //pwnd->EnableWindow(FALSE);
    //pwnd->GetDlgItem(IDC_EDIT1);
    //qwnd->EnableWindow(FALSE);
    }
    如果还不够清楚我还可以解释