怎样获取模态对话框中控件的值?

BlackFIre531 2009-06-15 02:19:17
小弟在一个基于对话框的程序里新建了一个模态对话框,里边有3个edit控件和一个确定按钮,请问该怎样做可以在点击确定之后,把3个edit控件的值传回给原来的对话框(是不是叫做父对话框)里的变量呢?谢谢了。
...全文
416 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
nianhua120 2011-05-08
  • 打赏
  • 举报
回复
这个方法还不错
BlackFIre531 2009-06-15
  • 打赏
  • 举报
回复
呵呵,我用CDialog::EndDialog( int nResult );来返回~~感谢ls各位!
The_facE 2009-06-15
  • 打赏
  • 举报
回复
那就在模态对话框的类里面加一个成员变量,表示最后按下的是哪个按钮,然后靠这个值来判断按下的是哪个键。别和ok和cancel冲突就可以,或者你直接无视ok和cancel,像5楼那样。

其实vc是自由度很高的东西,尽量不要弄得耦合度太高。
BlackFIre531 2009-06-15
  • 打赏
  • 举报
回复
但是那样还需要一个接收消息的函数,我想在创建对话框的函数里就把返回值接收了。因为程序并不是很大。
The_facE 2009-06-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 BlackFIre531 的回复:]
还有,是不是在DoModal后对话框的资源就被销毁了?那么该怎样得到里边控件的变量值呢?麻烦哪位大哥上个简单的代码说明一下,不胜感谢!
[/Quote]

没析构就一直有,跟你能不能看见没关系。

发消息就是SendMessage,找msdn看!如果连消息机制都不明白,就先不要研究对话框了,先回去补windows消息机制
BlackFIre531 2009-06-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 youzhipeng 的回复:]
sendmessage 更好。
[/Quote]
具体该怎样用啊?
youzhipeng 2009-06-15
  • 打赏
  • 举报
回复
sendmessage 更好。
BlackFIre531 2009-06-15
  • 打赏
  • 举报
回复
还有,是不是在DoModal后对话框的资源就被销毁了?那么该怎样得到里边控件的变量值呢?麻烦哪位大哥上个简单的代码说明一下,不胜感谢!
BlackFIre531 2009-06-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 The_facE 的回复:]
引用 4 楼 BlackFIre531 的回复:
那模态对话框不需要销毁吗?还是会自动销毁?
还有,如果有2个按钮(不是ok和cancel按钮),怎样在主对话框里得到这2个按钮的值?比如:

CXXDlg dlg;
UinT n
switch(n)
{
case IDOK:
.....
case IDCAnCEL:
.....
case 我自己的按钮值:
}

那这个我自己的按钮值怎么返回过来?
谢谢啊~~



干嘛这么写?发消息不行吗?
[/Quote]
请问怎样发送啊?我刚刚开始学……很多都不懂
The_facE 2009-06-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 BlackFIre531 的回复:]
那模态对话框不需要销毁吗?还是会自动销毁?
还有,如果有2个按钮(不是ok和cancel按钮),怎样在主对话框里得到这2个按钮的值?比如:

CXXDlg dlg;
UinT n
switch(n)
{
case IDOK:
.....
case IDCAnCEL:
.....
case 我自己的按钮值:
}

那这个我自己的按钮值怎么返回过来?
谢谢啊~~
[/Quote]

干嘛这么写?发消息不行吗?
y29508968 2009-06-15
  • 打赏
  • 举报
回复
应该这样吧:

CXXDlg dlg;
INT_PTR nRet = -1;
nRet = dlg.DoModal();

switch(nRet )
{
case IDOK:
.....
case IDCAnCEL:
.....
case 我自己的按钮值:
}
fengrx 2009-06-15
  • 打赏
  • 举报
回复
DoModal只会返回IDOK和IDCANCEL吧。

如果想返回其它的,那就把要返回的值存储为一个变量,在返回后访问使用。


CXXDlg dlg;
if (IDOK == dlg.DoModal() )
{
int value = dlg.returnValue;//returnValue为自己定义的变量
switch(value )
{
case IDOK:
.....
case IDCAnCEL:
.....
case 我自己的按钮值:
}
}
BlackFIre531 2009-06-15
  • 打赏
  • 举报
回复
那模态对话框不需要销毁吗?还是会自动销毁?
还有,如果有2个按钮(不是ok和cancel按钮),怎样在主对话框里得到这2个按钮的值?比如:

CXXDlg dlg;
UinT n
switch(n)
{
case IDOK:
.....
case IDCAnCEL:
.....
case 我自己的按钮值:
}

那这个我自己的按钮值怎么返回过来?
谢谢啊~~
luckyboy101 2009-06-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 skyxie 的回复:]
给模态对话框的 edit 绑定变量 m_strEdit1, m_strEdit2, m_strEdit3
然后外面的对话框:
CXXDlg dlg;
if (IDOK == dlg.DoModal() )
{
this->m_str1 = dlg.m_strEdit1;
...
}
[/Quote]
正解
skyxie 2009-06-15
  • 打赏
  • 举报
回复
给模态对话框的 edit 绑定变量 m_strEdit1, m_strEdit2, m_strEdit3
然后外面的对话框:
CXXDlg dlg;
if (IDOK == dlg.DoModal() )
{
this->m_str1 = dlg.m_strEdit1;
...
}
zwfgdlc 2009-06-15
  • 打赏
  • 举报
回复
你用全局变量保存起来不就行了。

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧