社区
界面
帖子详情
关于MessageBox的问题
robinwjb
2010-01-30 10:17:25
问题一:如何让弹出MessageBox的窗口不要失去焦点(也就是说保持激活状态)?
普通的Messagebox弹出后,原窗口就会失去激活状态,弹出的MessageBox会被激活。
注:必须使用MessageBox,而不是自定义对话框。
问题二:谁知道如何隐藏弹出的MessageBo窗口的方法?
不能有闪烁,让使用者什么都感觉不到。
...全文
432
17
打赏
收藏
关于MessageBox的问题
问题一:如何让弹出MessageBox的窗口不要失去焦点(也就是说保持激活状态)? 普通的Messagebox弹出后,原窗口就会失去激活状态,弹出的MessageBox会被激活。 注:必须使用MessageBox,而不是自定义对话框。 问题二:谁知道如何隐藏弹出的MessageBo窗口的方法? 不能有闪烁,让使用者什么都感觉不到。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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过不去
有什么特殊应用吧
Afx
MessageBox
、
MessageBox
区别以及
问题
(待解决)
1、
MessageBox
、Afx
MessageBox
的区分: 详细说明见:https://blog.csdn.net/holybin/article/details/28403109 总结:
MessageBox
在有MFC、win32 SDK两个版本
MessageBox
使用更加灵活,可设置图片、标题、形态等,甚至在子线程中弹出,也可以置顶显示,比Afx
MessageBox
好些。 Afx
MessageBox
是MFC全局函数 待解决
问题
: 由于子线程弹出窗口是不规范的操作,修改为子线程给主线程发
Windows API
MessageBox
引起的
问题
我在一个模态窗口里,对用户输入的数据进行校验,校验时间的话就用
MessageBox
来弹出提示,但是我发现,
MessageBox
不是模态的!
。。。
后来让我发现,用Application.
MessageBox
这个函数就没有
问题
了。
MFC中
MessageBox
置于顶层的
问题
今天我用MFC创建了一个单文档程序,其中点击菜单中的一项生成一个设置对话框,点击此对话框的确定按钮希望弹出一个
MessageBox
,但是每次运行时,第一次点击确定
MessageBox
出现在最底层,第二次点击
MessageBox
才出现在最顶层。我怎样让
MessageBox
每次都出现在最顶层?是不是在修改程序过程中误改了某部分的内容了呢?
Ursa.Avalonia 项目中
MessageBox
窗口层级
问题
的分析与解决
Ursa.Avalonia 项目中
MessageBox
窗口层级
问题
的分析与解决 【免费下载链接】Ursa.Avalonia Ursa是一个用于开发Avalonia程序的控件库 项目地址: https://gitcode.com...
Element-UI中的
MessageBox
默认弹出
问题
系列文章目录 文章目录系列文章目录前言一、Element-UI中的
MessageBox
默认弹出
问题
1.1 `实际上的做法与官网上(下面图片)的说法不一样`1.2 `为什么会初次加载页面会无端端地弹出消息框?`1.3 `解决办法`总结 前言 一、Element-UI中的
MessageBox
默认弹出
问题
1.1 实际上的做法与官网上(下面图片)的说法不一样 1.2 为什么会初次加载页面会无端端地弹出消息框? 因为你写了Vue.use(
MessageBox
) 1.3 解决办法 (1
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章