昨日はまたまたbcc32cにはまり、exhaustしました。(ヤレヤレ)しかし、今日も朝2時から目がさえて、色々なオプションをCommand(BCCSkeltonアプリ)を使って試し、「これは時間がかかるな」ということから、先ずはMENACEを手じまいしようということで、ササっとプログラム説明します。
BCCSkelton流に先ずはリソースから。
1.イメージ
MENACEのWindows版には次のイメージファイルが必要です。
(1)〇、×と空白
私はNought.bmp、Cross.bmp、Vacant.bmpというビットマップを作りました。これはMSPaintでテキトーに手書き風味の〇、×を書き、それを64 x 64にトリムしてセーブします。(EZImageの裏ワザとして、このビットマップを読み込むと規定外サイズですが、エラー無く編集、上書きできます。)
(2)ツールバービットマップ
私はTBEditorで、ToolBar.bmpという16 x 15(16x16のビットマップだとTBEditorに「規定外」と怒られますので、MSPaintでトリムしてください)を、メニューの"データを開く"(IDM_OPEN)、"データコピーを保存"(IDM_SAVEAS)、"終了"(IDM_EXIT)、"先手"(IDM_FM)、"後手"、(IDM_SM)、"自動対局"(IDM_AUTO)、"MENACEについて"(IDM_ABOUT)、"バージョン情報"(IDM_VERSION)の8つ用意しました。(定番BMPはSampleBMPフォールダーにありますから漁ってください。)
(3)アイコン
これは32x32の〇×ゲームの絵のアイコンをIcon.icoとしてEZImageでつくりました。
2.RCファイル
上記1をつかってつくったRCファイルがこちら(↓)です。赤字部分には気を付けてください。
//-----------------------------------------
// BCCForm Ver 2.41
// An Easy Resource Editor for BCC
// Copyright (c) February 2002 by ysama
//-----------------------------------------
#include "ResMENACE.h"
#define TBSTYLE_TOOLTIPS 0x0100
#define SBT_TOOLTIPS 0x0800
//----------------------------------
// ダイアログ (IDD_MENACE)
//----------------------------------
IDD_MENACE DIALOG DISCARDABLE 0, 0, 174, 207
EXSTYLE WS_EX_DLGMODALFRAME
STYLE WS_POPUP | WS_DLGFRAME | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | DS_SETFONT | DS_CENTER
CAPTION "MENACE"
MENU IDM_FORM_MENU
FONT 8, "MS 明朝"
{
CONTROL 0, IDC_0, "BUTTON", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_DEFPUSHBUTTON | BS_CENTER | BS_VCENTER | BS_BITMAP, 3, 24, 54, 54
CONTROL 0, IDC_1, "BUTTON", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | BS_CENTER | BS_VCENTER | BS_BITMAP, 60, 24, 54, 54
CONTROL 0, IDC_2, "BUTTON", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | BS_CENTER | BS_VCENTER | BS_BITMAP, 117, 24, 54, 54
CONTROL 0, IDC_3, "BUTTON", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | BS_CENTER | BS_VCENTER | BS_BITMAP, 3, 81, 54, 54
CONTROL 0, IDC_4, "BUTTON", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | BS_CENTER | BS_VCENTER | BS_BITMAP, 60, 81, 54, 54
CONTROL 0, IDC_5, "BUTTON", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | BS_CENTER | BS_VCENTER | BS_BITMAP, 117, 81, 54, 54
CONTROL 0, IDC_6, "BUTTON", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | BS_CENTER | BS_VCENTER | BS_BITMAP, 3, 138, 54, 54
CONTROL 0, IDC_7, "BUTTON", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | BS_CENTER | BS_VCENTER | BS_BITMAP, 60, 138, 54, 54
CONTROL 0, IDC_8, "BUTTON", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | BS_CENTER | BS_VCENTER | BS_BITMAP, 117, 138, 54, 54
CONTROL "", IDC_TOOLBAR, "TOOLBARWINDOW32", WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | TBSTYLE_SEP | WS_BORDER, 0, 0, 174, 19
CONTROL "", IDC_STATUSBAR, "MSCTLS_STATUSBAR32", WS_CHILD | WS_VISIBLE | SBT_TOOLTIPS | CCS_TOP | CCS_NOMOVEY, 0, 195, 174, 12
}
//----------------------------------
// ダイアログ (IDD_INPUT)
//----------------------------------
IDD_INPUT DIALOG DISCARDABLE 0, 0, 169, 72
EXSTYLE WS_EX_DLGMODALFRAME
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_MODALFRAME | DS_3DLOOK | DS_CENTER
CAPTION "対戦回数入力"
FONT 9, "MS 明朝"
{
CONTROL IDI_ICON, 0, "STATIC", SS_SUNKEN | SS_ICON | WS_CHILD | WS_VISIBLE, 2, 2, 32, 32
CONTROL "対戦回数を入力してください", 0, "STATIC", SS_CENTER | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 42, 2, 120, 13
CONTROL "", IDC_GAMES, "COMBOBOX", WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST | CBS_SORT, 42, 20, 96, 96
CONTROL "OK", IDOK, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 128, 53, 32, 16
}
//----------------------------------
// ダイアログ (IDD_INFO)
//----------------------------------
IDD_INFO DIALOG DISCARDABLE 0, 0, 141, 108
EXSTYLE WS_EX_DLGMODALFRAME
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_MODALFRAME | DS_3DLOOK | DS_CENTER
CAPTION "MENACEについて"
FONT 9, "MS 明朝"
{
CONTROL IDI_ICON, 0, "STATIC", SS_SUNKEN | SS_ICON | WS_CHILD | WS_VISIBLE, 2, 2, 32, 32
CONTROL "登録盤面数", 0, "STATIC", SS_LEFT | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 26, 8, 68, 12
CONTROL "今回のゲーム数", 0, "STATIC", SS_LEFT | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 2, 26, 92, 12
CONTROL "今回の先手勝利数", 0, "STATIC", SS_LEFT | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 2, 42, 92, 12
CONTROL "今回の後手勝利数", 0, "STATIC", SS_LEFT | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 2, 58, 92, 12
CONTROL "今回の引き分け数", 0, "STATIC", SS_LEFT | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 2, 74, 92, 12
CONTROL "", IDC_EDIT1, "EDIT", WS_CHILD | WS_BORDER | WS_VISIBLE | ES_READONLY | ES_RIGHT, 98, 8, 40, 13, WS_EX_CLIENTEDGE
CONTROL "", IDC_EDIT2, "EDIT", WS_CHILD | WS_BORDER | WS_VISIBLE | ES_READONLY | ES_RIGHT, 98, 26, 40, 13, WS_EX_CLIENTEDGE
CONTROL "", IDC_EDIT3, "EDIT", WS_CHILD | WS_BORDER | WS_VISIBLE | ES_READONLY | ES_RIGHT, 98, 42, 40, 13, WS_EX_CLIENTEDGE
CONTROL "", IDC_EDIT4, "EDIT", WS_CHILD | WS_BORDER | WS_VISIBLE | ES_READONLY | ES_RIGHT, 98, 58, 40, 13, WS_EX_CLIENTEDGE
CONTROL "", IDC_EDIT5, "EDIT", WS_CHILD | WS_BORDER | WS_VISIBLE | ES_READONLY | ES_RIGHT, 98, 74, 40, 13, WS_EX_CLIENTEDGE
CONTROL "OK", IDOK, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 98, 90, 40, 16
}
//----------------------------------
// ダイアログ (IDD_VERSION)
//----------------------------------
IDD_VERSION DIALOG DISCARDABLE 0, 0, 160, 40
EXSTYLE WS_EX_DLGMODALFRAME
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_MODALFRAME | DS_3DLOOK | DS_CENTER
CAPTION "バージョン情報"
FONT 9, "Times New Roman"
{
CONTROL IDI_ICON, 0, "STATIC", SS_SUNKEN | SS_ICON | WS_CHILD | WS_VISIBLE, 12, 10, 32, 32
CONTROL "MENACE Version 1.0\nCopyright 2021 by Ysama", 0, "STATIC", SS_CENTER | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 42, 8, 80, 24
CONTROL "OK", IDOK, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 130, 14, 20, 12
}
//----------------------------------
// ダイアログで使用するメニュー
//----------------------------------
IDM_FORM_MENU MENU DISCARDABLE
{
POPUP "ファイル(&F)"
{
MENUITEM "データを開く(&O)", IDM_OPEN
MENUITEM "データの保存(&S)", IDM_SAVE
MENUITEM "データコピーを保存(&A)", IDM_SAVEAS
MENUITEM SEPARATOR
MENUITEM "終了(&X)", IDM_EXIT
}
POPUP "対戦(&G)"
{
MENUITEM "先手(&F)", IDM_FM
MENUITEM "後手(&S)", IDM_SM
MENUITEM "自動対局(&A)", IDM_AUTO
}
POPUP "ヘルプ(&H)"
{
MENUITEM "MENACEについて(&A)", IDM_ABOUT
MENUITEM "バージョン情報(&V)", IDM_VERSION
}
}
//--------------------------
// イメージ(IDI_NOUGHT)
//--------------------------
IDI_NOUGHT BITMAP DISCARDABLE "C:\Users\(パス)\MENACE\Nought.bmp"
//--------------------------
// イメージ(IDI_CROSS)
//--------------------------
IDI_CROSS BITMAP DISCARDABLE "C:\Users\(パス)\MENACE\Cross.bmp"
//--------------------------
// イメージ(IDI_VACANT)
//--------------------------
IDI_VACANT BITMAP DISCARDABLE "C:\Users\(パス)\MENACE\Vacant.bmp"
//--------------------------
// イメージ(IDI_TOOLBAR)
//--------------------------
IDI_TOOLBAR BITMAP DISCARDABLE "C:\Users\(パス)\MENACE\ToolBar.bmp"
//--------------------------
// イメージ(IDI_ICON)
//--------------------------
IDI_ICON ICON DISCARDABLE "C:\Users\(パス)\MENACE\Icon.ico"
3.Res.hファイル
値は(かぶらなければ)変わっても構いません。
//-----------------------------------------
// BCCForm Ver 2.41
// Header File for Resource Script File
// Copyright (c) February 2002 by ysama
//-----------------------------------------
#define TBSTYLE_TOOLTIPS 0x0100 //ツールバー用スタイル
#define SBT_TOOLTIPS 0x0800 //スティタスバー用スタイル
//---------------------
// ダイアログリソース
//---------------------
// ダイアログ IDD_MENACE
#define IDC_0 100
#define IDC_1 101
#define IDC_2 102
#define IDC_3 103
#define IDC_4 104
#define IDC_5 105
#define IDC_6 106
#define IDC_7 107
#define IDC_8 108
#define IDC_TOOLBAR 109
#define IDC_STATUSBAR 110
// ダイアログ IDD_INPUT
#define IDC_GAMES 120
// ダイアログ IDD_INFO
#define IDC_EDIT1 130
#define IDC_EDIT2 131
#define IDC_EDIT3 132
#define IDC_EDIT4 133
#define IDC_EDIT5 134
//---------------------
// メニューリソース
//---------------------
// メニュー IDM_FORM_MENU
#define IDM_OPEN 200
#define IDM_SAVE 201
#define IDM_SAVEAS 202
#define IDM_EXIT 203
#define IDM_FM 204
#define IDM_SM 205
#define IDM_AUTO 206
#define IDM_ABOUT 207
#define IDM_VERSION 208
//---------------------
// イメージリソース
//---------------------
#define IDI_NOUGHT 300
#define IDI_CROSS 400
#define IDI_VACANT 500
#define IDI_TOOLBAR 600
#define IDI_ICON 700
//---------------------
// ストリングテーブル
//---------------------
//--------------------
// アクセラレーター
//--------------------
//------------------
// ヴァージョン情報
//------------------
4.SkeltonWizardを使う
こうして作成したMENACE.rcファイルをSkeltonWizardに通します。今日は手抜きで画像無しです。
(1)第1画面
ウィンドウタイプはダイアログです。IDD_MENACEを選んでください。
ツールバー、ステータスバー、コモンダイアログにチェックを入れます。
メニュー(私の場合はIDM_FORM_MENU)、アイコン(IDI_ICON)を選択します。
(2)第2画面
「コモンコントロールのスタンダードビットマップ」チェックボックスを外し、プルダウンメニューでIDI?TOOLBARを選択します。
適宜<SEPARATOR<を挟みながら(メニューアイテムを選択した状態でダブルクリックする)ツールバーボタンに選択したメニューアイテムとビットマップボタンを連携付けます。ステータスバーは枠の数を2とし、枠内文字列は「"MENACE Ver 1.0",""」としておきます。
(3)第3画面
メッセージはWM_DESTROYを、音とロールやメニューは以下が必要ですが、(とりあえず)すべて入れて後で削除していただいて構いません。
IDC_0からIDC_8までは〇×ゲームの盤、後はメニューアイテムです。
ON_COMMAND(MENACE, IDC_0, On0())
ON_COMMAND(MENACE, IDC_1, On1())
ON_COMMAND(MENACE, IDC_2, On2())
ON_COMMAND(MENACE, IDC_3, On3())
ON_COMMAND(MENACE, IDC_4, On4())
ON_COMMAND(MENACE, IDC_5, On5())
ON_COMMAND(MENACE, IDC_6, On6())
ON_COMMAND(MENACE, IDC_7, On7())
ON_COMMAND(MENACE, IDC_8, On8())
ON_COMMAND(MENACE, IDM_OPEN, OnOpen())
ON_COMMAND(MENACE, IDM_SAVE, OnSave())
ON_COMMAND(MENACE, IDM_SAVEAS, OnSaveas())
ON_COMMAND(MENACE, IDM_EXIT, OnExit())
ON_COMMAND(MENACE, IDM_FM, OnFm())
ON_COMMAND(MENACE, IDM_SM, OnSm())
ON_COMMAND(MENACE, IDM_AUTO, OnAuto())
ON_COMMAND(MENACE, IDM_ABOUT, OnAbout())
ON_COMMAND(MENACE, IDM_VERSION, OnVersion())
(3)第4画面
何もしないで「完了」で結構です。
なお、最終的にプログラムはbcc32.exeでコンパイルするBCCDeveloperのmakeではなく、bcc32c.exeをバッチファイルでコンパイルしますが、この段階ではbcc32.exeでコンパイルするBCCDeveloperのmakeを使って「がらんどうMENACE.exe」を楽しんでください。その際、
・BCCDeveloperの「"MENACE.rc」となっているリソースファイルから「"」を取ってやる。
・MENACE.cppの二重起動処理を決める。(禁止にするか、許可するか)
に注意してください。この段階でエラーが出れば、早期に潰して、完動するスケルトンにしておいてください。







