【LightCycleProc.h】
//////////////////////////////////////////
// LightCycleProc.h
// Copyright (c) 10/30/2021 by BCCSkelton
//////////////////////////////////////////
/////////////////////////////////
//主ウィンドウCMyWndの関数の定義
//ウィンドウメッセージ関数
/////////////////////////////////
bool CMyWnd::OnCreate(WPARAM wParam, LPARAM lParam) {
//コモンコントロールの初期化
InitCommonControls();
//ツールバー登録-Init(hWnd, hIinstance, ID, (以下省略可)Style)
TBar.Init(m_hWnd, m_hInstance, TOOLBAR);
//ツールバーボタン用カスタムビットマップ追加
TBar.AddBmp(m_hInstance, MAKEINTRESOURCE(IDI_BITMAP), 7);
//ツールバーボタン追加
TBBUTTON tbb[10];
ZeroMemory(tbb, sizeof(tbb));
tbb[0].iBitmap = TBar.m_id + 0;
tbb[0].fsState = TBSTATE_ENABLED;
tbb[0].fsStyle = TBSTYLE_BUTTON;
tbb[0].idCommand = IDM_ADD;
tbb[1].iBitmap = TBar.m_id + 1;
tbb[1].fsState = TBSTATE_ENABLED;
tbb[1].fsStyle = TBSTYLE_BUTTON;
tbb[1].idCommand = IDM_OPEN;
tbb[2].iBitmap = TBar.m_id + 2;
tbb[2].fsState = TBSTATE_ENABLED;
tbb[2].fsStyle = TBSTYLE_BUTTON;
tbb[2].idCommand = IDM_SAVE;
tbb[3].fsStyle = TBSTYLE_SEP; //セパレーター
tbb[4].iBitmap = TBar.m_id + 3;
tbb[4].fsState = TBSTATE_ENABLED;
tbb[4].fsStyle = TBSTYLE_BUTTON;
tbb[4].idCommand = IDM_EXIT;
tbb[5].fsStyle = TBSTYLE_SEP; //セパレーター
tbb[6].iBitmap = TBar.m_id + 4;
tbb[6].fsStyle = TBSTYLE_BUTTON;
tbb[6].idCommand = IDM_GO;
tbb[7].iBitmap = TBar.m_id + 5;
tbb[7].fsStyle = TBSTYLE_BUTTON;
tbb[7].idCommand = IDM_STOP;
tbb[8].fsStyle = TBSTYLE_SEP; //セパレーター
tbb[9].iBitmap = TBar.m_id + 6;
tbb[9].fsState = TBSTATE_ENABLED;
tbb[9].fsStyle = TBSTYLE_BUTTON;
tbb[9].idCommand = IDM_VERSION;
TBar.AddButtons(10, tbb);
//ステータスバー登録-Init(hWnd, hIinstance, ID, (以下省略可)Style)
SBar.Init(m_hWnd, m_hInstance, STATUSBAR);
//ステータスバー区画設定
int sec[3] = {100, 300, -1};
SBar.SetSection(3, sec);
//ステータスバー文字列設定
SBar.SetText(0, "LightCycle Ver 1.0");
SBar.SetText(2, "マウス左クリックでケーム実行、右クリックでゲーム中止");
//仮想ウィンドウの初期化
m_cvs.SetCanvas(m_hWnd);
//背景を黒の塗り潰しブラシで描画
m_cvs.Color(0);
m_cvs.BrSelection(1);
m_cvs.Clear();
//LightCycleのデバイスコンテキストの設定
//m_LC[0].SetDC(m_cvs.hDC());でもよい
CLIGHTCYCLE::m_hDC = m_cvs.hDC();
//「ゲームメニュー」とステータスバーを不可にする
ChangeMenuStatus(FALSE, FALSE);
//LightCycle登録数の初期化
m_NoLC = 0;
return TRUE;
}
bool CMyWnd::OnTimer(WPARAM wParam, LPARAM lParam) {
int no;
switch(wParam) {
case IDT_TIMER0:
no = 0;
break;
case IDT_TIMER1:
no = 1;
break;
case IDT_TIMER2:
no = 2;
break;
case IDT_TIMER3:
no = 3;
break;
default:
return FALSE;
}
if(m_LC[no].CanGo()) {
m_cvs.Color(m_LC[no].m_Color); //競技車両色で
m_cvs.Dot(m_LC[no].m_x, m_LC[no].m_y); //走行痕ドットを打つ
}
else {
//タイマー割り込みを停止
m_tm[no].Stop();
//ステータスバー第3区分の文字列取得
char str[MAX_PATH];
SBar.GetText(2, str);
CSTR Msg1 = str;
CSTR Msg2 = g_Col[m_LC[no].m_Color - 8];
Msg2 = Msg2 + "号";
Msg2 = Msg2 + m_LC[no].Dead();
Msg1 = Msg1 + Msg2;
SBar.SetText(2, Msg1.ToChar());
}
//ゲーム終了処理
if(!m_LC[0].m_Alive && !m_LC[1].m_Alive &&
!m_LC[2].m_Alive && !m_LC[3].m_Alive) {
MessageBox(m_hWnd, "全車両停止しました", "競技終了",
MB_OK | MB_ICONEXCLAMATION);
g_On = FALSE;
ChangeMenuStatus(TRUE, FALSE);
}
return TRUE;
}
bool CMyWnd::OnLButtonDown(WPARAM wParam, LPARAM lParam) {
//メニューアイテムインフォ構造体
MENUITEMINFO mii;
//メニューハンドルの取得
HMENU hMenu = GetMenu(m_hWnd);
HMENU hGameMenu = GetSubMenu(hMenu, 1);
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_STATE;
GetMenuItemInfo(hGameMenu, IDM_GO, FALSE, &mii);
if(mii.fState & MFS_DISABLED) {
MessageBox(m_hWnd, "現在左クリックは使用できません", "注意",
MB_OK | MB_ICONWARNING);
return FALSE;
}
else {
OnGo();
return TRUE;
}
}
bool CMyWnd::OnRButtonDown(WPARAM wParam, LPARAM lParam) {
//メニューアイテムインフォ構造体
MENUITEMINFO mii;
//メニューハンドルの取得
HMENU hMenu = GetMenu(m_hWnd);
HMENU hGameMenu = GetSubMenu(hMenu, 1);
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_STATE;
GetMenuItemInfo(hGameMenu, IDM_STOP, FALSE, &mii);
if(mii.fState & MFS_DISABLED) {
MessageBox(m_hWnd, "現在右クリックは使用できません", "注意",
MB_OK | MB_ICONWARNING);
return FALSE;
}
else {
OnStop();
return TRUE;
}
}
bool CMyWnd::OnNotify(WPARAM wParam, LPARAM lParam) {
//ツールバーツールチップ-因みにこの時のidCtrl(wParam)はメニューアイテムになる(例:IDM_OPEN)
if(((LPNMHDR)lParam)->code == TTN_NEEDTEXT) { //TTN_GETDISPINFOと同じ
((LPTOOLTIPTEXT)lParam)->hinst = m_hInstance;
char* tag;
switch(((LPTOOLTIPTEXT)lParam)->hdr.idFrom) {
case IDM_ADD:
tag = "追加・編集";
break;
case IDM_OPEN:
tag = "データを開く";
break;
case IDM_SAVE:
tag = "データの保存";
break;
case IDM_EXIT:
tag = "終了";
break;
case IDM_GO:
tag = "実行";
break;
case IDM_STOP:
tag = "中止";
break;
break;
case IDM_VERSION:
tag = "バージョン情報";
break;
}
((LPTOOLTIPTEXT)lParam)->lpszText = tag;
return TRUE;
}
return FALSE;
}
bool CMyWnd::OnSize(WPARAM wParam, LPARAM lParam) {
TBar.AutoSize();
SBar.AutoSize();
//ゲーム開始迄にゲーム領域を確定する
if(!g_On) {
CLIGHTCYCLE::m_MinX = 0;
CLIGHTCYCLE::m_MaxX = LOWORD(lParam);
RECT rec;
GetWindowRect(TBar.m_hWnd, &rec);
CLIGHTCYCLE::m_MinY = rec.bottom - rec.top;
CLIGHTCYCLE::m_MaxY = HIWORD(lParam); //仮置き
GetWindowRect(SBar.m_hWnd, &rec);
CLIGHTCYCLE::m_MaxY -= (rec.bottom - rec.top);
//競技場枠の表示
m_cvs.Clear();
m_cvs.Color(7);
m_cvs.Box(CLIGHTCYCLE::m_MinX, CLIGHTCYCLE::m_MinY, CLIGHTCYCLE::m_MaxX, CLIGHTCYCLE::m_MaxY, 0);
//競技場座標の表示
char str[64];
wsprintf(str, "競技場 (%d,%d)-(%d,%d)", CLIGHTCYCLE::m_MinX, CLIGHTCYCLE::m_MinY, CLIGHTCYCLE::m_MaxX, CLIGHTCYCLE::m_MaxY);
SBar.SetText(1, str);
}
return TRUE;
}
bool CMyWnd::OnPaint(WPARAM wParam, LPARAM lParam) {
PAINTSTRUCT paint;
m_cvs.OnPaint(BeginPaint(m_hWnd, &paint));
EndPaint(m_hWnd, &paint);
return TRUE;
}
bool CMyWnd::OnClose(WPARAM wParam, LPARAM lParam) {
if(MessageBox(m_hWnd, "終了しますか", "終了確認",
MB_YESNO | MB_ICONINFORMATION) == IDYES) {
//タイマーを廃棄
for(int i = 0; i < m_NoLC; i++)
m_tm[i].Stop();
//処理をするとDestroyWindow、PostQuitMessageが呼ばれる
return TRUE;
}
else
//そうでなければウィンドウではDefWindowProc関数をreturn、ダイアログではreturn FALSEとなる。
return FALSE;
}
bool CMyWnd::OnMinMax(WPARAM wParam, LPARAM lParam) {
//典型的なウィンドウのサイズ制限処理
MINMAXINFO *pmmi;
pmmi = (MINMAXINFO*)lParam;
pmmi->ptMinTrackSize.x = 656; // 最小幅(競技エリア640)
pmmi->ptMinTrackSize.y = 509; // 最小高(競技エリア400)
return FALSE; //処理はDefWndProcに任す
}
/////////////////////////////////
//主ウィンドウCMyWndの関数の定義
//メニュー項目、コントロール関数
/////////////////////////////////
bool CMyWnd::OnAdd() {
if(inputdlg.DoModal(m_hWnd, "IDD_INPUT", inputdlgProc)) {
if(m_NoLC) //m_NoLCが0でなくなったらゲーム実行可能
ChangeMenuStatus(TRUE, FALSE);
return TRUE;
}
else {
MessageBox(m_hWnd, "処理がキャンセルされました。", "エラー", MB_OK | MB_ICONERROR);
return FALSE;
}
}
bool CMyWnd::OnOpen() {
char* fn = cmndlg.GetFileName(m_hWnd, "LightCycleデータファイル(*.lcd)\0*.lcd\0\0", TRUE, "lcd", ".", "LightCycleデータを開く");
if(fn) {
g_File.SetName(fn); //ファイルパス、名の登録
m_NoLC = g_File.ReadInt("車両", "台数");
char str[16]; //セクション名用バッファ
int Color, StartDir, StartX, StartY, Speed, Caprice; //各属性変数
for(int i = 0; i < m_NoLC; i++) {
wsprintf(str, "車両No. %d", i);
Color = g_File.ReadInt(str, "車両色");
StartDir = g_File.ReadInt(str, "方向");
StartX = g_File.ReadInt(str, "X座標");
StartY = g_File.ReadInt(str, "Y座標");
Speed = g_File.ReadInt(str, "速度");
Caprice = g_File.ReadInt(str, "転回頻度");
//データをセットするのみならず、走行可能状態にする
m_LC[i].SetData(Color, StartDir, StartX, StartY, Speed, Caprice);
}
//m_NoLCが0でなくなったら以下を実行する。
if(m_NoLC)
ChangeMenuStatus(TRUE, FALSE);
return TRUE;
}
else {
MessageBox(m_hWnd, "処理がキャンセルされました", "エラー", MB_OK | MB_ICONERROR);
return FALSE;
}
}
bool CMyWnd::OnSave() {
char* fn = cmndlg.GetFileName(m_hWnd, "LightCycleデータファイル(*.lcd)\0*.lcd\0\0", FALSE, "lcd", ".", "LightCycleデータを保存");
if(fn) {
g_File.SetName(fn); //ファイルパス、名の登録
g_File.WriteInt("車両", "台数", m_NoLC);
char str[16]; //セクション名用バッファ
for(int i = 0; i < m_NoLC; i++) {
wsprintf(str, "車両No. %d", i);
g_File.WriteInt(str, "車両色", m_LC[i].m_Color);
g_File.WriteInt(str, "方向", m_LC[i].m_StartDir);
g_File.WriteInt(str, "X座標", m_LC[i].m_StartX);
g_File.WriteInt(str, "Y座標", m_LC[i].m_StartY);
g_File.WriteInt(str, "速度", m_LC[i].m_Speed);
g_File.WriteInt(str, "転回頻度", m_LC[i].m_Caprice);
}
return TRUE;
}
else {
MessageBox(m_hWnd, "処理がキャンセルされました", "エラー", MB_OK | MB_ICONERROR);
return FALSE;
}
}
bool CMyWnd::OnExit() {
SendMsg(WM_CLOSE, 0, 0);
return TRUE;
}
bool CMyWnd::OnGo() {
//ゲーム終了後は画面をクリア
if(!g_On) {
m_cvs.Clear();
//競技場枠の表示
m_cvs.Color(7);
m_cvs.Box(CLIGHTCYCLE::m_MinX, CLIGHTCYCLE::m_MinY, CLIGHTCYCLE::m_MaxX, CLIGHTCYCLE::m_MaxY, 0);
}
//競技車のデータが登録されてい ない場合の処置
if(!m_NoLC) {
MessageBox(m_hWnd, "競技車のデータが登録されていません\n「ファイル"\
"「新規」または「データを開く」で設定してください。",
"エラー", MB_OK | MB_ICONERROR);
return FALSE;
}
else {
//タイマーの設定(ミリ秒設定なので0.001秒タイマーとなっている)
for(int i = 0; i < m_NoLC; i++) {
if(!g_On) //ゲーム開始前なら
m_LC[i].GetReady(); //出走用意
if(!m_tm[i].Begin(m_hWnd, g_Timer[i], g_Velo[m_LC[i].m_Speed])) {
MessageBox(m_hWnd, "タイマーを設定できませんでした", "エラー",
MB_OK | MB_ICONERROR);
return FALSE;
}
}
//ゲーム開始後は「実行」メニューアイテムとボタンを凍結する。
g_On = TRUE;
//「ファイル」メニューを不可にする
EnableMenuItem(GetMenu(m_hWnd), 0, MF_BYPOSITION | MF_GRAYED);
//「ゲーム」メニューのアイテムの状態を変更する
ChangeMenuStatus(FALSE, TRUE);
//ステータスバーによる結果表示の為
SBar.SetText(2, "");
return TRUE;
}
}
bool CMyWnd::OnStop() {
int ret = MessageBox(m_hWnd, "完全に中止しますか(No-一時停止)", "確認",
MB_YESNOCANCEL | MB_ICONQUESTION);
switch(ret) {
case IDYES:
//全車死亡、タイマーを廃棄
for(int i = 0; i < m_NoLC; i++)
m_LC[i].Dead();
g_On = FALSE;
case IDNO:
//タイマーを廃棄
for(int i = 0; i < m_NoLC; i++) {
m_tm[i].Stop();
}
//「ファイル」メニューを可にする
EnableMenuItem(GetMenu(m_hWnd), 0, MF_BYPOSITION | MF_ENABLED);
//「ゲーム」メニューのアイテムの状態を変更する
ChangeMenuStatus(TRUE, FALSE);
return TRUE;
case IDCANCEL:
return FALSE;
}
}
bool CMyWnd::OnVersion() {
versiondlg.DoModal(m_hWnd, "IDD_VERSION", versiondlgProc);
return TRUE;
}
//////////////////
//ユーザー定義関数
//////////////////
///////////////////////////////////////////
//「ゲーム」メニュー、ツールバー状態の変更
///////////////////////////////////////////
void CMyWnd::ChangeMenuStatus(bool Flag1, bool Flag2) {
//メニューハンドルの取得
HMENU hMenu = GetMenu(m_hWnd);
//メニューアイテムを不可にする
HMENU hGameMenu = GetSubMenu(hMenu, 1);
EnableMenuItem(hGameMenu, IDM_GO, MF_BYCOMMAND | (Flag1 ? MF_ENABLED : MF_GRAYED));
EnableMenuItem(hGameMenu, IDM_STOP, MF_BYCOMMAND | (Flag2 ? MF_ENABLED : MF_GRAYED));
DrawMenuBar(LightCycle.GetHandle()); //Re-draw "&Game" menu
//ツールバー(MAKELONGマクロは16bit整数2つをunsigned 32bit整数にする)
SendMessage(TBar.GetHandle(), TB_ENABLEBUTTON, IDM_GO, MAKELONG(Flag1, 0));
SendMessage(TBar.GetHandle(), TB_ENABLEBUTTON, IDM_STOP, MAKELONG(Flag2, 0));
}
///////////////////////////////
//ユーザーダイアログの関数定義
//Inputダイアログ
///////////////////////////////
bool INPUTDLG::OnInit(WPARAM, LPARAM) {
char str[16]; //コンボボックス登録用文字列変数
//競技車番号
for(int i = 0; i < LightCycle.m_NoLC; i++) {
wsprintf(str, "%d", i + 1);
SendItemMsg(IDC_COMBOBOX0, CB_ADDSTRING, 0, (LPARAM)str);
}
//競技車色
for(int i = 0; i < 8; i++) {
SendItemMsg(IDC_COMBOBOX1, CB_ADDSTRING, 0, (LPARAM)g_Col[i]);
}
//進行方向
for(int i = 0; i < 8; i++) {
SendItemMsg(IDC_COMBOBOX2, CB_ADDSTRING, 0, (LPARAM)g_Dir[i]);
}
//速度
for(int i = 0; i < 3; i++) {
SendItemMsg(IDC_COMBOBOX3, CB_ADDSTRING, 0, (LPARAM)g_Speed[i]);
}
//転回頻度
for(int i = 0; i < 4; i++) {
SendItemMsg(IDC_COMBOBOX4, CB_ADDSTRING, 0, (LPARAM)g_Caprice[i]);
}
//登録車両数が0 - 3迄は次の未入力LC[i]を、4の場合先頭を指すは
if(LightCycle.m_NoLC < 4)
SendItemMsg(IDC_COMBOBOX0, CB_SETCURSEL, LightCycle.m_NoLC, 0);
else {
SendItemMsg(IDC_COMBOBOX0, CB_SETCURSEL, 0, 0);
SetData(0);
}
//対象コントロールのハンドルを取得する
HWND hCtrl = GetDlgItem(m_hWnd, IDC_IMAGE);
//文字列リソースのある親ウィンドウ(ダイアログ)のインスタンス
m_hInstance;
//ツールチップの作成
m_hTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL,
WS_POPUP | TTS_ALWAYSTIP | TTS_BALLOON,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
m_hWnd, NULL,
m_hInstance, NULL);
//IDC_IMAGEにツールヒントコントロールを付ける
TOOLINFO toolInfo = { 0 }; //ゼロクリアー
toolInfo.cbSize = sizeof(toolInfo);
toolInfo.hwnd = m_hWnd;
toolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
toolInfo.uId = (UINT_PTR)GetDlgItem(m_hWnd, IDC_IMAGE);
toolInfo.hinst = m_hInstance;
toolInfo.lpszText = "編集状態でも、登録が4台未満ならクリックすると「追加」になります";
SendMessage(m_hTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo);
SetWindowPos(m_hTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
return TRUE;
}
bool INPUTDLG::OnSelChange(WPARAM wParam) {
//コンボボックスの選択変更以外は何もしない
if(HIWORD(wParam) != CBN_SELCHANGE)
return FALSE;
//新しい選択アイテムインデックスを取得する
int i = SendItemMsg(IDC_COMBOBOX0, CB_GETCURSEL, 0, 0);
SetData(i);
return TRUE;
}
bool INPUTDLG::OnImage() {
if(LightCycle.m_NoLC < 4) {
SendMsg(WM_SETTEXT, 0, (LPARAM)"LightCycleデータの追加");
SendItemMsg(IDC_COMBOBOX0, CB_SETCURSEL, (WPARAM)-1, 0);
SendItemMsg(IDC_COMBOBOX1, CB_SETCURSEL, (WPARAM)-1, 0);
SendItemMsg(IDC_COMBOBOX2, CB_SETCURSEL, (WPARAM)-1, 0);
SendItemMsg(IDC_COMBOBOX3, CB_SETCURSEL, (WPARAM)-1, 0);
SendItemMsg(IDC_COMBOBOX4, CB_SETCURSEL, (WPARAM)-1, 0);
SendItemMsg(IDC_EDIT2, WM_SETTEXT, 0, (LPARAM)"");
SendItemMsg(IDC_EDIT3, WM_SETTEXT, 0, (LPARAM)"");
}
}
bool INPUTDLG::OnOk() {
//選択車両番号インデックス(0-3)を取得する
int i = SendItemMsg(IDC_COMBOBOX0, CB_GETCURSEL, 0, 0);
if(i == CB_ERR) //選択が無ければ追加登録
i = LightCycle.m_NoLC;
//車両色(0-7)の取得
int j = SendItemMsg(IDC_COMBOBOX1, CB_GETCURSEL, 0, 0);
if(j == CB_ERR) {
MessageBox(m_hWnd, "色が選択されていません。", "エラー", MB_OK | MB_ICONERROR);
return FALSE; //ダイアログを開いたまま処理を無効とする
}
LightCycle.m_LC[i].m_Color = j + 8; //CANVASクラスの色コード(8-15)
//車両の方向(0-7)
j = SendItemMsg(IDC_COMBOBOX2, CB_GETCURSEL, 0, 0);
if(j == CB_ERR) {
MessageBox(m_hWnd, "方向が選択されていません。", "エラー", MB_OK | MB_ICONERROR);
return FALSE; //ダイアログを開いたまま処理を無効とする
}
LightCycle.m_LC[i].m_StartDir = j;
//車両のX座標
char str[16]; //エディットボックス用文字列変数
SendItemMsg(IDC_EDIT2, WM_GETTEXT, 16, (LPARAM)str);
j = atoi(str); //エラー処理をどうするか?
if(j <= 0 || j > CLIGHTCYCLE::m_MaxX) {
MessageBox(m_hWnd, "Xの値が不正です。", "エラー", MB_OK | MB_ICONERROR);
return FALSE; //ダイアログを開いたまま処理を無効とする
}
LightCycle.m_LC[i].m_StartX = j;
//車両のY座標
SendItemMsg(IDC_EDIT3, WM_GETTEXT, 16, (LPARAM)str);
j = atoi(str); //エラー処理をどうするか?
if(j <= 0 || j > CLIGHTCYCLE::m_MaxY) {
MessageBox(m_hWnd, "Xの値が不正です。", "エラー", MB_OK | MB_ICONERROR);
return FALSE; //ダイアログを開いたまま処理を無効とする
}
LightCycle.m_LC[i].m_StartY = j;
//車両の速度(0-2)
j = SendItemMsg(IDC_COMBOBOX3, CB_GETCURSEL, 0, 0);
if(j == CB_ERR) {
MessageBox(m_hWnd, "速度が選択されていません。", "エラー", MB_OK | MB_ICONERROR);
return FALSE; //ダイアログを開いたまま処理を無効とする
}
LightCycle.m_LC[i].m_Speed = j;
//車両の転向頻度(0-3)
j = SendItemMsg(IDC_COMBOBOX4, CB_GETCURSEL, 0, 0);
if(j == CB_ERR) {
MessageBox(m_hWnd, "転向頻度が選択されていません。", "エラー", MB_OK | MB_ICONERROR);
return FALSE; //ダイアログを開いたまま処理を無効とする
}
LightCycle.m_LC[i].m_Caprice = j;
//走行可能状態にする
LightCycle.m_LC[i].GetReady();
//追加登録の場合、車両台数を増やす
if(i == LightCycle.m_NoLC)
LightCycle.m_NoLC++;
EndModal(TRUE);
return TRUE;
}
bool INPUTDLG::OnCancel() {
EndModal(FALSE);
return TRUE;
}
void INPUTDLG::SetData(int i) {
char str[16]; //エディットボックス用文字列変数
//既存データが選択されたので編集であることを示す
SendMsg(WM_SETTEXT, 0, (LPARAM)"LightCycleデータの編集");
//CANVASクラスの色コード8-15を使用している為
SendItemMsg(IDC_COMBOBOX1, CB_SETCURSEL, (LightCycle.m_LC[i].m_Color - 8), 0);
SendItemMsg(IDC_COMBOBOX2, CB_SETCURSEL, LightCycle.m_LC[i].m_StartDir, 0);
wsprintf(str, "%d", LightCycle.m_LC[i].m_StartX);
SendItemMsg(IDC_EDIT2, WM_SETTEXT, 0, (LPARAM)str);
wsprintf(str, "%d", LightCycle.m_LC[i].m_StartY);
SendItemMsg(IDC_EDIT3, WM_SETTEXT, 0, (LPARAM)str);
SendItemMsg(IDC_COMBOBOX3, CB_SETCURSEL, (WPARAM)LightCycle.m_LC[i].m_Speed, 0);
SendItemMsg(IDC_COMBOBOX4, CB_SETCURSEL, LightCycle.m_LC[i].m_Caprice, 0);
}
///////////////////////////////
//ユーザーダイアログの関数定義
//Versionダイアログ
///////////////////////////////
bool VERSIONDLG::OnOk() {
EndModal(TRUE);
return TRUE;
}
bool VERSIONDLG::OnCancel() {
EndModal(FALSE);
return TRUE;
}