2007 年 8 月 18 日 23 時 57 分

リソースの作成


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


今日は、必要なリソースを作成しよう。

scrnsave.lib を使う場合、
以下のリソースが必要である。

・ID が IDS_DESCRIPTION (1) の文字列
・ID が ID_APP (100) のアイコン
・ID が DLG_SCRNSAVECONFIGURE (1002) のダイアログ

Windows でリソースを作る場合、
まず、リソーススクリプト (*.rc) を作成する。

統合開発環境 (IDE) やリソースエディタがある場合、
GUI で簡単に作ることができるのだが、ここは mixi。
リソーススクリプトの実体はテキストなので、
テキストエディタで書くことにしよう。

========== resource.rc ==========

#include <winres.h>
#include <scrnsave.h>

LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT

/* String */

STRINGTABLE
BEGIN
    IDS_DESCRIPTION "デモセーバー"
END

/* Dialog */

DLG_SCRNSAVECONFIGURE DIALOGEX 0, 0, 195, 127
STYLE   DS_SETFONT | DS_MODALFRAME | WS_POPUP |
        WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "設定"
FONT    9, "MS UI Gothic"
BEGIN
    DEFPUSHBUTTON "OK", IDOK, 84, 108, 50, 14
    PUSHBUTTON "キャンセル", IDCANCEL, 138, 108, 50, 14
END

/* Icon */

ID_APP ICON "program.ico"

========== end of resource.rc ==========

リソーススクリプトでは、C 言語のプリプロセッサ構文の、
#include を使うことができる。
これを使うと外部ファイルを取り込む事ができる。

ただ、C 言語と異なり、#define で定義された、
単純なマクロ定義だけを ID の定義として使ってくれる。
そのため、<windows.h> 等を取り込んでも問題ない。

scrnsave.h には、scrnsave.lib 固有のリソース ID が、
winres.h には、一般的な ID が定義されているので、
#include で取り込んでおく。

リソースは日本語用なので、LANGUAGE で指定しておく。

文字列リソースの定義は STRINGTABLE BEGIN から始まり、
その間に「<ID> "文字列"」の行を並べ、
最後に END で終端する。

リソーススクリプトでは、改行も空白も同じ扱いなので、
改行はやタブは見やすくするためだけのものだ。

ダイアログリソースは、ID から始まり、
DIALOGEX 左座標、上座標、幅、高さが続く。
後は、BEGIN の前に好きなだけ属性を書ける。

STYLE はダイアログボックスのウィンドウスタイル。
今回は、一般的なダイアログボックスのスタイルだ。
CAPTION でタイトルを設定し、FONT でフォントを指定。
9 ポイントで、フォント名は 「MS UI Gothic」とした。

本当は、8 ポイントの「MS Shell Dlg」を使いたいところ。
「MS Shell Dlg」とは実際のフォントではなくエイリアスで、
システムの沿ったダイアログの既定のフォントを示すからだ。

しかし、日本など、東アジア版の Windows 95/98 では、
MS Shell Dlg によるマッピングがうまくいかないため、
特定のフォントを明示することにした。

BEGIN と END の間は、ダイアログボックスの中身。
今回は、単純にボタンが 2 つだけ。
DEFPUSHBUTTON は既定の押しボタン。
PUSHBUTTON は普通のボタンだ。

既定のボタンである「OK」の ID は IDOK、
普通のボタンである「キャンセル」は、IDCANCEL。
IDOK や IDCANCEL という ID はよく使われるため、
<winres.h> で事前に定義されている。
これを必ず使わないといけない訳ではないが、
一般的なダイアログの慣習に沿ったまでだ。

最後のアイコンリソースはテキストだけで書けないため、
アイコンファイルを外部に作り、そのパスを指定する。
指定方法は簡単で、「<ID> ICON "パス"」である。

ここでは、program.ico という名前のアイコンを作った。
別に何でも構わないので適当に、
一応、zip 圧縮して Base64 をかけたものを、
日記の最後に乗せとくか。多分、将来の自分用に。

さて、リソーススクリプトができたら、
それをリソースコンパイラでバイナリ形式に変換して、
リソースファイル (*.res) を作る。

$ rc /r /fo resource.res resource.rc

rc.exe がリソースコンパイラだ。
rc は色々な機能を持っているが、
今回は純粋にバイナリ形式にコンパイルするだけなので、
/r を指定し、/fo で出力ファイル名を指定する。
スイッチではない引数は、リソーススクリプトだ。
これで、3 つのリソースを含む resource.res ができた。


========== program.ico.zip.b64 ==========

UEsDBBQAAgAIAN0BBDfUL8X0XQEAAP4CAAALAGkAcHJvZ3JhbS
5pY29TRFQAkAAAAAAIAL6JiV1jZGBpEWFgYDBggAAfIGZkBTNZ
RYFEzWsV3qSYPWw/5m8pec2MW46RiYGBicEFiIFAQILhP6M8Ay
MTRK0CkFAAsQVUIOJ4zAcAVVQNAAdxRrNG4WfCRnFfwkaFUb1O
AzEMdgsSbO7EwtAbeQSkDscLMDIy8ACVWFFprgvP0XfgAbiTGF
iQOrKgBgmhQ0LiIpZ2KDX+yaWFBSeO/+LPjgPQ4ZVlPQDYhfcu
wAFrR8wZ8wlzh/1KXUjUi2w00Q2TiQlZrFRVxVI8pBuITMgSlx
wAW0o0f7mwVcJGIPGJFhYO6g2tHW9idGILHGNB0xWGzNaTi5oI
4uVkkgRxi0S7RH9sUAhse5CD1A7BSkdIeZBQxNPnxTgGJtiyub
0QW0GF4XHF1lF6RTaTrcCY4taJDS3hx5Fo6ZDGYyG0Z+t0pBrK
IhtOEFSF5hppwpQ+CTcfRO28NdEowP9EFV/Md2hJ37RYOmrqom
g8TX1Jjb+gFz9cPPjTeuAHH+M+8/2oHj+PnpwfV+CP0c3PZm5+
03fnj6Ub3pbucr90dy5386K49gVdNf312+fr8vBrtbdY0axZ5/
l0DVC0Pf4AUEsBAhcLFAACAAgA3QEEN9QvxfRdAQAA/gIAAAsA
EQAAAAAAAAAgALaBAAAAAHByb2dyYW0uaWNvU0QEAJAAAABVVA
UAB3FGs0ZQSwUGAAAAAAEAAQBKAAAA7wEAAAAA

========== end of program.ico.zip.b64 ==========



Copyright (c) 1994-2007 Project Loafer. All rights reserved.