作者HZYSoft (pcman.ptt.cc)
看板PCman
标题[公告] 关於 PCMan 2004 支援浏览器的版本
时间Fri Jan 30 04:18:40 2004
很抱歉我可能要说一下,PCMan 2004 Pro对於Web的功能不会有多少改良
底下我做一些说明,希望大家一定要抽空阅读一下罗
使用IE内嵌的程式设计方式和一般视窗程式相当不同,PCMan 2003 Pro
是使用MFC包装过的Component,实际上没有这个现成的元件,我是写不出来的
但说他现成,他其实封装的很原始,只有基本功能而已,其他东西还得自己来
不要说是我,就连有五个人一起写的KKman也是用MFC包好现成的CHtmlView
我不是,我是用VC++的功能,用MFC包装更底层的ActiveX Control
那是VC++直接引用ActiveX元件,然後产生对应的CWebBrowser2元件,很难用
但这不是重点,重点是IE相关的程式设计牵涉甚广,就连有多年经验的人
也不见得可以深究其中细节,要写IE相关的程式不是只要C++,VC++,MFC等视窗程式经验
要动到稍微进阶的功能的话,就要从头学COM (compenent object model)
他不是程式语言,只是一种微软定义的介面,用各种语言都可以写,在VB里最简单,
Delphi也有不错的支援,至於VC++...就要玩硬干的,或是ATL会比较方便,
但那又完全是另一套新的东西...@@ 尤其要使用IE的东西,文件相当缺乏
大家一定不知道,但实际上连网页内寻找的功能,微软都没开放出来,
那为什麽各家使用IE内嵌的软体都可支援? 你们可知道这是官方文件没记载的东西?
当初在网路上找了好久好久好久,最後才找到一段英文的 undocumented command
还要自己额外定义某个常数,这才把它给支援出来,我写这程式,VC++提供的东西
包括文件根本就不够用,查遍网路就是没有资料,我又没学过COM
COM是个很诡异的技术,是跨语言甚至理论上可跨平台的概念,以各种元件封装
艰涩难懂,很不人性化,整个IE,还有Windows shell都是用COM构成的,
没有坚强的COM/OLE底子,根本不可能写这类程式,何况还要不断阅读"丰富"的文件
重点是还不一定找的到资料,COM里面没有在C++熟析的"物件指标",一切都是"介面"
每要用一个小东西,就要QueryInterface,然後取得虚拟函数介面指标,
接下来又是一场恶梦,混战之後还要记得Release刚取得的指标,否则资源会没释放
整个的COM和我们一般人熟析的程式设计方式完完全全的不同,更是复杂难懂
而 IWebBrowser2 只是一个操作浏览器的介面,要操作文件内容或是视窗,就要
在Query其他interface,一堆莫名奇妙的东西,我贴一行程式码上来你们就了解
我干麻这样抱怨,真是有够丑,每次用某个interface都要先query还要检查有
没有支援该介面,如果有才继续,最後还要记得释放,问题是搞不清楚这些在干麻
IHTMLDocument2* pHTMLDoc=NULL;
if( SUCCEEDED(lpd->QueryInterface(IID_IHTMLDocument2,(void**)&pHYMLDoc)) )
{
IHTMLWindow2* pWnd=NULL;
if( SUCCEEDED( pHTMLDoc->get_parentWindow(&pWnd)) )
pWnd->Release();
pHTMLDoc->Release();
}
看起来是C++语法,骨子里用的东西全都是COM的架构,去看相关文件一看当场傻眼
难怪KKman也选择用MFC包装好的现成元件...直接去写一堆这种东西会爆炸的?
我看了好久的文件还是找不出很多东西到底要怎麽做,只能说MyIE那些软体作者是神
我看过MyIE的code,其实真的写的很丑...进阶功能全部都是用COM,
一般视窗的部份我都看的懂也会做,但是牵涉到浏览器的部份就看不懂
这想必也是为何KKman只能支援到基本Web功能,因为他跟我一样是用现成元件去写
那为何GreenBrowser这麽强? 大家可知道他不是一个人写的? 他源自於MyIE
中间经过太多人的陆续修改,大陆人真的好强! 传闻MyIE原作者因法轮功被捕死亡
其中一些很方便的Web功能,我还真的查不到它是怎麽做到的,相关文件太多
很多东西却是完全找不着,像MyIE程式码当中,网页内容寻找的部份,很巧
跟我在网路上最後找的英文文件给的那一段,完全一模一样,连注解,变数名都相同
不用说也知道,是直接复制贴上的,这种东西,没有参考资料根本不可能有人会写
我猜写KK人的作者搞不好跟我找到的也是同一份文件 :) 或是它也参考了MyIE?
总之我要说的是,之所以只支援很阳春的Web功能,实在不是不愿意做,而是...
那真的不是人干的,你们哪位要写留给你们写吧,我要吐血了 ╮(﹀_﹀")╭
找不到相关文件真是无从写起,你们相信吗?用了MFC提供的Event Sink包装之後
居然引发Multithreading相关问题,这些微软的文件上根本半个字都没写,
是我一再无故当机却找不到bug,花了无数时间debug才发现的,别太苛求了吧!
其实我真的也只是初学者而已...会的东西不过基本视窗程式设计而已
很多东西也一直在摸索,并不是像很多人以为的高手,这点是一定要澄清的
眼看假期又要用完,PCMan 2004还是难产啊...所以有人再问我浏览器功能的话
我的回答,就请看下一篇文章....
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.129.59.3
※ 编辑: HZYSoft 来自: 140.129.59.3 (01/30 04:20)
1F:→ HanJyi:作者好辛苦..这篇要m起来,走open source 推 140.123.181.92 01/30
2F:→ kjol:ms暗杠太多"独门"程式码 推 218.164.35.157 01/30
3F:→ advicer:MSDN很好用... 推 140.123.254.21 01/30
4F:→ HZYSoft:MSDN是好用,但有些东西确实也没有... 推 140.129.59.3 01/30