看MSDN是非常重要的,不过因为自己很懒,经常直接到网上找代码,所以没养成这个好习惯,这个程序是在一个Dialog中放了一个CListBox控件,我在Dialog的构造函数中进行了如下操作,m_nListBox.AddString(str),当然啦,得先将List跟m_nListBox绑定起来,m_nListBox是CListBox类型的,结果就一直报错,可能因为我是直接学习MFC又没怎么学好,在公司断网的情况下,就不知道怎么办了,问了我身边的高人,人家查了查MSDN直接告诉我,应该把这个处理放到OnInitDialog()中,为什么呢,我厚着脸皮不愿意看MSDN,嗯,高人很耐心的讲解了一番,事实上,当Dialog进行构造的时候,只是initialize variables,并没有实际的窗体和ListBox产生的
- construction
- create
- show
DoModal实际上把2,3和在一起了
Create实际上是窗体的注册啊,产生啊什么的
OnInitDialog is called after all the dialog controls are created and just before the dialog box is displayed
所以应该m_nListBox.AddString(str)放在OnInitDialog()中了,那么就重载一下OnInitDialog()就可以啦
但是一定要注意了,在override 虚函数OnInitDialog()时一定不能忘记CDialog::OnInitDialog();,调用父类的OnInitDialog()
下面这个MSDN里面的图也很能说明问题啊
本文介绍了在MFC中正确初始化对话框及其中的CListBox控件的方法。通过将控件的初始化操作放置在OnInitDialog()函数中,可以避免构造函数阶段因窗口尚未创建而引发的问题。
6043

被折叠的 条评论
为什么被折叠?



