当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: 关键字:非模态、模态、Hook、WH_CBT
 

 

    摘要:关键字:add to favorite, import/export wizard, shell docobject view, internet explorer_server 1、概述除了“整理收藏夹”和“添加到收藏夹”对话框外,还有其它一些对话框是我们希望直接通过webbrowser调用的,比如“导入/导出”对话框,用......
 ·first log    »显示摘要«
    摘要:晚上到了这个时候总会有点伤感,又是第一次写自己的blog,完全没有头绪 说说今天做的事情吧,上午把公司新版的delphi的编码规范做完了 下午去参加微软的技术教育大会,感觉还是收获不少的,一共听了三讲 sql server 2005商务智能,visual c#2005语言和集成开发环境增强,讲师讲得还不错的,有些互动性在里面,最后是著名的c++专家lippman的讲演,主要是c++和cli的......


利用WHCBT Hook将非模态对话框显示为模态对话框
关键字:非模态.模态.hook.wh_cbt.cbtproc.

1.意图 【程序编程相关:扫雷游戏源码(1)

  【推荐阅读:昨晚,我失去了她(一个软件项目经理的自白

  【扩展信息:扫雷游戏源码(2)

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

2.简单实现

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

 

……

afxgetmainwnd()->enablewindow(false);//将主窗口disable,显示出的非模态窗口就变成模态的了

showmodelesswindow();

……

 

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

当然,还要更好的办法.

 

3.wh_cbt hook

wh_cbt钩子的详细说明请参阅msdn,我们仅仅需要知道的是在窗口创建.销毁之前系统都会调用挂上了wh_cbt的钩子函数,这正是我们需要的.
...   下一页
 ·ie无法打开连接页面的解决    »显示摘要«
    摘要:现将此方法告诉各位朋友: 发表于: 2003/10/22 09:53pm http://xlweb.3322.org/xinlan/bbs/cgi-bin/topic.cgi?forum=19&topic=100&show=0 原版说明 方法一:重新注册以下dll文件。 regsvr32 shdocvw.dll regsvr32 shell32.dll (注意这个命令,先不用输) ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE