利用WH_CBT Hook将非模态对话框显示为模态对话框

本文介绍了如何通过WH_CBT Hook技术,将非模态对话框模拟成模态对话框。在IE的打印对话框案例中,通过在显示非模态窗口前禁用主窗口,并在WH_CBT钩子函数中监听窗口创建和销毁事件,实现在非模态窗口关闭后恢复主窗口的启用状态。
摘要由CSDN通过智能技术生成

利用WH_CBT Hook将非模态对话框显示为模态对话框

    关键字:非模态、模态、Hook、WH_CBT、CBTProc、

1、意图

有时候我们希望将非模态窗口显示为模态窗口。比如在IE的“文件”菜单下选择“打印”,弹出的“打印”对话框就是非模态的(也许我们不太清楚 Microsoft的设计意图,一般来说这里的“打印”对话框应该是模态的)。这种情况下如何将“打印”对话框显示为模态的呢(这个对话框对我们来说是 Black Box)?

 

2、简单实现

简单地说,模态窗口显示时,其父窗口是被Disable的,所以模态窗口才呈现“模态”,所以只要在显示我们非模态窗口前将父窗口Disable即可实现,如下:

 

……

AfxGetMainWnd()->EnableWindow(FALSE);//将主窗口Disable,显示出的非模态窗口就变成模态的了

ShowModelessWindow();

……

 

问题在于非模态窗口显示之后是立即返回的,那我们将父窗口Enable的代码放在哪里呢?笨办法是用时钟,不断地检测显示出来的非模态窗口是否已经关闭,若关闭则将父窗口Enable。

当然,还要更好的办

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值