产生一个基于对话框的程序,在该对话框中放了一列表控件,然后,新建了一个新类
CXXX:CSocket
{
void test();//函数
}
//想在该函数中得到列表控件中的内容,请看看我写的,但是运行是错误
void test()
{HWND hWnd;
CServer1Dlg dlg=new CServer1Dlg();//该类是对话框的类
   hWnd=dlg.m_ListCtrl.GetSafeHwnd();//dlg.GetSafeHwnd()也试过,不对
   CListCtrl* pListCtrl=(CListCtrl*)GetDlgItem(hWnd,IDC_LIST);
}
//----------------------------------------------------------------
现在想在新建的类中得到对话框的句柄我找不到什么办法,请帮忙!

解决方案 »

  1.   

    int m_ListCount=pListCtrl->GetItemCount();
    运行就错
      

  2.   

    我调试时,他告诉我hWnd=???
    我想是不是该句柄不对。
      

  3.   

    new出来的是指针,不是对象,
    所以,你应该
    void test()
    {HWND hWnd;
    CServer1Dlg* dlg=new CServer1Dlg(); //注意*号
    hWnd=dlg->m_ListCtrl.GetSafeHwnd(); //因为是对象指针,把.号改成->
    CListCtrl* pListCtrl=(CListCtrl*)GetDlgItem(hWnd,IDC_LIST);
    delete dlg; //和 new对应
    }
      

  4.   

    不要new
    new的是另外一个实例
    当然会报错
    CXXX:CSocket
    {
    void test();//函数
    public:
    CServer1Dlg dlg;//该类是对话框的类
    }
    //想在该函数中得到列表控件中的内容,请看看我写的,但是运行是错误
    void test()
    {   HWND hWnd;
       hWnd=dlg.m_ListCtrl.GetSafeHwnd();//dlg.GetSafeHwnd()也试过,不对
       CListCtrl* pListCtrl=(CListCtrl*)GetDlgItem(hWnd,IDC_LIST);
    }
    在CServer1Dlg中初始化CXXX时
    CXXX.dlg=this;
    应该可以了
      

  5.   

    你的做法是显示非模态对话框的方法,new之后需要create,你应该在
    CServer1Dlg dlg=new CServer1Dlg();//该类是对话框的类
    后面加上
    dlg->Create(ID);     /* ID表示CServer1Dlg类对应的对话框的ID */
      

  6.   

    CWnd专门有一组操纵对话框上控件的函数,其中的GetDlgItem()用来取得控件的CWnd指针。