社区
界面
帖子详情
关于MessageBox的问题
robinwjb
2010-01-30 10:17:25
问题一:如何让弹出MessageBox的窗口不要失去焦点(也就是说保持激活状态)?
普通的Messagebox弹出后,原窗口就会失去激活状态,弹出的MessageBox会被激活。
注:必须使用MessageBox,而不是自定义对话框。
问题二:谁知道如何隐藏弹出的MessageBo窗口的方法?
不能有闪烁,让使用者什么都感觉不到。
...全文
344
17
打赏
收藏
关于MessageBox的问题
问题一:如何让弹出MessageBox的窗口不要失去焦点(也就是说保持激活状态)? 普通的Messagebox弹出后,原窗口就会失去激活状态,弹出的MessageBox会被激活。 注:必须使用MessageBox,而不是自定义对话框。 问题二:谁知道如何隐藏弹出的MessageBo窗口的方法? 不能有闪烁,让使用者什么都感觉不到。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sue3140
2010-07-02
打赏
举报
回复
留个名先!~ 这帖子帮了我啊!~
robinwjb
2010-02-01
打赏
举报
回复
http://topic.csdn.net/u/20100201/11/70079053-e3a2-4081-b393-d0fd029d4174.html?95443
robinwjb
2010-02-01
打赏
举报
回复
[Quote=引用 14 楼 cnzdgs 的回复:]
可以在MessageBox获得焦点后再把焦点设到主窗口上,主窗口响应WM_NCACTIVATE消息直接返回0,这样看不到主窗口的变化。如果不是自己的程序,可以通过重设窗口函数的方式来响应消息。
如果上述做法仍不能满足要求,可以Hook ShowWindow函数,在显示MessageBox时,将参数改成SW_SHOWNOACTIVATE。
[/Quote]
谢谢,这个方法可以搞定,给分了!
另外下面的问题也麻烦大家看看啊
robinwjb
2010-01-31
打赏
举报
回复
[Quote=引用 11 楼 cnzdgs 的回复:]
引用 9 楼 robinwjb 的回复:
HCBT_CREATEWINDOW时,除了能销毁窗口,最多只能改变窗口的大小和位置吧。
这个时候想既无法隐藏窗口,也无法设置窗口的样式(比如WS_EX_NOACTIVATE)。
改Z-Order试试。
[/Quote]
修改Z-Order可以让窗口显示到主窗口的背后,但是主窗口还是失去了焦点。
cnzdgs
2010-01-31
打赏
举报
回复
[Quote=引用 9 楼 robinwjb 的回复:]
HCBT_CREATEWINDOW时,除了能销毁窗口,最多只能改变窗口的大小和位置吧。
这个时候想既无法隐藏窗口,也无法设置窗口的样式(比如WS_EX_NOACTIVATE)。
[/Quote]
改Z-Order试试。
wltg2001
2010-01-31
打赏
举报
回复
[Quote=引用 7 楼 robinwjb 的回复:]
::MessageBox(NULL,"OK","Caption",MB_OK);
这样弹出的就是无模式的啊。
[/Quote]
这个还是模式对话框吧,不过父窗口改为桌面了
robinwjb
2010-01-31
打赏
举报
回复
[Quote=引用 8 楼 cnzdgs 的回复:]
给该线程安装WH_CBT类型的钩子,在nCode==HCBT_CREATEWINDOW时,如果Hook函数返回非0值,系统会自动销毁窗口,如果不想销毁窗口,也可以做其它处理,参考MSDN中CBTProc的说明。
[/Quote]
HCBT_CREATEWINDOW时,除了能销毁窗口,最多只能改变窗口的大小和位置吧。
这个时候想既无法隐藏窗口,也无法设置窗口的样式(比如WS_EX_NOACTIVATE)。
cnzdgs
2010-01-31
打赏
举报
回复
给该线程安装WH_CBT类型的钩子,在nCode==HCBT_CREATEWINDOW时,如果Hook函数返回非0值,系统会自动销毁窗口,如果不想销毁窗口,也可以做其它处理,参考MSDN中CBTProc的说明。
robinwjb
2010-01-31
打赏
举报
回复
::MessageBox(NULL,"OK","Caption",MB_OK);
这样弹出的就是无模式的啊。
cnzdgs
2010-01-31
打赏
举报
回复
可以在MessageBox获得焦点后再把焦点设到主窗口上,主窗口响应WM_NCACTIVATE消息直接返回0,这样看不到主窗口的变化。如果不是自己的程序,可以通过重设窗口函数的方式来响应消息。
如果上述做法仍不能满足要求,可以Hook ShowWindow函数,在显示MessageBox时,将参数改成SW_SHOWNOACTIVATE。
zhouzhipen
2010-01-31
打赏
举报
回复
不要使用主窗口作为MessageBox的父窗口.
wltg2001
2010-01-30
打赏
举报
回复
另外,我弹出的Messagebox是无模式的。
=========
MessageBox好像都是模式对话框吧,好像没有参数将它设置成无模式的吧
robinwjb
2010-01-30
打赏
举报
回复
谢谢大家的回复,我再说明一下吧,我通过挂一个WH_CALLWNDPROC类型的hook,然后替换MessageBox的窗口过程,已经可以隐藏MessageBox了,但这样做,原窗口还是会失去激活的状态。另外,我弹出的Messagebox是无模式的。
雪碧爱可乐
2010-01-30
打赏
举报
回复
启动一个线程来调用MessageBox,这样但不知道线程里面调用窗体不知道会出现什么状况,没尝试过!
lllyyy2403
2010-01-30
打赏
举报
回复
[Quote=引用楼主 robinwjb 的回复:]
问题一:如何让弹出MessageBox的窗口不要失去焦点(也就是说保持激活状态)?
普通的Messagebox弹出后,原窗口就会失去激活状态,弹出的MessageBox会被激活。
注:必须使用MessageBox,而不是自定义对话框。
问题二:谁知道如何隐藏弹出的MessageBo窗口的方法?
不能有闪烁,让使用者什么都感觉不到。
[/Quote]
一、由于通常的MessageBox是原程序的模式对话框,是必须要返回的,否则程序只能等待,因此恐怕不能直接走这条路。但可考虑迂回:在其弹出时立即将其隐藏,然后向其发送IDOK按钮指令,从而返回焦点给原程序。二、用钩子勾到该窗口,然后发送隐藏命令ShowWindow(handle,SH_HIADE),然后做第一点。但是可能该对话框可能还是会先闪一下,这仅仅是猜测哈,可能也不会闪直接被隐藏了吧。
jameshooo
2010-01-30
打赏
举报
回复
1、要区分情况。如果模式对话框以原窗口为父窗口,原窗口是不可能激活的。如果模式对话框以桌面作为父窗口,在弹出对话框之前先给自己POST一个自定义消息,然后再弹出对话框,因为原本的消息循环被对话框接管,原窗口只能依靠消息获得继续执行代码的机会,在消息响应里激活自己。
2、除了HOOK这个API,我还不知道更好的办法。
向立天
2010-01-30
打赏
举报
回复
你的这个需求不太容易实现吧
弹出MessageBox原窗口会被禁用
这是由于DoModal的机制造成的
不大可能把模态对话框改为非模态的吧
你到底想做什么
为什么跟MessageBox过不去
有什么特殊应用吧
WPF自定义
MessageBox
完善版 (源码)
WPF 自定义
MessageBox
完善版 (源码放送) 自己构建的可制定风格的WPF版
MessageBox
.详情请移步 博客园:http://www.cnblogs.com/Vito2008/p/
MessageBox
.html 欢迎转载,欢迎拍砖. 改为免费了,请多多支持原创撒!
WPF自定义
MessageBox
完善版 v2 (源码)
WPF 自定义
MessageBox
完善版 (源码放送) 自己构建的可制定风格的WPF版
MessageBox
.详情请移步 博客园:http://www.cnblogs.com/Vito2008/p/
MessageBox
.html 欢迎转载,欢迎拍砖. 改为免费了,请多多支持原创撒! 本...
修正美化:PB9自定义
messageBox
,不用修改你的程序代码即可直接套用
修正了BUG并美化了. 你的程序可以直接套用本...可本
messageBox
与系统
messageBox
()各方面保持一致,包括默认按钮、按钮焦点的变换,返回数值、提示声音、右上角的关闭按钮是否可用等,让程序员和用户使用上没有变化。
C#自定义按钮、自定义WinForm无边框窗体、自定义
MessageBox
窗体
本例子包含C#自定义按钮、自定义WinForm无边框窗体、自定义
MessageBox
窗体 三个小例子,具体展现效果可以到:http://www.cnblogs.com/JiYF/p/8686463.html查看
Hook所有程序的
MessageBox
.zip
Hook所有程序的
MessageBox
.zip VS2008源码和成品 熟悉API的都知道,系统中没有
MessageBox
,有的只是
MessageBox
A和
MessageBox
W, 因此HOOK
MessageBox
,其实是HOOK
MessageBox
A和
MessageBox
W。
界面
15,980
社区成员
115,867
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章