社区
C++ Builder
帖子详情
窗口消息发送问题
sxqinge
2012-07-24 09:02:25
问题描述:
我从Form1中给Form2发送消息(在工程文件中,将Form2的创建函数已屏蔽掉),希望所有继承于Form2的窗口都能同时接受到这个发送消息并做及时处理。
我的做法:
使用FindWindow()函数获取Form2的句柄(此窗体未构造,是否获取的句柄不能反映真实值呢?),然后向Form2发送消息,未发送成功。
求助:
请各位能提供点思路,或许我这条路走不通,当然也和没有尝试成功有关系,但不知道该怎么去实现我想要的方法,请指点明路,谢谢。
...全文
180
17
打赏
收藏
窗口消息发送问题
问题描述: 我从Form1中给Form2发送消息(在工程文件中,将Form2的创建函数已屏蔽掉),希望所有继承于Form2的窗口都能同时接受到这个发送消息并做及时处理。 我的做法: 使用FindWindow()函数获取Form2的句柄(此窗体未构造,是否获取的句柄不能反映真实值呢?),然后向Form2发送消息,未发送成功。 求助: 请各位能提供点思路,或许我这条路走不通,当然也和没有尝试成功有关系,但不知道该怎么去实现我想要的方法,请指点明路,谢谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fxworld
2012-07-24
打赏
举报
回复
[Quote=引用 14 楼 的回复:]
所以就只好出此下策给每个子窗口发送消息,并进行处理。
[/Quote]
这个不是“出此下策”,而是必须的,每个从TForm2继承的类的实例,都是独立的窗体,每一个都不同于TForm2的实例。
你可以使用全局对象 Screen 枚举App的从TForm2继承的类的实例就可以了。
sxqinge
2012-07-24
打赏
举报
回复
是的,向Form2发送消息的话,子窗口也都可以进行消息处理,无需重复设置。
现在的问题是,我把Form2的构造函数在工程文件中删除了,重新添加的话就报错,所以就只好出此下策给每个子窗口发送消息,并进行处理。
并且也有个奇怪问题,使用FindWindow函数获取的窗口句柄有时候也不一定正确,比如我想向另一个显示窗口发送消息(窗口在工程文件中自动创建),我在不同窗口调用FindWindow时得到的值也不定相同,不得其解。
fxworld
2012-07-24
打赏
举报
回复
[Quote=引用 11 楼 的回复:]
但是每个继承窗口都进行消息响应处理,觉得很麻烦, 如果在父窗口中处理就好了。猪哥能给个具体的方法实现吗?回头一定好好学习下。
[/Quote]
TForm2做好消息处理后,继承TForm2的类就自动具备了TForm2的消息处理了,继承类不需要重复取处理。
fxworld
2012-07-24
打赏
举报
回复
在8楼的回复内容:
使用全局对象 Screen 枚举App的从TForm2继承的类的实例就可以了。
狗日的csdn 管理员。
sxqinge
2012-07-24
打赏
举报
回复
谢谢猪哥和fxworld的热心回复,很汗颜对于回调函数我不会用。
我还是用了刚才自己的那个笨方法可以实现自己的问题,但是每个继承窗口都进行消息响应处理,觉得很麻烦, 如果在父窗口中处理就好了。猪哥能给个具体的方法实现吗?回头一定好好学习下。
fxworld
2012-07-24
打赏
举报
回复
我在8楼的回复,明明是回复楼主的问题,竟然被屏蔽了,我靠csdn.
fxworld
2012-07-24
打赏
举报
回复
csdn怎么发神经啊,我的回复总也出不来。
fxworld
2012-07-24
打赏
举报
回复
使用 全局对象 Screen枚举App的当前所有窗体,找出从TForm2继承的类就可以了。
Jim@luckeeinc.com
2012-07-24
打赏
举报
回复
如果是想要在new Form2的继承窗口的时候触发 那可以写在Form2的构造函数中 new一个子类的时候会去触发父类的构造
如果Form2的继承窗口已经new出来了 想给Form2的子窗口同时发送消息 那可能要用到回调函数然后枚举 EnumChildWindows 去找出所有Form2的子窗口 再处理
sxqinge
2012-07-24
打赏
举报
回复
我想用一个笨方法:
设一个全局变量数组,在Form2的FormShow()函数中将当前句柄全部存入数组中,这样就可以获取所有继承于Form2的句柄,然后在Form1的处理事件中向每个句柄所属窗口发送消息。
但是这样的话太麻烦了,有没有一个更合理的方法呢?
sxqinge
2012-07-24
打赏
举报
回复
谢谢猪哥的回复。
我的窗体关系有点乱,有几个继承于Form2的窗体是嵌套在Form1的TPageControl中的,这里或许可以用你的方法去实现;但是还有些窗体是独立的小窗口,比如一些浮动窗口等。我希望在Form1中进行某些处理的时候,所有继承于Form2的窗口都能同时响应消息。
Jim@luckeeinc.com
2012-07-24
打赏
举报
回复
不用指定也不用添加
比如说 你有3个Form Form1 Form2 Form3 。。。。。
其中Form3等等是继承的Form2
那你在Form2的构造函数中把代码写好
如果在Form1中直接去写TForm3 *f = new TForm3(this); f->ShowModal();........肯定会去触发的
sxqinge
2012-07-24
打赏
举报
回复
是的,但是我又想手工将Form2的构造函数在工程文件中添加的话,单文本编译无误,整个文件编译就报错了,提示"Unresolved external..."
有没有一个好的方法,我无需再添加Form2的构造函数,本考虑使用MVC模式,但是这个玩起来有点复杂还不熟悉,时间上就来不及了。
fxworld
2012-07-24
打赏
举报
回复
Form2窗体未构造,你怎么给它发消息呢?
缘中人
2012-07-24
打赏
举报
回复
继承Form2的应该当然可以收到此消息,关键是发送消息是的句柄指定正确就可以了,句柄是具体窗体的句柄
ccrun.com
2012-07-24
打赏
举报
回复
12楼请淡定,你看不到某个回复,这是CSDN目前难以解决的BUG。多生成几次帖子就ok了。
七擒关羽
2012-07-24
打赏
举报
回复
说明一下 当你生成的时候 你的Form1 Form2都存在,只你看到的是你显示出来的
例如 Form2->Show() 就显示窗口2,Form2->Hide()就是隐藏窗口2,所以你可以直接传值过去
如果是new出来的 例如TForm2 newForm = new TForm2();newForm->Show();你也可以传值过去,但是需要传值回来,那么该值是全局的才可以,和指针一样,你函数里分配内存,出了函数该指针无效
Windows游戏编程系列之1:GUI
窗口
界面编程及游戏入门实战
我将带领大家来系统学习Windows的
窗口
编程,包括
消息
、
窗口
、GDI绘图、游戏开发等。 本课程比较基础,非常适合初学者入门,读者可以边学习边实践。 具体的章节目录和课程内容如下所示: ---------------------------...
Windows
窗口
发送
消息
参数详解
函数功能: 将指定的
消息
发送
到一个
窗口
,同win32 api 里面的SendMessage等同的效果 中文函数原型:
发送
消息
(hwnd,msg,wparam,iparam) 英文函数原型: sendmessage(hwnd,msg,wparam,iparam) 参数: hwnd:
窗口
句柄...
MFC自定义
消息
:实现MFC子
窗口
向父
窗口
发送
消息
的功能
在MFC中,使用用户自定义
消息
,子
窗口
向父
窗口
发送
消息
过程、代码: 在需要接收
消息
的父
窗口
头文件(xxx.h)中增加定义,也可以在其他头文件中定义,但是要记得引入 //自定义DMTIDRegDlg到主
窗口
的
消息
#define ...
向
窗口
发送
消息
SendMessage
Windows API宏,在WinUser.h中根据是否已定义Unicode被定义为SendMessageW或SendMessageA,这两个函数将指定的
消息
发送
到一个或多个
窗口
。此函数为指定的
窗口
调用
窗口
程序,直到
窗口
程序处理完
消息
再返回。而和函数...
Windows下向指定
窗口
模拟
发送
键盘
消息
在操作系统中,鼠标和键盘的操作会被转换为相应的系统
消息
,
窗口
过程在接收到
消息
后会进行对应的处理。
发送
消息
,我们可以使用SendMessage()和PostMessage(),所以,...下面是一个简单的向指定
窗口
发送
消息
的例子: 1
C++ Builder
13,825
社区成员
102,678
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章