看板 PCman 關於我們 聯絡資訊
很抱歉我可能要說一下,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)
HanJyi:作者好辛苦..這篇要m起來,走open source 推 140.123.181.92 01/30
kjol:ms暗槓太多"獨門"程式碼 推 218.164.35.157 01/30
advicer:MSDN很好用... 推 140.123.254.21 01/30
HZYSoft:MSDN是好用,但有些東西確實也沒有... 推 140.129.59.3 01/30