從VC工程的rc資源中將資源檔案取出來或讀出來

2021-06-22 11:57:31 字數 2193 閱讀 2604

對於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 檔案用於...