Programming Windows Maniacs - プログラミング ウィンドウズ マニアックス ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて  
ホーム >> 基本 >> カスタムリソースを使用するには

カスタムリソースを使用するには

  リソースには、定義されているビットマップやアイコン、ダイアログ等以外でも指定してEXEに取り込んでおくことができます。
  そしてプログラムからはいつでもそのリソースを取り出すことができます。

  取り出す際には、LoadResource () API を使用します。あとはお決まりの手順で中身を読み込むことになります。

  以下、サンプルになります。

 

■■■ customres プロジェクト
sample1.bin (4バイトのバイナリファイルです) ダウンロードはこちら
0x41, 0x42, 0x43, 0x00
resource.h
#define IDR_ABC 101
resrc.rc

#include <winres.h>
#include "resource.h"

IDR_ABC SAMPLE DISCARDABLE "sample1.bin"

main.cpp

#include <windows.h>
#include <tchar.h>

#include "resource.h"

// カスタムリソース IDR_ABCの中身
// 0x41, 0x42, 0x43, 0x00


// エントリポイント
int WINAPI _tWinMain ( HINSTANCE hThisInstance,
    HINSTANCE,
    _TCHAR *,
    int )
{
// リソースタイプが "SAMPLE" という種類のカスタムリソースの中の IDR_ABC を探す
    HRSRC hRsrc;
    hRsrc = FindResource ( hThisInstance, MAKEINTRESOURCE ( IDR_ABC ), _TEXT ( "SAMPLE" ) );
    if ( NULL == hRsrc )
    {
        MessageBox ( NULL,
            _TEXT ( "FindResource failed" ),
            _TEXT ( "Error" ),
            MB_OK | MB_ICONSTOP );
        return 0;
    }

// 探したリソースを読み込む
    HGLOBAL hGlobal;
    hGlobal = LoadResource ( hThisInstance, hRsrc );
    if ( NULL == hGlobal )
    {
        MessageBox ( NULL,
            _TEXT ( "LoadResource failed" ),
            _TEXT ( "Error" ),
            MB_OK | MB_ICONSTOP );
        return 0;
    }


// リソースの先頭ポインタを取得する
    void *pRes;
    pRes = LockResource ( hGlobal );
    if ( NULL == pRes )
    {
        MessageBox ( NULL,
            _TEXT ( "LockResource failed" ),
            _TEXT ( "Error" ),
            MB_OK | MB_ICONSTOP );
        return 0;
    }

// リソースの中身を表示
    _TCHAR *psz;


#ifndef _UNICODE // _MBCS のとき
    psz = new char[ lstrlen ( reinterpret_cast < char * > ( pRes ) ) + 1 ];
    wsprintf ( psz, _TEXT ( "%s" ), pRes );
#else // _UNICODE のとき
    UINT nSize;
    nSize = mbstowcs ( NULL, reinterpret_cast < char * > ( pRes ), 0 );
    psz = new wchar_t[ nSize + 1 ];
    memset ( psz, 0, sizeof ( wchar_t ) * ( nSize + 1 ) );
    mbstowcs ( psz, reinterpret_cast < char * > ( pRes ), nSize );
#endif
    MessageBox ( NULL,
        psz,
        _TEXT ( "リソースの中身" ),
        MB_OK );
    delete[] psz;

    return 0;
}
  ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて Copyright © 2014 A.Morita