作者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