Windows API - GUI プログラミング編 第3回 〜リソースとダイアログ〜

リソーススクリプトとリソースヘッダ

リソースは、Windows 実行ファイル内に含ませることのできるデータのことを指します。

通常のソース中ではなく、.rc 拡張子のリソーススクリプトと呼ばれるものに記述を行います。

リソース識別子

リソースの1つとして、まず、文字列データを取り上げます。

リソースを識別するために、#define で識別子を指定しますが、これを、"resource.h" という ファイルに記述します。

#include IDS_STRINGDATA 101

リソーススクリプトでは、これを #include で読み込んだ上で、 STRINGTABLE というものに 記述を行います。

#include "resource.h"
STRINGTABLE
BEGIN
 IDS_STRINGDATA "StringData"
END

テキストリソース

ソースファイル内で、リソースを読むためには、LoadString() API 関数を用います。

#include "resource.h"

...

WCHAR buf[100];
LoadString(hInstance, IDS_STRINGDATA, buf, 100);

...

第1引数はインスタンスハンドル、第2引数がリソース識別子、第3引数がバッファで、 第4引数がバッファ長となります。

カスタムリソース

リソーススクリプトには、任意のデータをリソースとして記述する事が出来ます。

ResourceID  ResourceType  ResourceFile

ResourceID が識別子で、ResourceFile がリソースファイル名を表します。 ResourceType にリソースの種類となります。

ソース側では、まず、FindResource() API 関数を用いて、リソースハンドルを発行します。

HRSRC FindResource(HMODULE, LPCTSTR, LPCTSTR);

第1引数はインスタンスハンドル、第2引数がリソース識別子、第3引数がリソースタイプとなります。

ここで発行されたハンドルを用いて、LoadResource() API 関数を用いてリソースをロードします。

HGLOBAL LoadResource(HMODULE, HRSRC); 

実際に、リソース内のデータを参照する場合、

LPVOID LockResource(HGLOBAL);

という API 関数を呼ぶことで、LPVOID 型のデータが取得できます。

メニューバー

ダイアログ


文章作成 : yukki-ts (-+-twilight serenade-+- [stage])