このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
ISaver を実装しているプラグインが複数ある場合、
実行に使うプラグインを決めなければならない。
これを決めるのはもちろん利用者なので、
その設定を行うプラグイン管理画面が必要となる。
ということで、ホストのダイアログボックスを改造し、
好きなプラグインを選択できるようにしてみよう。
リソースファイルを書き換え、
スクリーンセーバーの名前と、
ダイアログボックスの定義を書き換える。
========== resource.rc ==========
#include <winres.h>
#include <scrnsave.h>
#include "resid.hpp" // 追加
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
/* String */
STRINGTABLE
BEGIN
IDS_DESCRIPTION ".NET Saver Manager"
END
/* Dialog */
DLG_SCRNSAVECONFIGURE DIALOGEX 0, 0, 247, 63
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER |
WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "プラグインの選択"
FONT 9, "MS UI Gothic"
BEGIN
LTEXT
"プラグイン (&P):",
IDC_STATIC, 12, 15, 43, 8
COMBOBOX
IDC_PLUGINS, 60, 12, 114, 150,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON
"設定(&C)...",
IDC_CONFIGURE, 186, 12, 50, 14
DEFPUSHBUTTON
"OK",
IDOK, 126, 42, 50, 14
PUSHBUTTON
"キャンセル",
IDCANCEL, 186, 42, 50, 14
END
/* Icon */
ID_APP ICON "program.ico"
========== end of resource.rc ==========
正直、これくらいになってくると、
素直に IDE のダイアログエディタを使った方が早いが、
手書きにこだわってみる。
LTEXT は左寄せのラベル(スタティック)コントロール
COMBOBOX はその名の通り、コンボボックスだ。
OK やキャンセルのように、汎用的なボタンには、
定義済みのコントロール ID を付けることができるのだが、
プログラムによって用途が異なるコントロールには、
自分で ID を定義して付与してやる必要がある。
そのために resid.hpp というファイルを作り、
そこにダイアログコントロール用の ID を定義し、
resource.rc から #include しておく。
========== resid.hpp ==========
#ifndef z_loafer_screensaver_host_resid
#define z_loafer_screensaver_host_resid
#define IDC_PLUGINS 1000
#define IDC_CONFIGURE 1100
#endif // !z_loafer_screensaver_host_resid
========== end of resid.hpp ==========
ID を #define しているだけのファイルだ。
この ID は、プログラムでも参照するため、
独立したファイルにしておくと便利になる。
なお、リソースを Visual Studio IDE で編集した場合、
resource.h という同様の役割のファイルが作られるはずだ。