45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:IE Toolbar的实现思路介绍

IE Toolbar的实现思路介绍

2016-08-30 07:55:13 来源:www.45fan.com 【

IE Toolbar的实现思路介绍

IE Toolbar 的实现思路(二)完善篇
1.当从一个IE里在打开新连接的时候,通过新建窗口方式打开,原窗口的删除功能失效
原因:
当IE打开新窗口时,两个IE实际上共享同一个IE ToolBar的DLL,如果是分别从桌面打开IE的程序,他们会分别加载DLL。我在消息拦截函数里,判断消息是否是TextBox的时候,使用了一个pEditMenuBar的全局指针用于记录ToolBar的指针,并且该指针在ToolBar创建的时候设置,并在ToolBar删除时置空。因为两个IE共享同一个DLL,因此当第二个IE打开后指针被修改,从而导致第一个IE退格键失效。
解决方案:
方案1:在TextBox获得焦点时,重新设置pEditMenuBar指针
方案2:修改拦截函数,将记录ToolBar的指针,改为记录CEdit的指针
总结:
IE在打开新窗口时会重新创建一个ToolBar,并且这个ToolBar对象在同一个DLL空间里。因此,在初始化过程中,一些设置为局部静态对象的对象在重新重新加载时会出错,一些两个ToolBar用到的全局变量会发生应用上的冲突。在设计时,应该避免这两类对象的使用。
2.连续删除TextBox里的文字
原先的程序是拦截Key_UP消息,并通过自定义函数删除字符,这样的删除的方法在长按退格键时无法联系删除文字,解决方案是拦截Key_Down消息,在连接后发一条WM_CHAR的消息给CEdit控件。这里需要注意的是,如果拦截Key_Down消息,在后面的处理过程中,不能IsDialogMessage使用方法,否则会一次删除2个字符,原因暂时没找到。
3.当TextBox获得焦点事件的时候,全选TextBox里的内容
如果在获得焦点事件里,使用SetSel(0,-1)时无法显示文字的高亮,需要使用PostMessage(EM_SETSEL, 0, -1)方法。网上给出的原因是,如果是SetSel方法是调用是SendMessage的方法,会先进行全选操作,在全选操作完成后再回来进行鼠标单击事件(该事件会取消全选操作的高亮显示)。而通过PostMessage方法是将全选操作的消息放到消息队列后面,全选的操作鼠标单击事件之后执行。
4.如何在页面里某个子窗体里打开需要的链接
方案1:IWebBrowser2::Navigate方法的第三个参数可以指定子窗体(未试尝试验过)
方案2:在Navigate方法里的地址属性里,用javaScript实现,相当于在IE地址栏里直接执行JavaScript脚本
脚本代码:
javascript:eval('if(document.getElementById("mainFrame")!=null){eval(document.getElementById("mainFrame").src="子窗体要打开的链接地址")}else{window.navigate("找不到子窗体时打开的地址")}')
5.ToolBar的内存泄漏检查:
 
在ToolBar发布前,按照管理使用DevPartner Studio 7.2 Professional Edition对ToolBar进行例行的内存泄漏检查,不检查不知道错误蛮多的
1) 在组合链接时,没有释放字符串的内存
2) 图片Lable没有将加载的图片释放,文字Label没有释放字体资源
3) 在帖图的时候也会造成错误CTransparentImage
4) 其他未知访问错误(不是我们DLL的错)
通过检测程序大概查出来10多项错误(当然具体数字很多,但错误类型就10多个),字符串的内测泄漏以及图片资源加载后的释放都进行相应的修改,剩下的因为是在找不到原因,暂时保留,不过这些保留错误在运行时并不会造成什么特别严重的bug(当然测试时间不够久,没有发生积累性错误),估计大部分是被try..catch掉了,不存在严重的弹出性错误。
在测试我们的ToolBar的同时,也顺便检查了baidu的ToolBar,结果非常让我们震惊,通过检查程序检查出来的结果,错误数不是以百计,而是已千计,看着那些错误数不断攀升,我们都不敢相信这个ToolBar是百度的产品。不过程序检查出来的错误归错误,百度的ToolBar在运行时还是很稳定的,自始至终没有让我们看到错误,估计程序检查出来的这些错误都被ToolBar内部给try..catch了。
 

本文地址:http://www.45fan.com/a/question/69674.html
Tags: 实现 思路 Toolbar
编辑:路饭网
  • 上一篇:ERP名词解释大全
  • 下一篇:开发AJAX的攻略
  • 关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部