模式对话框2中放了一个List Control控件,并且设置了成员变量m_pListCtrl,现在在对话框1中调用2,怎样在DoModal()之前再对话框2中InsertItem();是在1中调用2之前给2赋值的,不是在2中InsertItem()的;请问该如何实现?还有一个问题就是List Control被设置成为带check box形式的,如果我选择了几项,如何通过单击一个按钮使它还原为未选择的状态?谢谢!!

解决方案 »

  1.   

    CMyDialog dlg2;
    dlg2.m_pListCtrl.InsertItem("AAA");
    dlg2.m_pListCtrl.InsertItem("BBB");
    dlg2.m_pListCtrl.InsertItem("CCC");
    dlg2.DoModal();
    不可以吗?
      

  2.   

    1.在DoModal()之前把listctrl需要InsertItem的值赋给对话框2的成员变量,在2的OnInitDialog中InsertItem2.
    m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);
    for(int i=0; i<m_list.GetItemCount(); i++)
    {
    if(m_list.GetCheck(i))
    {
    m_list.SetCheck(i, BST_UNCHECKED);
    }
    }
      

  3.   

    在对话框的初始化函数 OnInitialDlg( )中改变你的控件
      

  4.   

    TO:
    888atao(阿涛)
    你的方法我曾经也试过了,运行程序出错!
      

  5.   

    To:
    lixiaosan(小三) 
    在DoModal()之前把listctrl需要InsertItem的值赋给对话框2的成员变量,在2的OnInitDialog中InsertItem?
    我有点不明白,能在详细一点吗?(有点笨!)
      

  6.   

    m_pListCtrl是对话框2的私有成员,肯定不能用
    CMyDialog dlg2;
    dlg2.m_pListCtrl.InsertItem("AAA");
    dlg2.m_pListCtrl.InsertItem("BBB");
    dlg2.m_pListCtrl.InsertItem("CCC");
    dlg2.DoModal();你可以在dlg2中的init中改,也可以给Dlg2加一个public函数,在这个函数中改,在DoModal前调用这个函数
      

  7.   

    楼上和888atao(阿涛)的方法是绝对不行的,因为对话框此时还未初始化呢HWND为NULL怎么插入值呢,在CMyDiaog::OnInitDialog中实现.如果需要在对话框一和对话框二共享数据的话,可以考虑将对话框一的指针传给对话框二,必要时将对话框类一声明为对话框类二的友元(如果需要访问protected和private成员的话)
      

  8.   

    看看鹦鹉的文章
    http://dev.csdn.net/develop/article/28/28674.shtm
      

  9.   

    在对话框2中重载了InsertItem:
    int CMyDialog::InsertItem(int nItem, LPCTSTR lpszItem )
    {  
    i=nItem;
    m_str=lpszItem;
     
       return 1L;
       
    }
    初始化
    m_pListCtrl.InsertItem(i,m_str);
    然后再1中调用mydialog.InsertItem(0,"222");
    这样可以插入一条数值,但插入第二条的时候会把第一条覆盖,该如何处理呢?
      

  10.   

    mydialog.InsertItem(0,"222");
    你都用0当然都写第一条了
    看看msdnInsertItem的用法
      

  11.   

    我知道,如果这样的话
    mydialog.InsertItem(0,"222");
    mydialog.InsertItem(1,"333");
    还是只有"333"这一条,没有上一条了。。
      

  12.   

    不要妄图在模式对话框DoModal前,修改对话框中控件的任何内容!
    将你要修改的信息在DoModal前,先传递给对话框实例。比如你最终的目标是要将一个字符串显示到某个控件上,那么在对话框中定义一个字符串成员变量,然后这样:
    CMyDlg dlg;
    dlg.m_str = str;就将str传递到对话框的m_str中。
    然后在对话框的OnInitDialog函数中,将m_str显示到控件中才可以。
    如果需要传递其它方式的数据,都如上处理。
      

  13.   

    如果照你的说法,我想插两条信息,就必须在初始化的时候
    m_pListCtrl.InsertItem(i,m_str1);
    m_pListCtrl.InsertItem(i,m_str2);
    然后分别在DoModal之前给m_str1和m_str2赋值呢?
      

  14.   

    在对话框2没有显示前,你不能对其上面的控件直接进行操作。。这个道理很明显吧。。就像一个房间的门没有打开,你是不能偷吃房间里面的东西的。^_^给你一个例子吧。
    作用是在对话框2显示前,给对话框2传一个值,让值显示在对话框2的控件IDC_EDIT2中
    CDlg1::OnButton1()
    {
          CDlg2 dlg;
          dlg.m_str = "你好";
          dlg.DoModal();
    }//Dlg2.h
    public:
         CString m_str;
    //Dlg2.cpp
    CDlg2::OnInitDialog()
    {
        GetDlgItem(IDC_EDIT2)->SetWindowText(m_str);
    }
    根据这个思路,你应该知道怎么操作listctrl吧
      

  15.   

    那你就在2中定义一个
    CStringArray类对象来操作strArray
    你在2中根据strArray.GetSize()得到添加的个数,然后插入。在其他对话框domodal对话框2前
    dlg2.strArray.Add(str);
      

  16.   

    CDlg1::OnButton1()
    {
          CDlg2 dlg;
          dlg.strArray.Add("1");
          dlg.strArray.Add("2");
          dlg.DoModal();
    }//Dlg2.h
    public:
         CStringArray strArray;
    //Dlg2.cpp
    CDlg2::OnInitDialog()
    {
        GetDlgItem(IDC_EDIT2)->SetWindowText(strArray[0]);//显示1
        GetDlgItem(IDC_EDIT3)->SetWindowText(strArray[1]);//显示2
    }懂了不
      

  17.   

    忘了一点。。CDlg1::OnButton1()
    {
          CDlg2 dlg;
          dlg.strArray.RemoveAll();
          dlg.strArray.Add("1");
          dlg.strArray.Add("2");
          dlg.DoModal();
    }