继承自同一类的不同对象之间如何发送消息?

fangjl9 2014-08-08 09:18:40
如题。举例来说,类A有对象a,b,c。现在想a收到一个消息(比如左键消息),同时发送给b,c,或只发送给一个。同理如b和c。如何实现?
...全文
268 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangjl9 2014-08-12
  • 打赏
  • 举报
回复
算了,结贴了,后来发现直接获取窗口句柄,然后给这个窗口发消息就行了,给对象发消息确定是在对象创建后就可以了
fangjl9 2014-08-11
  • 打赏
  • 举报
回复
引用 27 楼 bojie5744 的回复:
呀!好多人回答。线程里消息循环。简单快捷。
我这个程序我自己没开线程,因为我还不会多线程编程,当然我知道每个窗口线程都有消息队列
引用 28 楼 vcf_reader 的回复:
这是一个很聪明的笨办法,值得考虑。
这是我最开始的想法,但如你所说,全是不同的类,其实每个类并没有差很多。而且太繁杂了,很不想这么做,我的窗口很多的...
vcf_reader 2014-08-11
  • 打赏
  • 举报
回复
或者加一个变量,比如计数器什么的
vcf_reader 2014-08-11
  • 打赏
  • 举报
回复
引用 29 楼 fangjl9 的回复:
[quote=引用 28 楼 vcf_reader 的回复:] 这是一个很聪明的笨办法,值得考虑。
这是我最开始的想法,但如你所说,全是不同的类,其实每个类并没有差很多。而且太繁杂了,很不想这么做,我的窗口很多的...[/quote] 可以变通,同一个基类,派生出几个名字不同的类……
叶恭介叶恭介 2014-08-08
  • 打赏
  • 举报
回复
对象a,b,c。。。。这些对象肯定在某一个类上(举例X),abc都是成员。那么可以abc创建时都保存X指针。a要传b的话,就a调用X告诉a要调用B.
昨夜无风 2014-08-08
  • 打赏
  • 举报
回复
你是想通过a发送消息给b,c? 传递指针,然后调虚函数应该可以
oyljerry 2014-08-08
  • 打赏
  • 举报
回复
放到一个链表中,用ID等标识,然后遍历链表来发送给对应的对象
schlafenhamster 2014-08-08
  • 打赏
  • 举报
回复
"类A有对象a,b,c" 实例有ID, 根据ID 在 类A 中区分 各个实例.
Eleven 2014-08-08
  • 打赏
  • 举报
回复
要看你三个窗口之间有什么关联没?
modyaj 2014-08-08
  • 打赏
  • 举报
回复
多个窗口之间都能发送消息 A的多个对象之间也应该能! 自己建一个消息队列 生产者消费者那样 也未尝不可!
vcf_reader 2014-08-08
  • 打赏
  • 举报
回复
引用 18 楼 fangjl9 的回复:
感觉继承自同一个类很麻烦,把abc全写成不同类会不会好一点?
这是一个很聪明的笨办法,值得考虑。
  • 打赏
  • 举报
回复
呀!好多人回答。线程里消息循环。简单快捷。
fangjl9 2014-08-08
  • 打赏
  • 举报
回复
引用 24 楼 weifirst118 的回复:
办法有很多,对楼主来说,这个办法应该更合适: A::OnLbuttonDown() { 遍历A的兄弟窗口,用RUNTIMECLASS判断是不是你的特定类生成的对象,若是就执行特定代码。 }
方法感觉是可以,但具体的函数我不是很熟悉,我去找找然后试试
fangjl9 2014-08-08
  • 打赏
  • 举报
回复
引用 23 楼 schlafenhamster 的回复:
还有一个函数: CWnd* GetDlgItem( int nID ) const; void CWnd::GetDlgItem( int nID, HWND* phWnd ) const;
OK,我发消息是在对象创建之后,所以在类A里只要获取到对象的指针就可以发消息了,你这方法应该可以,虽然感觉这样做已经完全破坏了封装的概念
weifirst118 2014-08-08
  • 打赏
  • 举报
回复
办法有很多,对楼主来说,这个办法应该更合适: A::OnLbuttonDown() { 遍历A的兄弟窗口,用RUNTIMECLASS判断是不是你的特定类生成的对象,若是就执行特定代码。 }
schlafenhamster 2014-08-08
  • 打赏
  • 举报
回复
还有一个函数: CWnd* GetDlgItem( int nID ) const; void CWnd::GetDlgItem( int nID, HWND* phWnd ) const;
fangjl9 2014-08-08
  • 打赏
  • 举报
回复
引用 19 楼 modyaj 的回复:
我觉得是挺麻烦的 首先 你把这个消息传递出去给同一个类的不同对象就不好弄了 然后你还需要a对象处理完后在传递给其他对象这个先后顺序就需要有东西来保证!说来说去 主要还是你没有b c 对象的指针!怎么想办法得到他们也许会更好解决这个问题!
引用 21 楼 schlafenhamster 的回复:
“感觉继承自同一个类很麻烦,把abc全写成不同类会不会好一点“ 如果功能差很多,把abc全写成不同类会不会好一点。
写成不同类确实就简单的多,但这么一来需要的类就很多,我再试试能不能再类A里找到其他对象的指针,这样就可以直接发了
schlafenhamster 2014-08-08
  • 打赏
  • 举报
回复
“感觉继承自同一个类很麻烦,把abc全写成不同类会不会好一点“ 如果功能差很多,把abc全写成不同类会不会好一点。
schlafenhamster 2014-08-08
  • 打赏
  • 举报
回复
A::OnLbuttonDown() { int ID=GetDlgCtrlID();// 就是获取当前子窗口的ID // CWnd 的函数 // 或 int ID=::GetDlgCtrlID(this->m_hWnd);// 就是获取当前子窗口的ID
modyaj 2014-08-08
  • 打赏
  • 举报
回复
我觉得是挺麻烦的 首先 你把这个消息传递出去给同一个类的不同对象就不好弄了 然后你还需要a对象处理完后在传递给其他对象这个先后顺序就需要有东西来保证!说来说去 主要还是你没有b c 对象的指针!怎么想办法得到他们也许会更好解决这个问题!
加载更多回复(11)

16,472

社区成员

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

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

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