当前位置:编程学习 > VB >>

实现一个多页面浏览器源码研究第一阶段:VB6下用类MFC方式封装IE核心浏览器的可行性

--------------------编程问答-------------------- 自己顶起!! --------------------编程问答-------------------- 的确还很远很远。首先就是菜单栏,点出菜单后用键盘控制的时候需要处理。其次就是标签栏,标签栏的工具提示问题,不知道用“标准做法”(MSDN描述的方法)能否实现。
目前LE浏览器就封装得不错了,没用什么控件 --------------------编程问答-------------------- 谢谢楼主!
一,菜单栏等(比如tab转移焦点)的键盘控制,这是此项目中比较迫切和核心的问题,而且牵涉到的方面比较多,不同于机械性的封装CreateWindowEx这样的API,没想清楚前不能轻易出手。大致上应该是象le中那样最常见的使用SetWindowsHookEx WH_GETMESSAGE这样的标准方法吧。
二,标签栏的工具提示问题,这个属于具体控件的细节功能问题了,谁有实际需求时自己加上去吧(也许就是我自己)。
三,目前LE浏览器就封装得不错了,没用什么控件。诚然,从提供WINDOWS内核API层以上的开源项目的角度看,LE项目走出了第一步,不过这个工程调试困难,VB6容易突然退出,而且项目的设计本身,更适合于一个示例使用,而非工程模板或类库。所以我试图走出第二步。 --------------------编程问答-------------------- 这样完全没有VB的优势,还不如直接用VC来弄。
因为UI的制作方便、快捷、简单是VB的亮点之一,
就这个程序的UI来说,在VB里完全不用写代码就可以很简单的制作出来,
封装这么多类和模块,实现的只不过是VB里无需代码就做出来的窗口,
有点方向走偏的感觉。如果走到后面,图形、网络、运算、多线程的控制
以及整体程序的运行效率,CPU的占用率,内存的控制都有很多的问题。
VB这么个弄法就合VC完全不是一种效果。
如果按这种思路想做这方面的东西,建议直接用VC来弄,在VC里封这样的
类还有点意义,在VB中这么弄,效率会比不用代码做出来的VB窗口还低。 --------------------编程问答-------------------- 呵呵,误会我的意思了,我的意思是标签栏的工具提示问题是个难题 --------------------编程问答-------------------- 对你说的"标签栏的工具提示问题"不清楚哦,在哪有详细说明呢 --------------------编程问答-------------------- 自己顶起,希望多几个人发表意见或相似作品:) --------------------编程问答-------------------- 集装箱也可以运煤炭,但是不适合。

用类封装实现的目的为了什么?

比如《高级Visual Basic编程》中的各类应用很复杂,但是都有明确的目的性——改善性能、变不可能为可能等。 --------------------编程问答-------------------- 目的还是明确的,封装控件. --------------------编程问答-------------------- 有现成的控件可用,再封装有什么意义? --------------------编程问答-------------------- 自带的那些控件大多并不支持unicode,有个msforms也用户体验不咋的,至于存在这些问题,还算不算"
有现成的控件",那就看各人的需求了 --------------------编程问答-------------------- 仅对 WebBrowser 而言是没有 Unicode 问题的。
你的需求太泛了,仔细划分一下。 --------------------编程问答-------------------- 自己封装的SysTabControl32控件怎么实现工具提示?假设就用其标题来做工具提示内容好了。我没看到有人做成功过,期待你的代码 --------------------编程问答-------------------- to #13: 是不是象windows任务栏那样可以给每个按钮提示的啊:)
to #12: 看来我的标题取得不大合适,可惜我没权限改了,改成这个应该比较准确些:
实现一个UNICODE支持的多页面窗口程序模板(如多页面浏览器)源码研究第一阶段:VB6下用类MFC方式封装常用windows控件的可行性 - VB / 网络编程 --------------------编程问答-------------------- 很多人说这样封装很无聊很无趣,呵呵,其实这就是VB的有趣之处。 --------------------编程问答-------------------- 差不多就是这个意思。我目前见到过的代码在工具提示这块就没实现过。vbAccelerator上的代码写了这段,但注释了,也就是没实现。 --------------------编程问答-------------------- 如果SysTabControl32封装得好,那就太好了,我的软件就不用带COMCTL32.OCX了,哈哈 --------------------编程问答-------------------- 关键是成本效益上不划算。
为了做顿饭,非要亲自种地养猪,而不是优先考虑从市场采购。 --------------------编程问答-------------------- Re #17:
不知像MFC,ATL,WINFORMS库对这方面封装得怎么样呢?

这几天比较忙,在把这个东西产品化为一个实用的小软件。只要有用户需求就好啊,有空时想办法搞啊。

--------------------编程问答--------------------   vbAccelerator是这样写的:

 Case WM_NOTIFY
      CopyMemory tNM, ByVal lParam, Len(tNM)
'      If (tNM.code = TTN_NEEDTEXT) Then
'          ' Tool tip doesn't seem to show....
'          Debug.Print "Need text", tNM.idfrom
'          sToolTipBuffer = "Test Tool Tip"
'           If (Len(sToolTipBuffer) > 0) Then
'                CopyMemory tT, ByVal lParam, Len(tT)
'                b = StrConv(sToolTipBuffer, vbFromUnicode)
'                ReDim b(0 To UBound(b) + 1) As Byte
'                b(UBound(b)) = 0
'                CopyMemory ByVal tT.lpszText, b(0), UBound(b) + 1
'                CopyMemory tT.szText(0), b(0), UBound(b) + 1
'                tT.hinst = 0
'                CopyMemory ByVal lParam, tT, Len(tT)
'           End If
'      Else --------------------编程问答--------------------
引用 18 楼 tiger_zhao 的回复:
关键是成本效益上不划算。
为了做顿饭,非要亲自种地养猪,而不是优先考虑从市场采购。

同意看法,但如果只是技术研究,我认为可以去尝试了解。
但是,如果想以这种开发思路在 VB 中继续应用下去,感觉不是很好。
虽然都是封装后使用,但VB的运行效率却不像以这种思路开发的C语言来得高。
小工程可能没什么感觉,但是东西多了就会发现这种方式不太适合 VB 这样的解释性语言。
虽然 VB 的功能是很强大,但是还是有很多不足之处的,不是什么东西都能用 VB 完全弄出来
而且稳定并且能保证运行效率的。
我认为,用某种语言就按照某种语言的思路去走,如果跳出这个范畴,
那么可能会带来很多问题,而这些问题中可能存在一些你不了解的不稳定因素,
而这些不稳定因素就是一个产品成败的致命伤。 --------------------编程问答-------------------- 这种封装SDK控件的方式在VB里面使用还是比较稳定的,效率上不够VC那是肯定的,但是也不会比OCX那帮东西慢。子类在VB中效率很低谁都知道,但是谁都在用,毕竟这种封装的控件创建出来也是基于VB的Form,而你子类了处理而已。

说不稳定的是,我尝试过VB完全模仿SDK开发,就是窗口、控件、消息处理全部自己写,这种方式如果开发单窗口或者就2、3个对话框的程序还是比较稳定可以接受的。

但是如果开发N个对话框以及多种控件多种功能混杂的程序,特别是那种系统管理类程序那就洗白了,经常无缘无故的出现根本没有任何理由的内存访问错误或程序崩溃,而出现这些错误的时候多数是操作了那些基于COMCTL32的通用控件。。。 

我尝试过VB模拟SDK开发一个有10多个窗口、键盘+鼠标钩子、回调、超类化等等VB根本不喜欢的东西,结果稳定性和执行效率十分低下。。。 --------------------编程问答-------------------- 我的建议是,对通用控件的WM_NOTIFY消息,能少处理则少,尽量使用标准的Windows消息处理这些控件,因为这消息需要大量的RtlMoveMemory操作很多时候就是无缘无故崩溃的所在。。。 --------------------编程问答-------------------- 恩,刚才无聊,hpygzhx520说的TabControl+ToolTip的模式我随便写了一下,还不错,这还是没有子类下的效果。

http://xykz.xy.ohost.de/ImageUpon/upload/201005141235283575925.rar --------------------编程问答-------------------- 用vb这样做产品很难成功的。
1。 没法调试,越到后面越难进行下去。
2。 程序极容易瘫痪,而原因几乎无法查找。

我的经验,用VB编程必须尽量避免使用API,尤其是那些所谓的事件处理API,什么HOOK之类的最好别用。 --------------------编程问答-------------------- 24楼的我测试了,并没有实现鼠标移动到各个TAB上显示不同的提示。
也许这还不是关键,如果用类似自己创建一个工具提示的方法,我觉得与前面的讨论封装精神不符。

关于稳定性与效率,见仁见智了,看看LE的成品吧,我觉得很好的。

是不是吃饱了无所事事去封装呢?不是的,因为很多情况下VB封装好的控件存在这样那样的不足或不方便,例如控件style和内存方面的问题。

总之,我觉得这个帖子适合喜欢这样封装的人研究技术用,如此而已。

--------------------编程问答--------------------
引用 21 楼 supermanking 的回复:
……

性能不是主要问题。
现在还有人称VB是解释执行的实在太无语了。 --------------------编程问答-------------------- 不反对研究,但是脚踏实地地来,理想和阶段性目标还是要分清楚的。
比如先做些单独封装的工具条、MDI标签等,等成熟了在拼到一起做成完整的产品。
一上来就什么都要封装,到时候出了错误都没有方向,最终又是不了了之。

应用技术方面首要是实用,纯粹为研究而研究缺乏后劲。 --------------------编程问答-------------------- 当然是冲着实用而研究的。举个例子,VB自带的工具条控件,直接使用6.0的吧,无法使用系统主题,使用5.0的吧,没有BTNS_DROPDOWN这样的按钮。即使也6.0,也没有BTNS_WHOLEDROPDOWN这样的按钮。还有如果用5.0,我想将标题放在图标右侧,怎么办呢?用API扩展吧……

与其扩展,还不如封装一个来得自由。个人观点。(因为你扩展后,如果增加、删除一个按钮后,之前的扩展可能会失效,又要设置一遍) --------------------编程问答-------------------- 老马到此一游.............. --------------------编程问答-------------------- 虽然用这种方式封装复杂的控件看起来有点划不来。但封装一些简单的控件,还是非常有意义,特别已经有人给出的这些代码,自已再改改。比如《高级Visual Basic编程》给出怎么WindowLess的窗口。这样的自定义控件就跟VB自带的一样了,不会有一个UserControl的Hwnd了。再如vbAccelerator封装大量的控件,但它的好像都Asin版的,应该可以改改,就成为Unicode的。
还有就是 结构指针 是可以不直接用RtlMoveMemory的,《高级Visual Basic编程》给出了ArrayOwner的模块,可以非常方便操作结构指针。 --------------------编程问答--------------------
引用 30 楼 myjian 的回复:
老马到此一游..............

我也来游一下…………

--------------------编程问答-------------------- 现在到哪个阶段了? --------------------编程问答-------------------- 正在基于这种方式做一个简单的整合桌面时钟功能和简单日程计划任务管理的小程序,很快就要挂淘宝上了.肯定里面用了自己封装了这些控件啦:) --------------------编程问答-------------------- 现在封装完成了吗?我期待带工具提示的SysTabControl32封装呢
补充:VB ,  网络编程
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,