visual c++ 中 怎样把子窗口传值到父窗口?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了visual c++ 中 怎样把子窗口传值到父窗口?相关的知识,希望对你有一定的参考价值。

一个很简单的实现:就是子对话向父对话框传递值,然后显示出来。
比如,主窗口中CWindowA 里面的成员变量m_gongzilevel
点击设置,弹出对话框B(B中有很多项,工资啊,级别等)
子窗口有CWindowB 里面有编辑框CComboBox m_level(输入或者选择工资水平)
点击B窗口中的确定后,A窗口中显示B中传回来的数值。
回答者用实例代码,不要说粗略的方法,我刚刚入门,多谢了。

CWindowA::function()

CWindowB dlg;
if(dlg.DoModal()==IDOK)

this->m_gongzilevel = dlg.m_gongzilevel; //最好给B窗口中的控件弄一些CString的变量,
//这里dlg.m_gongzilevel是一个CString类型的变量
//或者其他variable的变量,而不是control的变量
......
this->UpdateData();

追问

可不可以不采用重载A窗口的办法啊,我刚才试了,我设置一工资以后,我先设置好的选项都没有了,只剩下了工资这个值,我再从别的对话框选择别的选项时,已选好的选项都没有了,有没有办法可以解决啊,感谢大侠

追答

CWindowA::function()

CWindowB dlg;
dlg.m_gongzilevel = this->m_gongzilevel;//加上这个看看,不知道你是不是这个意思
......
if(dlg.DoModal()==IDOK)

this->m_gongzilevel = dlg.m_gongzilevel;
......
this->UpdateData();

追问

对的,但是已经从B中传回来了,为什么A中对话框还不显示我在B中输入的值啊

追答

A中调用UpdateData()了没?

追问

已经调用了

参考技术A 在父类中调用弹出窗口的地方加代码;
比如:
CWindowA:: FunctionTest()

// 这是父窗口的一个成员函数;
...
CWindowB dlgB;
dlgB.DoModal();
if(IDOK==dlgB.DoModal())

m_gongzilevel = dlgB.m_level; //将子窗口的值传回来;


visual C++ 创建一个窗口却无法显示窗口的原因是啥?

程序可以执行,可以再任务管理器中看到,但没有窗口显示,一直没找到原因,
我用了ShowWindow 这个函数,却一直无法显示,使用win32编的,这样的程序我写了很多了,没遇到过这种情况,不知道是什么原因

因为你没有让它显示, 在WINDOWS机制中,首先创建一个进程, 然后在进程中执行命令, 命令可以是创建一个窗口, 也可以是其他.

创建一个窗口首先需要定义一个窗口类,然后初始化相关事件,然后显示.

程序运行不运行和窗口是否显示没有任何关系. 程序运行时可以显示窗口也可以不显示.

建议你去买一本《WINDOWS程序设计》(微软出版社出的),该书是WINDOWS编程的圣经,如果你要用VC写WINDOWS程序,此书是必看的。该书用新手也能看懂的语言介绍了WINDOWS的整体框架和VC编程时涉及的基础知识。你应该好好读读这本书。
参考技术A ShowWindow调用后还要调用一次UpdateWindow才能显示窗口.
还有窗口回调函数中要有WM_PAINT及WM_CREATE消息处理.
参考技术B 代码? 参考技术C 窗口show了么?
mfc还是win32

以上是关于visual c++ 中 怎样把子窗口传值到父窗口?的主要内容,如果未能解决你的问题,请参考以下文章

MFC怎么把子窗口嵌入到父窗口中

showModalDialog/showModelessDialog实例,父窗口向子窗口传递值,子窗口设置父窗口的值,子窗口关闭的时候返回值到父窗口.关闭刷新父窗口

在不关闭子窗口的情况下从子窗口返回焦点到父窗口(在mfc visual studio中)

js window.opener 子页面 父页面 传值

如何将行值从 iframe 弹出窗口传递到父页面文本框

js传值到iframe中