请教:想在在主对话框的按扭事件里添加如下代码, 以便给CSubDialog对话框上的cListCtrl控件增加一行字符串"aaaaa".可执行到InsertItem()句时,程序报异常错误.代码如下: CSubDialog *p=(CSubDialog *)GetDlgItem(IDD_SUBDIALOG);
p->m_cListCtrl.InsertItem(0, "aaaaa");//执行到此句后,报异常 其中:CSubDialog的创建过程为: CSubDialog *pDlg=new CSubDialog;
pDlg->Create(IDD_SUBDIALOG, NULL);
pDlg->MoveWindow(3, 100, 860, 488);
pDlg->ShowWindow(SW_SHOW); CSubDialog风格设置为Child 请高手指点, 谢谢!
p->m_cListCtrl.InsertItem(0, "aaaaa");//执行到此句后,报异常 其中:CSubDialog的创建过程为: CSubDialog *pDlg=new CSubDialog;
pDlg->Create(IDD_SUBDIALOG, NULL);
pDlg->MoveWindow(3, 100, 860, 488);
pDlg->ShowWindow(SW_SHOW); CSubDialog风格设置为Child 请高手指点, 谢谢!
p->m_cListCtrl.InsertItem(0, "aaaaa");//执行到此句后,报异常
不异常才怪,你的*p指的肯定是空。
应该 CSubDialog *pDlg=new CSubDialog;
pDlg->Create(IDD_SUBDIALOG, NULL);
pDlg->MoveWindow(3, 100, 860, 488);
pDlg->ShowWindow(SW_SHOW); pDlg->m_cListCtrl.InsertItem(0, "aaaaa");/
传递给GetDlgItem的参数是想获取的控件的ID;
但是如果想获取的是子窗口的话,那传递的就不是你上面写的对话框摸板的资源ID了!
而是这个子窗口的标识ID
你可以这样指定!CSubDialog *pDlg=new CSubDialog;
pDlg->Create(IDD_SUBDIALOG, NULL);
pDlg->MoveWindow(3, 100, 860, 488);
pDlg->ShowWindow(SW_SHOW);
::SetWindowLong(pDlg->m_hWnd, GWL_ID, 888); //这里随便写了个数字888然后在再用888这个id来获取子窗口的对象指针或者句柄
CSubDialog *p=(CSubDialog *)GetDlgItem(888); //把IDD_SUBDIALOG换为888
p->m_cListCtrl.InsertItem(0, "aaaaa");//这样就OK了直接用全局变量或者类的成员变量保存创建的子窗口的对象指针也可以,更方便!
CSubDialog *pDlg;//在主对话框里创建指向CSubDialog的全局指针变量 //在主对话框的INIT函数里创建载有CListCtrl控件的子对话框
pDlg=new CSubDialog;
pDlg->Create(IDD_SUBDIALOG, NULL);
pDlg->MoveWindow(3, 100, 860, 488);
pDlg->ShowWindow(SW_HIDE);
::SetWindowLong(pDlg->m_hWnd, GWL_ID, 888);
//在主对话框的按纽事件里给子对话框上的CListCtrl控件里增加字符串
pDlg=(CSubDialog *)GetDlgItem(888);
pDlg->m_cListCtrl.InsertItem(0, "aaaaa");//执行到此句后,报异常
那就无须这两句代码了!
::SetWindowLong(pDlg->m_hWnd, GWL_ID, 888);
//在主对话框的按纽事件里给子对话框上的CListCtrl控件里增加字符串
pDlg=(CSubDialog *)GetDlgItem(888); 这两句是为了不使用全局变量而用的,如果使用全局变量!
直接用就可以了pDlg->m_cListCtrl.InsertItem(0, "aaaaa");