BCB 2009之後 使用 rc資源檔的正確作法 |
|
hipig
高階會員 ![]() ![]() ![]() ![]() 發表:31 回覆:75 積分:111 註冊:2007-01-15 發送簡訊給我 |
首先,網路上一堆資料都太舊了,連本站資料也是,而且本站經利多次升級很多原先用 code標籤的程式碼都殘缺不齊
使用 rc/dll資源非常方便的可以把想要的資料包進程式裡,雖然會增加空間,但在小型程式上非常好用。 網路上可以搜尋到的例子不外乎是包bmp檔,包wav還有不知道原作是誰的包unzip。 首先不需要自己建立 rcs檔案,在BCB IDE中直接點選 Project -> Resources即可(你要用終端機敲brcc32也行,這是老方法) 呼叫資源的方式bmp wav之類大同小異沒有特別的,這邊要注意是 RAD2009之後全面 unicode,所以在網路上能找到的code大多數都會賞你一個型態錯誤導致編譯失敗。 這邊舉個 rs資源內嵌字型檔然後應用的實際例子 https://gist.github.com/kikiqqp/4aa5ef6879f4e8d6a4dfec83ec4f5714 [code cpp] void __fastcall TForm1::FormCreate(TObject *Sender) { char exefile[100], tmppath[100]; unsigned long ret; GetTempPath(100, tmppath); strcpy(exefile ,(AnsiString(tmppath) AnsiString("bold_led_board-7.ttf") ).c_str()); ret = GetFileAttributes(exefile); if(ret == 0xffffffff ) //檢查temp目錄下是否有此字型 { TResourceStream &rs = *new TResourceStream(UINT(HInstance), UnicodeString("F1"), (System::WideChar*)RT_RCDATA); rs.SaveToFile(AnsiString(exefile)); delete &rs; } //載入特殊字型 AnsiString Test = AddFontResourceEx(exefile, FR_PRIVATE, 0); SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { char exefile[100], tmppath[100]; GetTempPath(100, tmppath); strcpy(exefile, (AnsiString(tmppath) AnsiString("bold_led_board-7.ttf")).c_str()); //取消掛載字型 RemoveFontResourceEx(exefile, FR_PRIVATE, 0); SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); } //--------------------------------------------------------------------------- [/code] 天下文件一大抄的錯誤之一是 HInstance 很多都寫成Hinstance AddFontResource改用 AddFontResourceEx 另外 ResourceStream的部份也要注意,這邊已經跟過去的宣告方式有一點點不同,因應 unicode化要做些需調整。 最後 rc資源對 font的定義其實跟熟知的有差異,所以還是用RCDATA來處理吧 期待本站度過下一個10年然後 code不要再亂掉 編輯記錄
hipig 重新編輯於 2018-04-26 13:57:45, 註解 無‧
|
GrandRURU
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |