class CCom : public CDialog其中有一IDC_EDIT控件而后:
void CMyDlg::OnRecvData()
{
CCom com;
com.DoModal();
com.SetDlgItemText(IDC_EDIT1,"asd");
}
我要它在执行OnRecvData时弹出一CCom型对话框并IDC_EDIT1中值设置为"asd";
但问题是为什么只能显示对话框,而IDC_EDIT控件中没显示“asd”呢??
void CMyDlg::OnRecvData()
{
CCom com;
com.DoModal();
com.SetDlgItemText(IDC_EDIT1,"asd");
}
我要它在执行OnRecvData时弹出一CCom型对话框并IDC_EDIT1中值设置为"asd";
但问题是为什么只能显示对话框,而IDC_EDIT控件中没显示“asd”呢??
解决方案 »
- 文本框SetSel不起作用
- 关于WM_TIMER消息函数应用问题
- USB设备查找的问题,使用SetupDiGetDeviceRegistryProperty在win2k下会陷入死循环
- 求16位灰度的Tiff图像格式读写资料!
- [请教]用VC如何来做windows service类程序
- IRichEditOle::ImportDataObject的奇怪问题
- 本人急求《深度探索C++对象模型》一书完整E版
- 关于网络编程???
- 有谁用ado和vfp(也就是对dbf表)结合编程?请教几个问题!!!特特急!
- 哪位老兄有《〈VISUAL C++ 实践与提高 数据库篇〉》的 源代码下载。
- 新手问题
- 2003的ddk支持vs6么
或改为GetDlgItem(IDC_EDIT1)->SetWindowText("asd");
如何com.SetDlgItemText(IDC_EDIT1,"asd");或com.GetDlgItem(IDC_EDIT1)->SetWindowText("asd");放到DoModal前面执行时都报错!真是搞不明白
放到前面:界面对象还没有创建(只是声明了对象),对界面的操作肯定出错。
放到后面:DoModal在界面退出后才返回,因此界面显示时,一直执行不到后面的语句。正确做法:用Create创建,然后ShowWindow,然后再调用那个函数。
而且不能在函数内部声明com,那样很快函数执行完退出,com也就销毁了。
对IDC_EDIT1映射一个字符串变量m_ed1,因为是私有的,令加在CCom中加函数:
void CCom::SetValue(CString str)
{
m_ed1 = str;
}调用时:
void CMyDlg::OnRecvData()
{
CCom com;
com.SetValue("asd");
com.DoModal();
}
这样DoModal时触发OnInitialDialog事件,会刷新。
放到前面:界面对象还没有创建(只是声明了对象),对界面的操作肯定出错。
放到后面:DoModal在界面退出后才返回,因此界面显示时,一直执行不到后面的语句。正确做法:用Create创建,然后ShowWindow,然后再调用那个函数。
而且不能在函数内部声明com,那样很快函数执行完退出,com也就销毁了。
--------------------------------------
顶这个
放到前面:界面对象还没有创建(只是声明了对象),对界面的操作肯定出错。
放到后面:DoModal在界面退出后才返回,因此界面显示时,一直执行不到后面的语句。
------------------------
同意把SetDlgItemText(IDC_EDIT1,"asd")这句放到CCom的OnInitDialog() 里。
void CMyDlg::OnRecvData()
{
CCom com;
com.SetValue("asd");
com.DoModal();
}
--------------------------------------------------------
我试了Ivy_zheng(最后一只恐龙)的第二个方法(定义一成员函数SetValue),可以
但为什么行呢??
我原先com.SetDlgItemText(IDC_EDIT1,"asd");不也是com的一个成员函数吗,为什么又不行呢?
void CMyDlg::OnRecvData() void CMyDlg::OnRecvData()
{ {
CCom com; CCom com;
//SetValueCComm类中的成员函数 //SetDlgItemText也是CCom类的成员函呀(继承的)
com.SetValue("asd"); com.SetDlgItemText(IDC_EDIT1,"asd");
com.DoModal(); com.DoModal();
} }
后者是窗体控件IDC_EDIT1,只有当DoModal后它才存在,
所以后者不行前者使用的映射,当DoModal中创建窗体时,会自动将m_ed1的值赋给IDC_EDIT1控件