当前是做了一个选项卡界面,有A页面和B页面,在A页面点击右键,出来菜单添加任务,弹出对话框,可以进行编辑。关闭对话框后需要将任务在B页面显示出来,B页面是个CListCtrl.一直到出现对话框进行编辑都实现了,可是总是在B页面InsertItem时出错,不知道是什么问题,望帮忙~

解决方案 »

  1.   

    页面A :historyPage 
    页面B:  scriptPagehisoryPage:
    ON_COMMAND(ID_NEW_TASK, OnNewTask)
    void historyPage::OnNewTask() 
    {
    // TODO: Add your command handler code here
    scriptPage m_script;
    int istat=m_MachineList.GetSelectionMark();
    CString pString =m_MachineList.GetItemText(istat,0);
    m_script.DisplayTask(pString);
    }
    scriptPage:
    void scriptPage::DisplayTask(CString pString){
    task taskDial; //task是一个对话框生成的类
    if(taskDial.DoModal()==IDOK){ 
                   taskList m_task; //taskList 是一个结构体
                     char username[15];
    strcpy(username,LPCTSTR(pString));
    strcpy(m_task.username,username);
                    taskVector.push_back(m_task);
    OnInitDialog();
    Invalidate();
    }BOOL scriptPage::OnInitDialog() 
    {
    CPropertyPage::OnInitDialog();
    m_listCtrl.DeleteAllItems();
            int index;
    for(index = 0;index<taskVector.size();index++){
    m_listCtrl.SetImageList(&m_taskImageList,LVSIL_NORMAL);
    // TODO: Add extra initialization here
    LV_ITEM lvi;
    lvi.mask = LVIF_TEXT | LVIF_IMAGE ; 
    lvi.iItem = index; 
    lvi.iSubItem = 0; 
    lvi.iImage = 0;
    lvi.pszText = taskVector[index].username;
    m_listCtrl.InsertItem(&lvi);

    } }
    我感觉问题应该出在在页面A里面不能新建页面B的对象,然后又调用这个新对象的成员函数,因为跟最开始程序加载的时候的页面B不是通一个页面了,所以想知道如何获得之前显示过了的页面B的指针或者句柄
      

  2.   

    貌似很恐怖的调用方法:scriptPage::DisplayTask中调用scriptPage::OnInitDialog!!
    你完全可以再重新给listctrl添加item,而不需要调用OnInitDialog,因为并不是只有在OnInitDialog里面才可以添加item的,它只是对listctrl的一个初始化而已。
    “想知道如何获得之前显示过了的页面B的指针或者句柄”,首先要知道B页面是怎么创建的?在哪里创建的?
      

  3.   

    两个问题:
    1. void historyPage::OnNewTask() 里面你明明又生成了一个scriptPage 对象m_script,注意此时的m_script并不是你的已经存在的并加入到选项卡里面的scriptPage ,因为你在生成选项卡的同时这个对象(B面对话框)已经存在,很显然选项卡的scriptPage 对象比m_script生成的早。所以,你即使对m_script有所操作,B面也不会变。2. void scriptPage::DisplayTask(CString pString)中你手动调用了OnInitDialog是个失败。OnInitDialog对话框生成时自动调用的,那时对话框还没显示出来,你现在既然B面已经存在并显示出来,再调用OnInitDialog就是多此一举。看你的意思应该在OnPaint()中InsertItem,然后invalidte()就可以了!
      

  4.   

    是啊,我也意识到你说的第一个问题,可是如果只在OnPaint()中InsertItem,然后invalidte(),那样第一个页面上选择了菜单进行对话框编辑后,第二个页面会自己会将Item插入到CListCtrl中么,怎么让他刷新页面啊
      

  5.   

    我现在是按照你说的OnPaint()中将Item插入到CListCtrl中,也确实是可以插入,但是他当时并不显示,将两个页面切换来切换去 也不显示出来,当我把一个QQ的聊天窗口在 scriptPage上拖动一下,然后再点击它就显示出来了。OnPaint()在每次视图被激活时触发,重新绘制(刷新)。怎么能让它当时就将内容显示啊