热情软件屋

 

如何在对话框打开之前访问其中的控件


编号: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回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio