【求助】对话框无法响应消息的问题……

kongfanmings 2011-03-29 03:35:13
有3个对话框 A,B,C;
在A的OninitDialog函数中生成B并显示;
在B的OninitDialog函数中生成C并隐藏,需要的时候再显示;

A上有一个下拉列表控件,我想通过下拉列表的内容来让C做不同的事情,但是不响应;
A发给B的消息可以响应;
A或者B发给C都不响应 无论是自定义的消息还是自动生成的

希望又遇到过类似问题的高手给解答一下谢谢

----
我应该说明白了吧 呵呵
...全文
139 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
kongfanmings 2011-03-29
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 a710732966 的回复:]

有那么复杂吗???你们都没有描述清楚!
[/Quote]

是吗 那我下回注意……
Music杰 2011-03-29
  • 打赏
  • 举报
回复
有那么复杂吗???你们都没有描述清楚!
Eleven 2011-03-29
  • 打赏
  • 举报
回复
kongfanmings 2011-03-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 visualeleven 的回复:]

引用 10 楼 kongfanmings 的回复:
引用 9 楼 visualeleven 的回复:

引用 6 楼 kongfanmings 的回复:
对了 我忘了说 B窗口是Create(ID_B,GetWindow());
而C窗口是 Create(ID_B,this //B);
而且是child 不过非child的情况我也试过了 也是没有响应 谢谢~

不用消息的话,你可……
[/Quote]

谢谢部长,之前一直纠结用自定义消息来着 没有想到这个 还是经验不足 已经按您的办法解决了 谢谢 马上结贴~··今后有问题还希望多多指教~··
Eleven 2011-03-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 kongfanmings 的回复:]
引用 9 楼 visualeleven 的回复:

引用 6 楼 kongfanmings 的回复:
对了 我忘了说 B窗口是Create(ID_B,GetWindow());
而C窗口是 Create(ID_B,this //B);
而且是child 不过非child的情况我也试过了 也是没有响应 谢谢~

不用消息的话,你可以直接调用B类的public成员函数,你在B中定义几个p……
[/Quote]
pCDlg为NULL了,当然就不能这样做了
kongfanmings 2011-03-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 visualeleven 的回复:]

引用 6 楼 kongfanmings 的回复:
对了 我忘了说 B窗口是Create(ID_B,GetWindow());
而C窗口是 Create(ID_B,this //B);
而且是child 不过非child的情况我也试过了 也是没有响应 谢谢~

不用消息的话,你可以直接调用B类的public成员函数,你在B中定义几个public的函数,这样你在A中就可以调用B的publi……
[/Quote]

您这么说我明白一些了,那如果pCDlg不为Null 是不是就不可以这么做呢?
Eleven 2011-03-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kongfanmings 的回复:]
对了 我忘了说 B窗口是Create(ID_B,GetWindow());
而C窗口是 Create(ID_B,this //B);
而且是child 不过非child的情况我也试过了 也是没有响应 谢谢~
[/Quote]
不用消息的话,你可以直接调用B类的public成员函数,你在B中定义几个public的函数,这样你在A中就可以调用B的public方法了,你的B类中的public函数就利用pCDlg->XXX();或者发送消息都可以,当然你要先判断一下pCDlg是否不为NULL。应该很容易的,应该没有什么难度吧~
kongfanmings 2011-03-29
  • 打赏
  • 举报
回复
部长还在吗
kongfanming2010 2011-03-29
  • 打赏
  • 举报
回复
我是楼主小号 别误会 我不是来抢分的 我要说话!
======================================================
我原来是用类实例化的 用了部长的方法 还是同样的结果……另外部长说的A->B,B->C 的方法我也试过了,不行……继续求救 这个问题纠结了几天了 哎……自我惭愧==!
kongfanmings 2011-03-29
  • 打赏
  • 举报
回复
对了 我忘了说 B窗口是Create(ID_B,GetWindow());
而C窗口是 Create(ID_B,this //B);
而且是child 不过非child的情况我也试过了 也是没有响应 谢谢~
kongfanmings 2011-03-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 na_he 的回复:]

C是隐藏的时候接收A,B发送来的消息吗?如果是,不隐藏的时候试试看。
[/Quote]

不是的 我是保证C出现的时候才发消息的~~谢谢~·
kongfanmings 2011-03-29
  • 打赏
  • 举报
回复
谢谢部长 我先去试试,我就是不太会用指针什么的 而且功能原因对话框都不能删除……有可能是我的方法还不太好 这就去试 谢谢~~
na_he 2011-03-29
  • 打赏
  • 举报
回复
C是隐藏的时候接收A,B发送来的消息吗?如果是,不隐藏的时候试试看。
Eleven 2011-03-29
  • 打赏
  • 举报
回复
B和C都为非模态对话框
CBDlg* pBDlg = NULL; // B对话框相关的类
// pBDlg为A类的成员指针变量,初始值为NULL

CCDlg* pCDlg = NULL; // C对话框相关的类
// pCDlg 为B类的成员指针变量,初始值为NULL
A的OnInitDialog中
if(NULL == pBDlg)
{
pBDlg = new CBDlg;
pBDlg->Create(IDB_DIALOG, this);
pBDlg->ShowWindow(SW_SHOW);
}
B的OnInitDialog中
if(NULL == pCDlg)
{
pCDlg = new CCDlg;
pCDlg->Create(IDC_DIALOG, this);
// 需要的时候就pCDlg->ShowWindow(SW_SHOW);
}

// 最后不需要的时候,B和C都要删除
pBDlg->DestroyWindow();
delete pBDlg;
pBDlg = NULL;

pCDlg->DestroyWindow();
delete pCDlg;
pCDlg = NULL;

上有一个下拉列表控件,我想通过下拉列表的内容来让C做不同的事情,但是不响应;
----------------------
A - > C即A让C做事情,你可以通过B,A通知B,B通知C,你可以在B类提供相关public方法,或者发送自定义的消息到B。
下面的问题参考上面的方法,应该很easy的。
Good Luck!
kongfanmings 2011-03-29
  • 打赏
  • 举报
回复
没有人知道么

16,472

社区成员

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

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

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