当前是做了一个选项卡界面,有A页面和B页面,在A页面点击右键,出来菜单添加任务,弹出对话框,可以进行编辑。关闭对话框后需要将任务在B页面显示出来,B页面是个CListCtrl.一直到出现对话框进行编辑都实现了,可是总是在B页面InsertItem时出错,不知道是什么问题,望帮忙~
解决方案 »
- 结构指针赋值中断
- 如何在线程中实现精度为1毫秒的延时,且不占用CPU
- 100分求助, VC中如何调用OUTLOOK中的日历功能? 请给个例子.
- help!控件的使用,请大虾帮忙!
- MFC中的有关画图的问题
- 有关Video Capture的问题,大家进来看看,散分了!!!!!!!!!!!!!!!
- 一个关于IT行业的问卷调查,做完后赠送视频捕获源代码一份
- 小弟初学网路编程,遇到一个问题!已经导致我严重失眠好几个月了!遂求指导!
- 朋友们帮我用c(turboc2)语言编一个小程序?
- VC6 数据库编程,紧急求助大侠?
- edit control 的字体大小没有效果?
- 类似如QQ的聊天消息窗口(Dialog),我想换成View视图该怎么去实现?
页面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的指针或者句柄
你完全可以再重新给listctrl添加item,而不需要调用OnInitDialog,因为并不是只有在OnInitDialog里面才可以添加item的,它只是对listctrl的一个初始化而已。
“想知道如何获得之前显示过了的页面B的指针或者句柄”,首先要知道B页面是怎么创建的?在哪里创建的?
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()就可以了!