如何在对话框打开之前访问其中的控件
编号:QA002740
建立日期: 2000年3月19日 最后修改日期:2000年3月19日
所属类别:
mitchzh:
操作系统: WINDOWS 98
编程工具: VC6.0
问题: 一个对话框内有一个CListCtrl控件,请问如何在对话框打开之前访问CListCtrl控件,我这样做却失败了(假设对话框为CMydialog,CListCtrl控件变量为m_ctrlList):
int nItem;
CMydialog a;
nItem =a.m_ctlList->InsertItem( 0, "Item A" );
a.m_ctlList->SetItemText( nItem, 1, "Subitem A1" );
a.m_ctlList->SetItemText( nItem, 2, "Subitem A2" );
a.DoModal();
这样做我想可能是找不到对话框a的句柄才会失败的,但是我用Create和ShowWindow函数还是不行:
int nItem;
CMydialog a;
a.Create(IDD_DIALOG1,this);
nItem =a.m_ctlList->InsertItem( 0, "Item A" );
a.m_ctlList->SetItemText( nItem, 1, "Subitem A1" );
a.m_ctlList->SetItemText( nItem, 2, "Subitem A2" );
a.ShowWindow(SW_SHOW);
对话框一闪而过,不能停止下来,请专家指点迷津,谢谢。
回答:
开发环境:
操作系统: WINDOWS 95
编程工具: VC5.0
我的回复:
你的思路不对,在调用DoModal()函数之前,对话框并没有创建,实际的创建工作必需是由DoModal()函数完成(Create()函数不能创建对话框)。其实CDialog类中有专门的函数用来在对话框显示之前初始化其中的数据,这个函数是OnInitDialog()。你可以用ClassWizard向你的对话类中加入这个函数(就是加入对WM_INITDIALOG窗口消息的处理函数),然后将你的初始化代码移到这个函数中。
以上的这种方法应该可以解决你的问题。
BTW:你的问题里有些代码令我困惑,m_ctlList变量是类目标呢还是类指针呢,从它的名称上看是类目标,但使用它时为什么用指针操作符而不用点操作符呢?
nItem =a.m_ctlList->InsertItem( 0, "Item A" );
也可能是你笔误,请见谅。
此问题由SZHANGWEI回答。
| |
|
|
| |
|
|