このアーカイブは同期化されません。 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 ==========