對於rc資源中常見的型別:bitmap、cursor和icon,可以用loadbitmap、loadcursor和loadicon將它們載入到記憶體中,或者統一使用loadimage api函式也可以。但是對於自定義型別的png、zip(在新增檔案到資源中時會提示設定資源型別),則沒有專門的函式來使用。loadimage
僅僅是支援bitmap、cursor和icon
三種型別。
那應該如何將自定義型別的資源檔案從rc資源載入到記憶體中或者匯出呢?對於自定義型別的物件,可以使用findresource、loadresource、lockresource和sizeofresource等api函式來處理。大致的處理流程如下:
(i)先呼叫findresource
,根據資源id和資源型別(注意:這個資源型別就是在資源中新增檔案時提示輸入的資源型別標識串,比如下面**中的「png」和「zip」),找到資源資訊塊控制代碼;然後將控制代碼傳給loadresource
去載入資源,將資源載入到全域性記憶體中,注意此時不能直接操作返回的記憶體控制代碼;呼叫lockresource將資源資料鎖住後再使用記憶體中的資料,進而可以進行資源的資料的拷貝或匯出操作了;可以呼叫sizeofresource
得到資源檔案的大小。
(ii)當然在事務處理完之後,要呼叫unlockresource解鎖,最後呼叫freeresource將呼叫loadresource申請的記憶體釋放掉。
為了說明相關函式的使用方法,下面給出從rc資源載入到記憶體中或者匯出的例子**。
1、將png讀出到cimage物件中
由於png可以做到很多透明效果,介面用png後效果非常好,所以現在很多軟體都會使用到。png在高版本的vs中都使用cimage類來載入,相關**如下所示:(**中的lpsztype為「png」)
cimage* cimageutility::loadcimage( uint nid, lpctstr lpsztype, hinstance hinstance )
else
} cstring strlog;
hrsrc hrsrc = ::findresource ( hinstance, makeintresource(nid), lpsztype );
assert( hrsrc != null );
if ( null == hrsrc )
dword dwsize = ::sizeofresource( hinstance, hrsrc);
lpbyte lprsrc = (lpbyte)::loadresource( hinstance, hrsrc);
assert( lprsrc != null );
if ( null == hrsrc )
// 後面採用流載入的方式使用到了createstreamonhglobal,它需要使用hglobal記憶體
hglobal hmem = ::globalalloc( gmem_fixed, dwsize );
if ( null == hmem )
lpbyte pmem = (lpbyte)::globallock( hmem );
if ( null == pmem )
memcpy( pmem, lprsrc, dwsize );
istream * pstream = null;
hresult hr = ::createstreamonhglobal( hmem, false, &pstream);
if ( pstream != null && hr == s_ok) }}
return pimage;
} else
}else
}2、將zip壓縮檔案匯出到磁碟上
對於程式安裝包來說,安裝到目標安裝路徑的檔案是要放到exe安裝包中的,那怎樣才能塞到安裝包中呢?將相關的檔案打包成zip檔案,作為資源新增到資源列表中,啟動安裝的時候再從資源中取出來,釋放到磁碟上在解壓,然後執行檔案的拷貝操作。從資源中匯出檔案的相關**如下所示:
void cprocesslogic::exportresfile( cstring strexportpath )
::unlockresource(hglobalsys);
::freeresource( hglobalsys );
}
至於怎麼解壓zip包,使用網上常用的unzip.cpp檔案即可。 VC工程之間資源復用
vc工程之間資源復用 經常用vc程式設計,有些工程之間的資源想要復用,這時有一下方法可以達到 假使有 vc 工程 proa 和 prob prob想用到proa中的東西 方法二 在prob中以edit的方式 就是直接開啟 開啟proa中的rc檔案,複製出窗體資源,貼上到目標prob的rc檔案中,然後...
工程化系列 Windows資源檔案rc定義和使用
date 2018.6.23 統一資源管理 在win32程式設計中,為方便專案中的資源統一管理,提供了乙個格式統一的資源檔案.rc,對各種資源進行管理。它的副檔名是.rc,在程式編譯時它會被資源編譯器編譯生成乙個.res的二進位制檔案。rc檔案的語法 1.注釋 注釋方式和 c 語言相通,單行注釋用 ...
VC工程中的 rc檔案和 rc2檔案的區別
rc和rc2都是資源檔案,包含了應用程式中用到的所有的資源。而rc2中的資源不能在vc的整合環境下直接進行編輯和修改,而是由根據需要手工地進行編輯。在下面的位址找到關於rc2檔案的描述 rc2檔案 包含專案使用的附加資源的指令碼檔案。可以在專案的 rc 檔案的頂部包括 rc2 檔案。rc2 檔案用於...