【舊資料整理】MFC–6小時嘗試,html資源終於成功引用exe內部bmp資源

NO IMAGE

資料時間:2009-12-02之前

分享時間:2009-12-02到百度空間,空間關閉,重新整理

先把解決辦法放在上面,那段漫長的痛苦的探索過程寫在後面吧:

 

html資源引用exe內部bmp資源方法:

        1.將html載入到資源中,html在exe中的組織形式就是在同一目錄,可以直接互相引用.格式為”ID”.ID是html資源的id,不能是檔名.

        2.將bmp載入到資源中.bmp和html不是同一型別,也不在同一目錄,型別標識是2.

網頁中引用bmp時用”../2/ID”形式.id是bmp資源的id,同樣不是檔名.


下面對我這段漫長的探索過程發發牢騷吧: 

       今天做掃雷的幫助檔案,打算以網頁形式顯示在視窗.為了讓最終的作品只有一個檔案,所有用到的檔案都匯入到資源,連結後會整合到exe檔案中.

       上網查,搜了好大一會找到的結果多是新增CHtmlCtrl控制ChtmlView,這根本不符合我的情況,因為我只是想顯示一個固定的網頁檔案,沒有必要弄那麼複雜.

        沒辦法了,還是靠自己吧.檢視msdn,看了一會英文,實在是看不下去.只得再想別的辦法了.回頭看自己的工程目錄,發現mfc自動生成的view類和自 己新增的view類不一樣.這下啟發了我.於是自己新建個工程,嚮導過程將view類繼承CHtmlView,執行後發現它恰好開啟了一個網頁.回頭看代 碼,發現它在OnInitialUpdate()中呼叫了ONavigate2().這下好了,模仿著做吧.重 截虛擬函式OnInitialUpdate(),呼叫ONavigate2().檢視msdn中ONavigate2()的介紹,又有問題了.這個函式是開啟網址的,我要將html載入到資源中,肯定行不通了.上網查了會怎麼載入html資源,又沒有結果,沒辦法,回到msdn.仔細想想,既然
ONavigate2()是按路徑載入網頁,那它所屬的一類函式肯定是和載入網頁有關了,看看此型別中的其它的函式,果然發現了 LoadFromResource().不用多看介紹了,從字面意思也能知道找對了.呼叫,成功載入,顯示html資原始檔.

       舊問題剛解決,新問題又來了.載入到到exe裡面的網頁地址肯定和普通檔案格式不一樣.網頁裡面的圖片格式失效了.繼續上網查,大部分解決辦法都是將圖片以html格式載入到資源,這樣它就和html資原始檔在同一目錄了.並在html檔案頭部加入<BASE url =”res://ShowHtml.exe/about.htm”>語句指定檔案當前路徑.這肯定不是我想要的了,我是要對已經載入的bmp資源做 說明,如果再以html格式載入一份,太浪費資源了而且ShowHtml.exe是檔名,使用者可能會更改的,這個不能固定.上網查肯定找不到辦法了,自
己嘗試著解決吧.

       先解決當前路徑說明這個問題.html檔案中的變數立馬想到了javascript.參考著資料兼上網查詢,很容易就寫出了獲得檔案當前路徑的程式碼,加到了html檔案開頭.

      接著解決引用資源中的bmp問題.上網查沾邊的結果都沒有,自己嘗試吧.先載入一個html資源,再在網頁中加個連結,連結到已載入的html中.執行程 序,成功開啟.說明這兩個檔案是在一起的.檢視屬性,驚奇發現它們的路徑就是”檔名.exe/id數值 ” 格式.這下好了,將圖片的路徑改為對應的id數值,測試,結果不對.馬上想到它們是不在同一目錄的.上網查資源的組織格式,還是沒有結果.再靠自己一次 吧.看下vc中的資源組織格式,很有邏輯.猜想exe中也是這樣組織的吧.將圖片的地址改成”../Bitmap/ID”格式,測試,不對.本來也沒對這
個成功的結果抱多大希望,exe是二進位制的,用字串表示路徑肯定行不通.哎?對了,字串不行,二進位制表示唄.可是微軟肯定沒那麼笨直接把字串轉換成 二進位制,肯定是用一組無符號整數區分資源格式的.bmp對應的整數是多少呢?

      上網查,更是沒沾邊的.但也發現了一個檢視exe裡資源的工具.下載.一連點了4個連結,自動開啟了3個網遊廣告,安裝了一個網路電視軟體,新增了一個網站快捷方式,360了攔下了一個主頁篡改 ,終於點到了軟體的下載地址了.這個破網站,氣死我了.

       執行軟體,又白忙活了,軟體自動把資源型別轉義成字串了,和vc沒啥區別.只是html資源對應23.雖然收穫渺茫,但是大有啟發.肯定是前幾個資源太 常見了,它轉義,html資源不常見,它就沒轉義.所以bmp對應的型別標識肯定比23小.一個個試吧.先測試下23猜的對不對.將連結到第二個html 的連結改成”../23/*.html”格式,執行,點開.ok,地址變成”RichMIne.exe/23.*html”格式了.接著就猜bmp的標 識.從後向前,22,21,20都不是.從頭向後,0,1也都不是.有點懷疑自己的猜想了.沒辦法,寫一個html檔案,從2到20都全寫進去,執行.哈
哈,圖片出現了,還竟然是第一個.我的天啊,太氣人了吧,再多試一個不就出來了嗎.

調整程式碼,執行,確實成功了.不過有個疑問,.exe後面的路徑部分已經是相對的了,html前面當前檔案路徑說明是做什麼的?好像並沒用.刪 了一試,果然沒有用.哎,要不是被我發現了,.險些被騙了.

 

至此終止,一番查詢,猜想,嘗試,我終於解決這個問題了.