我为了练习ClistBox,特地作了简单的程序。左键单击,弹出一个对话框,里面有一个ListBox。 void CTryListBoxView::OnLButtonDown(UINT nFlags, CPoint point) 
{

LBD d;  //LBD为对话框类

(d.lb).AddString("dfdf");    //为什么把这行拿掉就能正常显示??
d.DoModal();

CView::OnLButtonDown(nFlags, point);
}
LBD::LBD(CWnd* pParent /*=NULL*/)   //LBD对话框类的构造函数。
: CDialog(LBD::IDD, pParent)
{
//{{AFX_DATA_INIT(LBD)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT

         CRect rect(17,16,85,126);    
lb.Create(WS_CHILD|WS_VISIBLE|LBS_STANDARD,rect,this,IDC_LIST1); //lb为LBD对话框类的一个ClistBox public成员。
}
很简单,但就是出错。把AddSting拿掉就可以正常显示对话框了。谁知道为啥??? 详细说说。

解决方案 »

  1.   

    d.DoModal()之前其实d并没有把对话框创建出来,所以对它上面的控件操作都没有用。
      

  2.   

    d.DoModal()之前其实d并没有把对话框创建出来,所以对它上面的控件操作都没有用。________________________________________________已经创建了。 LBD d;就是了,LBD类已经通过ClassWizard与相应的Dialog资源联系了。
      

  3.   

    对话框都没有创建出来,怎么能访问它上面的控件呢,先创建对话框吧
    ……………………………………………………………………已经创建了。 LBD d;就是了,LBD类已经通过ClassWizard与相应的Dialog资源联系了。 您可以用代码说详细些呀。。谢了。
      

  4.   

    那你看看它的m_hWnd是什么?…………………………………………………………enum { IDD = IDD_DIALOG1 };  对啊。
      

  5.   

    不是!
    是d.m_hWnd。窗口句柄都没有,窗口当然没创建。
    其实是在DoModal()里创建的。
      

  6.   

    不是!
    是d.m_hWnd。窗口句柄都没有,窗口当然没创建。
    其实是在DoModal()里创建的。---------------如果去掉AddString就可以显示对话框,这个没问题。但是加上AddString那行就出问题。
      

  7.   

    .DoModal()之前其实d并没有把对话框创建出来,所以对它上面的控件操作都没有用窗口句柄都没有,一个窗口要是被创建的话,windows一定会给它一个句柄的(m_hWnd),是d.m_hWnd没有,窗口当然没创建。
    其实是在DoModal()里创建的。