目次へ戻る

プログラム中からのアイコンの読み込み

Red では、扱っているアイコンの種類に応じて、2種類の格納手法を用いています。

アイコン一覧ウィンドウでのグループ 格納手法
Type Icons BNodeInfo::SetIcon(), BAppFileInco::SetIconForType()
Icons type-code:'RIcn' ID:0 のリソース

後者をプログラム中からのアイコンデータの読み込むためには、
リソースからデータを読み出し BMessage を経由して BBitmap を生成する必要があります。

アイコンデータを復元するには、一般的に下記のような手法を用います。
詳しくは付属のサンプルプログラムを参照してください。

=============================================================================
リソースデータからアイコン群を復元して管理するクラスの例
=============================================================================

作成したリソースデータをプログラム中で読み込むための例を示します。
リソースは、アプリケーションファイルに組み込まれているものとします。

class SIcons {
public:
                        SIcons();
        const BBitmap   *Bitmap(int32 index) const;
                        { return static_cast<BBitmap *>(mList.ItemAt(index)); }

protected:
        BList           mList;
};

SIcons::SIcons()
{
    status_t    status;

    app_info    info;
    status = be_app->GetAppInfo(&info);
    if (status != B_OK) return;

    BFile   file;
    status = file.SetTo(&info.ref, B_READ_ONLY);
    if (status != B_OK) return;

    BResources  resources;
    status = resources.SetTo(&file);
    if (status != B_OK) return;

    size_t  size;
    void  *p = resources.FindResource('RIcn', 0, &size);
    if (p == NULL) return;

    BMessage    msg;
    status = msg.Unflatten(static_cast<char *>(p));
    free(p);
    if (status != B_OK) return;

    int32       index = 0;
    BMessage    archive;
    while (true) {
        status = msg.FindMessage("icons", index++, &archive);
        if (status != B_OK) break;
        BBitmap     *bitmap = cast_as(instantiate_object(&archive), BBitmap);
        if (bitmap) mList.AddItem(bitmap);
    }
}
目次へ戻る
Copyright (C) 1998 Earth Soft, All rights reserved.