概要
Win32 APIのリソースIDの定義や操作で使用されるマクロの簡単な情報です。具体的には次のマクロの概要を説明します。
- IS_INTRESOURCE
- MAKEINTRESOURCE[A/W]
リソースIDは環境(32、64ビットあるいはA/W)に関わらず、16ビットの範囲内にあれば整数型、それ以外は文字列型(文字列へのポインタ)や特殊項目のID(ポップアップメニューやセパレータのID)として扱われます。
IS_INTRESOURCE
#define IS_INTRESOURCE(_r) ((((ULONG_PTR)(_r)) >> 16) == 0)
IDが整数型であれば真、文字列型(文字列へのポインタ)であれば偽を返します。具体的には与えられた値(整数やポインタ)が16ビット以下の範囲内(16ビット整数)に納まるかどうかを確認します。このマクロの戻り値が偽の場合、IDは文字列型あるいは特殊項目のIDです。
MAKEINTRESOURCE[A/W]
#define MAKEINTRESOURCEA(i) ((LPSTR)((ULONG_PTR)((WORD)(i)))) #define MAKEINTRESOURCEW(i) ((LPWSTR)((ULONG_PTR)((WORD)(i)))) #ifdef UNICODE #define MAKEINTRESOURCE MAKEINTRESOURCEW #else #define MAKEINTRESOURCE MAKEINTRESOURCEA #endif // !UNICODE
整数型のID(16ビット整数)を文字列型に変換します。A/W版の違いは戻り値のポインタの型がLPSTRとLPWSTRのどちらにキャストされるかだけです。
参考
1.Menus and Other Resources - MSDN 1.Resource Macros - MSDN
2021/3/10:この記事は別のブログで投稿した記事を移動したものです。