程序只差一点点了,难住我了??!! 模式对话框2中放了一个List Control控件,并且设置了成员变量m_pListCtrl,现在在对话框1中调用2,怎样在DoModal()之前再对话框2中InsertItem();是在1中调用2之前给2赋值的,不是在2中InsertItem()的;请问该如何实现?还有一个问题就是List Control被设置成为带check box形式的,如果我选择了几项,如何通过单击一个按钮使它还原为未选择的状态?谢谢!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CMyDialog dlg2;dlg2.m_pListCtrl.InsertItem("AAA");dlg2.m_pListCtrl.InsertItem("BBB");dlg2.m_pListCtrl.InsertItem("CCC");dlg2.DoModal();不可以吗? 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); } } 在对话框的初始化函数 OnInitialDlg( )中改变你的控件 TO:888atao(阿涛)你的方法我曾经也试过了,运行程序出错! To:lixiaosan(小三) 在DoModal()之前把listctrl需要InsertItem的值赋给对话框2的成员变量,在2的OnInitDialog中InsertItem?我有点不明白,能在详细一点吗?(有点笨!) 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前调用这个函数 楼上和888atao(阿涛)的方法是绝对不行的,因为对话框此时还未初始化呢HWND为NULL怎么插入值呢,在CMyDiaog::OnInitDialog中实现.如果需要在对话框一和对话框二共享数据的话,可以考虑将对话框一的指针传给对话框二,必要时将对话框类一声明为对话框类二的友元(如果需要访问protected和private成员的话) 看看鹦鹉的文章http://dev.csdn.net/develop/article/28/28674.shtm 在对话框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");这样可以插入一条数值,但插入第二条的时候会把第一条覆盖,该如何处理呢? mydialog.InsertItem(0,"222");你都用0当然都写第一条了看看msdnInsertItem的用法 我知道,如果这样的话mydialog.InsertItem(0,"222");mydialog.InsertItem(1,"333");还是只有"333"这一条,没有上一条了。。 不要妄图在模式对话框DoModal前,修改对话框中控件的任何内容!将你要修改的信息在DoModal前,先传递给对话框实例。比如你最终的目标是要将一个字符串显示到某个控件上,那么在对话框中定义一个字符串成员变量,然后这样:CMyDlg dlg;dlg.m_str = str;就将str传递到对话框的m_str中。然后在对话框的OnInitDialog函数中,将m_str显示到控件中才可以。如果需要传递其它方式的数据,都如上处理。 如果照你的说法,我想插两条信息,就必须在初始化的时候m_pListCtrl.InsertItem(i,m_str1);m_pListCtrl.InsertItem(i,m_str2);然后分别在DoModal之前给m_str1和m_str2赋值呢? 在对话框2没有显示前,你不能对其上面的控件直接进行操作。。这个道理很明显吧。。就像一个房间的门没有打开,你是不能偷吃房间里面的东西的。^_^给你一个例子吧。作用是在对话框2显示前,给对话框2传一个值,让值显示在对话框2的控件IDC_EDIT2中CDlg1::OnButton1(){ CDlg2 dlg; dlg.m_str = "你好"; dlg.DoModal();}//Dlg2.hpublic: CString m_str;//Dlg2.cppCDlg2::OnInitDialog(){ GetDlgItem(IDC_EDIT2)->SetWindowText(m_str);}根据这个思路,你应该知道怎么操作listctrl吧 那你就在2中定义一个CStringArray类对象来操作strArray你在2中根据strArray.GetSize()得到添加的个数,然后插入。在其他对话框domodal对话框2前dlg2.strArray.Add(str); CDlg1::OnButton1(){ CDlg2 dlg; dlg.strArray.Add("1"); dlg.strArray.Add("2"); dlg.DoModal();}//Dlg2.hpublic: CStringArray strArray;//Dlg2.cppCDlg2::OnInitDialog(){ GetDlgItem(IDC_EDIT2)->SetWindowText(strArray[0]);//显示1 GetDlgItem(IDC_EDIT3)->SetWindowText(strArray[1]);//显示2}懂了不 忘了一点。。CDlg1::OnButton1(){ CDlg2 dlg; dlg.strArray.RemoveAll(); dlg.strArray.Add("1"); dlg.strArray.Add("2"); dlg.DoModal();} 求助:ATL composit control中动态创建并且管理activex控件 USB audio device 在windows 2000下的显示区分 求一个WIN32下写的聊天程序 caption怎么改不了?? kevinhu接分了 呵呵 谢谢您的帮助 如何向另外一个程序发送某键按下的消息? 如何把一个已有数据实例化的父类,付给新的子类? CSocket问题,急!急! SDK编程,调用对话框时总是进入不了对话框消息处理程序? 求牛人指点一个OpenGL多线程使用中GDI对象泄漏的问题 没人理我?再问!! 谁有《vc++数字图像处理》的光盘啊!!!急
dlg2.m_pListCtrl.InsertItem("AAA");
dlg2.m_pListCtrl.InsertItem("BBB");
dlg2.m_pListCtrl.InsertItem("CCC");
dlg2.DoModal();
不可以吗?
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);
}
}
888atao(阿涛)
你的方法我曾经也试过了,运行程序出错!
lixiaosan(小三)
在DoModal()之前把listctrl需要InsertItem的值赋给对话框2的成员变量,在2的OnInitDialog中InsertItem?
我有点不明白,能在详细一点吗?(有点笨!)
CMyDialog dlg2;
dlg2.m_pListCtrl.InsertItem("AAA");
dlg2.m_pListCtrl.InsertItem("BBB");
dlg2.m_pListCtrl.InsertItem("CCC");
dlg2.DoModal();你可以在dlg2中的init中改,也可以给Dlg2加一个public函数,在这个函数中改,在DoModal前调用这个函数
http://dev.csdn.net/develop/article/28/28674.shtm
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");
这样可以插入一条数值,但插入第二条的时候会把第一条覆盖,该如何处理呢?
你都用0当然都写第一条了
看看msdnInsertItem的用法
mydialog.InsertItem(0,"222");
mydialog.InsertItem(1,"333");
还是只有"333"这一条,没有上一条了。。
将你要修改的信息在DoModal前,先传递给对话框实例。比如你最终的目标是要将一个字符串显示到某个控件上,那么在对话框中定义一个字符串成员变量,然后这样:
CMyDlg dlg;
dlg.m_str = str;就将str传递到对话框的m_str中。
然后在对话框的OnInitDialog函数中,将m_str显示到控件中才可以。
如果需要传递其它方式的数据,都如上处理。
m_pListCtrl.InsertItem(i,m_str1);
m_pListCtrl.InsertItem(i,m_str2);
然后分别在DoModal之前给m_str1和m_str2赋值呢?
作用是在对话框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吧
CStringArray类对象来操作strArray
你在2中根据strArray.GetSize()得到添加的个数,然后插入。在其他对话框domodal对话框2前
dlg2.strArray.Add(str);
{
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
}懂了不
{
CDlg2 dlg;
dlg.strArray.RemoveAll();
dlg.strArray.Add("1");
dlg.strArray.Add("2");
dlg.DoModal();
}