リソース・スクリプトを手書きで作るのはいかにも大変です。いろいろ探してみると、フリーのリソース・エディタがありました。
ベクターなどで 「BCCForm and BCCSkelton」を検索してみてください。これは、ysama氏のフリーソフトです。
さて、BCCForm and BCCSkeltonを解凍する時、解凍先ディレクトリが意図しないところになってしまう場合があるので注意してください。「解凍したファイルが無い!」という場合は、Windowsの
検索機能で探してみてください。
いくつかのexeファイルが解凍されていると思いますが、ここで使用するのはBCCForm.exeです。
まず、これを起動してみましょう。
今回はマイドキュメントの中のMyProjectBCCフォルダ中に
form01というフォルダを作っておきます。
手動で作成するか、またはBCC Developerに作らせます。
起動すると左の図のようなウィンドウが現れます。
メニューの「ファイル」「新規作成」を選択します。
この「新規作成」をしないと、次のステップに進めないので注意してください。
「編集」「リソースの追加」「メニュー」を選択します。
そうすると、左の図のような「リソース情報入力」ダイアログボックスが
出てきます。
リソースID名をMYMENUと指定します。この時ダブルクォーテーションは付けないでください。 「完了」ボタンを押すと、・・・・
左の図のようなダイアログボックスが出てきますので、メニュー項目が
これでよいのか確認します。
デフォルトでは、いろいろな項目が存在しますので、不要なものは削除します。
右クリックすると・・・
左の図のようなダイアログボックスが出てきますので、これでメニュー項目を
編集します。ここでは、「ファイル(&F)」「終了(&X)」以外は不要なので
削除します。
「終了(&X)」を選択して「修正」ボタンを押して、メニューIDを確認しておいてください。 この場合「IDM_EXIT」となっているはずです。
編集作業が終わったなら、「終了」ボタンを押します。
BCCForm本体の「ファイル」「名前を付けて保存」で、マイドキュメント中の
MyProjectの中のform01フォルダにリソース・スクリプトを保存します。
この時ファイル名はform01.rcとします。
さて、ここでform01フォルダにはどのようなファイルが作られたかを確認しましょう。
form01.rcとResform01.hファイルができているはずです。Resform01.hには、
シンボル値が定義されています。
さて、これでリソース・スクリプトができたのでソースファイルを作りましょう。
// form01.cpp
#include <windows.h>
#include "Resform01.h"
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
ATOM InitApp(HINSTANCE);
BOOL InitInstance(HINSTANCE, int);
char szClassName[] = "form01"; //ウィンドウクラス
int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,
LPSTR lpsCmdLine, int nCmdShow)
{
MSG msg;
BOOL bRet;
if (!InitApp(hCurInst))
return FALSE;
if (!InitInstance(hCurInst, nCmdShow))
return FALSE;
while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) {
if (bRet == -1) {
break;
} else {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int)msg.wParam;
}
//ウィンドウ・クラスの登録
ATOM InitApp(HINSTANCE hInst)
{
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc; //プロシージャ名
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;//インスタンス
wc.hIcon = (HICON)LoadImage(NULL,
MAKEINTRESOURCE(IDI_APPLICATION),
IMAGE_ICON,
0,
0,
LR_DEFAULTSIZE | LR_SHARED);
wc.hCursor = (HCURSOR)LoadImage(NULL,
MAKEINTRESOURCE(IDC_ARROW),
IMAGE_CURSOR,
0,
0,
LR_DEFAULTSIZE | LR_SHARED);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = "MYMENU"; //メニュー名
wc.lpszClassName = (LPCSTR)szClassName;
wc.hIconSm = (HICON)LoadImage(NULL,
MAKEINTRESOURCE(IDI_APPLICATION),
IMAGE_ICON,
0,
0,
LR_DEFAULTSIZE | LR_SHARED);
return (RegisterClassEx(&wc));
}
//ウィンドウの生成
BOOL InitInstance(HINSTANCE hInst, int nCmdShow)
{
HWND hWnd;
hWnd = CreateWindow(szClassName,
"猫でもわかるリソース", //タイトルバーにこの名前が表示されます
WS_OVERLAPPEDWINDOW, //ウィンドウの種類
CW_USEDEFAULT, //X座標
CW_USEDEFAULT, //Y座標
CW_USEDEFAULT, //幅
CW_USEDEFAULT, //高さ
NULL, //親ウィンドウのハンドル、親を作るときはNULL
NULL, //メニューハンドル、クラスメニューを使うときはNULL
hInst, //インスタンスハンドル
NULL);
if (!hWnd)
return FALSE;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
//ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
int id;
switch (msg) {
case WM_COMMAND:
switch (LOWORD(wp)) {
case IDM_EXIT:
SendMessage(hWnd, WM_CLOSE, 0, 0);
break;
}
break;
case WM_CLOSE:
id = MessageBox(hWnd,
"終了してもよろしいですか",
"確認",
MB_YESNO | MB_ICONQUESTION);
if (id == IDYES)
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, msg, wp, lp));
}
return 0;
}
では、BCC32とBRC32でプログラムを作りましょう。ここでは、簡単のためBCC Developerを使ってみます。
メニューから「ファイル」「新規作成」を選択します。
ディレクトリ名はマイドキュメント中のMyProjectBCCを選択します。
プロジェクト名はform01とします。
「作成」ボタンを押します。
メニューの「プロジェクト」「プロジェクトに追加」を選択すると
(または、「プロジェクトに追加」ボタンを押すと)、左の図のような
ダイアログボックスが出てくるので、form01.cppを選択します。
左図のようにプロジェクトにform01.cppが含まれていることを確認します。
メニューの「プロジェクト」「プロジェクトの設定」を選択(または、「プロジェクトの設定」ボタンを押すと)左の図のようなダイアログボックスが現れます。
「現在のプロジェクト構成」をReleaseに、ターゲットを「Windowsアプリケーション」に設定します。
「リソース」タブを押します。
リソーススクリプトファイル名が「form01.rc」であることを確認したら、「設定」ボタンを
押します。
あとは、「メイク」ボタンを押すとできあがりです。「実行」ボタンを押すと
実行されます。
Update 21/Dec/2003 By Y.Kumei