刚学vc,请教个基础问题,子窗体怎么返回值给主窗体? 有关2个窗口传值的。我在主窗体用 dlg.DoModal(); 打开了一个子窗体在子窗体里有个CEdit的控件a 和一个btn,按btn 将a的值返回给主窗体的另一个CEdit控件b里面,怎么做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 假如点dlg1上的按钮,出现dlg2,dlg2上有个Edit框,给dlg2的Edit框添加变量CString m_strData; dlg2出来后,往Edit框里输入字符,输入好以后,点确定那么,dlg1上的按钮的代码是:CMydlg2 dlg2;CString str;if(dlg2.DoModal() == IDOK){str = dlg2.m_strData;} 其实这就是个类的操作,理解了类的生存周期就明白了,Dialog执行DoModal(),你点确定或者取消后,对话框消失了。但是对话框类对象并没有析构。获取一个类的成员变量的值你因该明白怎么做吧? 哦,谢谢诸位,我刚开始学,啥也不懂不过,要求不用默认的ok键。就是自己写个函数/////////////////////////////////////////////////////////////////////////////// CSendDlg message handlers // 这个是要弹出的子窗口 ,激活这个函数 要关闭窗口返回 主窗口并且把// IDC_CEDIT_MSG的值传回去void CSendDlg::OnCbuttonSend() { // TODO: Add your control notification handler code here CString y; GetDlgItem(IDC_CEDIT_MSG)->GetWindowText(y);}那应该怎么返回呢// 这个是主窗口调出子窗口的函数void CSettingDlg::OnCbuttonSetting() { // TODO: Add your control notification handler code here CSendDlg dlg; CString if(dlg2.DoModal() == IDOK) { str = dlg2.m_strData; GetDlgItem(IDC_CEDIT_USERNAME)->SetWindowText(str); }}这样么?IDOK应该用什么代替? 不用也可以,在你的按钮触发事件函数最后调用UpdateData(FALSE)就可以了 IDC_CEDIT_MSG 绑定成一个CString m_tx;void CSendDlg::OnCbuttonSend() {UpdateData();CDialog::OnOK();}void CSettingDlg::OnCbuttonSetting() { CSendDlg dlg; CString str; if(dlg2.DoModal() == IDOK) { str = dlg2.m_tx; }}这样就行了` yeah?真的好用爱,太感谢了! dlg.DoModal();不是写在主窗口么直接用dlg对象调用子窗口成员就可以了呀 这样么?IDOK应该用什么代替?========================================你的意思是说你不想用默认的按钮,而自己做了个按钮,这些当然可以,根本不要改上面的IDOK的,对你加的按钮处理函数最后加一句:CDialog::OnOk();即可,它返回的还是IDOK 鼠标移动导致InvalidateRect产生的PAINT被忽略 关于new和malloc的问题 如何把一个类放入DLL中并导入它?? 如何彻底的闪出一个类。 如何在vc中链接bcb产生的dll 如何取出放在CDBVariant 里的布尔类型的值? 求高手解答 有人开发过股票分析软件吗? dao 程序如何打包 在别的机器上运行` 急急急!! CJ609中视图切换的问题 ADO如何捕捉Update,delete的错误呢 工作两年,想回去考研然后找一个稳定的工作,大家给点建议?
CMydlg2 dlg2;
CString str;if(dlg2.DoModal() == IDOK)
{
str = dlg2.m_strData;
}
/////////////////////////////////////////////////////////////////////////////
// CSendDlg message handlers
// 这个是要弹出的子窗口 ,激活这个函数 要关闭窗口返回 主窗口并且把
// IDC_CEDIT_MSG的值传回去
void CSendDlg::OnCbuttonSend()
{ // TODO: Add your control notification handler code here
CString y;
GetDlgItem(IDC_CEDIT_MSG)->GetWindowText(y);}
那应该怎么返回呢// 这个是主窗口调出子窗口的函数
void CSettingDlg::OnCbuttonSetting()
{ // TODO: Add your control notification handler code here
CSendDlg dlg;
CString
if(dlg2.DoModal() == IDOK)
{
str = dlg2.m_strData;
GetDlgItem(IDC_CEDIT_USERNAME)->SetWindowText(str);
}
}这样么?IDOK应该用什么代替?
void CSendDlg::OnCbuttonSend()
{
UpdateData();
CDialog::OnOK();
}
void CSettingDlg::OnCbuttonSetting()
{
CSendDlg dlg;
CString str;
if(dlg2.DoModal() == IDOK)
{
str = dlg2.m_tx;
}
}
这样就行了`
========================================
你的意思是说你不想用默认的按钮,而自己做了个按钮,这些当然可以,根本不要改上面的IDOK的,对你加的按钮处理函数最后加一句:CDialog::OnOk();即可,它返回的还是IDOK