home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

読書メモ/「APIで学ぶWindows徹底理解」/Part99 (v1)

読書メモ/「APIで学ぶWindows徹底理解」/Part99 (v1)

読書メモ / 「APIで学ぶWindows徹底理解」 / Part99 (v1)
id: 657 所有者: msakamoto-sf    作成日: 2010-05-22 17:28:05
カテゴリ: C言語 Windows 読書 

"APIで学ぶWindows徹底理解"でスルー気味だった「リソース」のサンプル集です。
この読書メモのスタンス、およびサンプルコードの入手については以下を参照して下さい。
読書メモ/「APIで学ぶWindows徹底理解」


【Part 99】「リソース」サンプル

アイコンやダイアログのデザイン、メニューや文字列を格納する"リソース"関連の情報は以下のMSDN Libraryに集約されている:
"MSDN Library" > "Windows Development" > "Windows Application UI Development" > "Windows User Interface" > "Resources"

リソースを取り出す時に使う "MAKEINTRESOURCE" マクロについて知りたい
... > "Resource Overviews" > "Resource Reference" > "Macros" > "MAKEINTRESOURCE"
カーソル/アイコン/メニュー/文字列 のリソース関連の関数について知りたい
... > "Resources Overviews" > "Resources Reference"
メニューやコンテキストメニューの作り方を知りたい
... > "Menus"
ダイアログボックスについて知りたい
"MSDN Library" > "Windows Development" > "Windows Application UI Development" > "Windows User Interface" > "Windows and Messages" > "Dialog Boxes"
Resource Compiler (RC.exe) の使い方について知りたい
"MSDN Library" > "Windows Development" > "Windows Application UI Development" > "Resource Compiler" > "Using RC (The RC Command Line)"
テキスト形式のリソースファイル(.rcファイル)について知りたい
"MSDN Library" > "Windows Development" > "Windows Application UI Development" > "Resource Compiler" > "About Resource Files"

サンプル解説("Part99_ApendixA\"フォルダ)

このサンプルに含まれている ".rc", "resource.h" は"ResEdit"で作成しています。

文字列リソースのサンプルその1("Part99_ApendixA\string_res01\"フォルダ)
string_res01.c, string_res01.rc, resource.h

コンパイル方法:

rc string_res01.rc
cl string_res01.c user32.lib string_res01.res

文字列リソースをLoadString()で取得し表示する簡単なサンプル。

文字列リソースのサンプルその2("Part99_ApendixA\string_res02\"フォルダ)
string_res02.c, string_res02.rc, resource.h

コンパイル方法:

rc string_res02.rc
cl string_res02.c user32.lib string_res02.res

FindResource(Ex)(), LoadResource()で文字列"テーブル"を直接取得し、16進ダンプするサンプル。

文字列リソースは、内部的には16個を一組とした「文字列テーブル」として管理される。LoadString()では文字列テーブルの中のデータを直接取得できるが、FindResource(), LoadResource()を使うと「文字列テーブル」として取得される。文字列テーブルとして取得した場合、内部には最大16個の文字列が格納されており、文字列一つ分を取り出すには文字列テーブルのバイナリデータを切り分ける処理を実装する必要がある。

参考:

また、このサンプルでは言語を指定してリソースを取り出す機能も試すことが出来る。
string_res02.rc ファイルには日本語・英語・デフォルトの3種類の文字列リソースを埋め込んでいる。 string_res02.c のソースコードでコメントアウトしてあるFindResourceEx()のコメントアウトを外し、代わりにFindResource()をコメントアウトすれば言語を指定してリソースを取得する準備が整う。

hResRc = FindResource(
    hCurrentInst, 
    MAKEINTRESOURCE(wBlockID),
    RT_STRING);


hResRc = FindResourceEx(
    hCurrentInst, 
    RT_STRING, 
    MAKEINTRESOURCE(wBlockID), 
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT)
);

第4引数で言語IDを指定出来るので、

MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)

で英語用のリソース、

MAKELANGID(LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN)

で日本語用のリソースを取得出来る。

メニューリソースのサンプル("Part99_ApendixA\menu_res01\"フォルダ)
menu_res01.c, menu_res01.rc, resource.h

コンパイル方法:

rc menu_res01.rc
cl menu_res01.c user32.lib menu_res01.res

メニューリソースを使ってメインメニューを構築するサンプル。

ダイアログボックスソースのサンプル("Part99_ApendixA\dialogbox_res01\"フォルダ)
dialogbox_res01.c, dialogbox_res01.rc, resource.h

コンパイル方法:

rc dialogbox_res01.rc
cl dialogbox_res01.c user32.lib dialogbox_res01.res

リソースエディタでデザインしたダイアログボックスを使ってみるサンプル。



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2010-05-22 17:41:33
md5:f98209974daf5835716de4a876a0e2c6
sha1:e93b8cbd101dc9bf6a803008fe7f806c4fbf543e
コメント
コメントを投稿するにはログインして下さい。