現在はウィンドウは表示されるが、名前入力のウィンドウのほうが上手く作動しません。
名前入力のプロシージャ関数が呼ばれないせいか、ゲーム用のウィンドウの動作になってしまっています。
TCHAR szClassName[] = TEXT("edit1"); // ウィンドウクラス。
TCHAR szClassName2[] = TEXT("edit2"); // ウィンドウクラス。
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // ウインドウプロシージャ関数
LRESULT CALLBACK WndProc1(HWND, UINT, WPARAM, LPARAM); // ウインドウプロシージャ関数
BOOL InitApp(HINSTANCE);
BOOL InitApp1(HINSTANCE);
BOOL InitInstance(HINSTANCE, int);
BOOL InitInstance1(HINSTANCE, int);
HWND hWnd,hWnd2,hEWnd1,hBWnd1; //ゲーム用、名前用、エディット用、ボタン用
int nameinput(HWND);
#define ID_EDIT1 1000
#define ID_BUTTON1 1020
TCHAR name[30]; //名前用
/////メイン関数///////////////////////////////////////////////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
if (!hPrevInstance) {
if (!InitApp(hInstance)) //ゲーム用のウィンドウ初期化
return FALSE;
}
if (!InitInstance(hInstance, nCmdShow)) { //ゲーム用のウィンドウ生成
return FALSE;
}
if (!hPrevInstance) {
if (!InitApp1(hInstance)) //名前用のウィンドウ初期化
return FALSE;
}
if (!InitInstance1(hInstance, nCmdShow)) { //名前用のウィンドウ生成
return FALSE;
}
while (true)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT) break;
TranslateMessage(&msg); //キーボード利用を可能にする
DispatchMessage(&msg);
}
else
{
// WM_USER+1へ (ここがゲームループ)
SendMessage(hWnd, WM_USER + 1, 0, 0);
SendMessage(hWnd2, WM_USER + 1, 0, 0);
// スリープ関数へ
Sleep(20);
}
}
return msg.wParam;
}
BOOL InitApp(HINSTANCE hInstance)
{
WNDCLASS wc;
ZeroMemory(&wc, sizeof(WNDCLASS));
wc.style = CS_HREDRAW | CS_VREDRAW; // ウインドウスタイル
wc.lpfnWndProc = (WNDPROC)WndProc; // ウインドウプロシージャアドレス
wc.cbClsExtra = 0; // 補助領域サイズ(使用しない)
wc.cbWndExtra = 0; // 補助領域サイズ(使用しない)
wc.hInstance = hInstance; // インスタンスハンドル
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); // アイコン
wc.hCursor = LoadCursor(NULL, IDC_ARROW); // マウスカーソル
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // ウィンドウ画面の色
wc.lpszMenuName = NULL; // ウインドウメニュー
wc.lpszClassName = szClassName; // ウインドウクラス名
if (!RegisterClass(&wc)) return FALSE;
}
BOOL InitApp1(HINSTANCE hInstance)
{
WNDCLASS wc;
ZeroMemory(&wc, sizeof(WNDCLASS));
wc.style = CS_HREDRAW | CS_VREDRAW; // ウインドウスタイル
wc.lpfnWndProc = WndProc; // ウインドウプロシージャアドレス
wc.cbClsExtra = 0; // 補助領域サイズ(使用しない)
wc.cbWndExtra = 0;
wc.hInstance = hInstance; // インスタンスハンドル
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL; // ウインドウメニュー
wc.lpszClassName = szClassName2; // ウインドウクラス名
// ウインドウクラスの登録
if (!RegisterClass(&wc)) return FALSE;
}
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
hWnd = CreateWindow(
szClassName,
TEXT("title"), // ウインドウのタイトル名
WS_OVERLAPPEDWINDOW^WS_THICKFRAME^WS_MAXIMIZEBOX, // ウインドウスタイル
250, // ウィンドウの表示X座標
100, // ウィンドウの表示Y座標
WINDOW_WIDTH + GetSystemMetrics(SM_CXDLGFRAME) * 2, // ウィンドウの幅
WINDOW_HEIGHT + GetSystemMetrics(SM_CYDLGFRAME) * 2 + GetSystemMetrics(SM_CYCAPTION), // 高さ
NULL, // 親ウインドウ
NULL, // ウインドウメニュー
hInstance, // インスタンスハンドル
NULL); // WM_CREATE情報
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
BOOL InitInstance1(HINSTANCE hInstance, int nCmdShow)
{
hWnd2 = CreateWindow(
szClassName2,
TEXT("title2"), // ウインドウのタイトル名
WS_OVERLAPPED | WS_SYSMENU, // ウインドウスタイル
250, // ウィンドウの表示X座標
100, // ウィンドウの表示Y座標
180, // ウィンドウの幅
150, // 高さ
NULL, // 親ウインドウ
NULL, // ウインドウメニュー
hInstance, // インスタンスハンドル
NULL); // WM_CREATE情報
ShowWindow(hWnd2, nCmdShow);
UpdateWindow(hWnd2);
return TRUE;
}
//ゲーム用
///////ウインドウプロシージャ関数//////////////////////////////////////////////////////////
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
// 画像を読み込む準備
HDC hdc; // デバイスコンテキストハンドル
PAINTSTRUCT ps; // ペイント構造体
// バックバッファ用コンテキストハンドルと、ビットマップハンドルの準備
static HDC hdc_back; // 裏画面(バックバッファ)用デバイスコンテキストハンドル
static HBITMAP hb_back; // 裏画面(バックバッファ)用ビットマップハンドル
switch (msg)
{
case WM_USER + 1: // ゲームループ(SendMessageから呼ばれる)
// 結果の再描画 WM_PAINTを実行する
InvalidateRect(hWnd, NULL, false);
return 0;
case WM_PAINT: // 画面を描画する時の処理
hdc = BeginPaint(hWnd, &ps); // 描画の開始
Paint(hdc_back); // Paint関数へ
//バックバッファに保存された画像を表画面に描画
BitBlt(hdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, hdc_back, 0, 0, SRCCOPY);
hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps); // 描画の終了
return 0;
case WM_CREATE:
frr.SetSampleNum(100);
Init_Game(); //ゲーム初期化
HINSTANCE hInstance;
hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
hdc = GetDC(hWnd);
// 描画の開始
hdc = GetDC(hWnd);
// 互換デバイスコンテキストの作成
hdc_back = CreateCompatibleDC(hdc);
// 互換ビットマップの作成
hb_back = CreateCompatibleBitmap(hdc, WINDOW_WIDTH, WINDOW_HEIGHT);
// オブジェクトの選択
SelectObject(hdc_back, hb_back);
// 描画の終了
ReleaseDC(hWnd, hdc);
//シーン用BITMAP
menu_hb[Title] = (HBITMAP)LoadImage(NULL, TEXT("res/bgImage/title.bmp"), IMAGE_BITMAP,
0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
menu_hb[End] = (HBITMAP)LoadImage(NULL, TEXT("res/bgImage/end.bmp"), IMAGE_BITMAP,
0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
return 0;
case WM_DESTROY: // 最後にウインドウが閉じられた時の処理
// デバイスコンテキストの解放
DeleteDC(hdc_back);
DeleteObject(hb_back);
DeleteObject(menu_hb);
PostQuitMessage(0);
return 0;
default: // デフォルト処理
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0L;
}
//名前入力
LRESULT CALLBACK WndProc1(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
int id;
PAINTSTRUCT ps;
HDC hdc;
HINSTANCE hInst;
switch (msg) {
case WM_USER + 1: // ゲームループ(SendMessageから呼ばれる)
InvalidateRect(hWnd, NULL, false);
return 0;
case WM_CREATE:
hInst = ((LPCREATESTRUCT)lParam)->hInstance;
hEWnd1 = CreateWindow(TEXT("EDIT"), //名前入力の欄
TEXT("名前を入力"),
WS_CHILD | WS_VISIBLE,
60, 10,
100, 20,
hWnd,
(HMENU)ID_EDIT1,
hInst,
NULL);
hBWnd1 = CreateWindow(TEXT("BUTTON"), //決定ボタン
TEXT("決定"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
30, 50,
100, 30,
hWnd,
(HMENU)ID_BUTTON1,
hInst,
NULL);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 10, 10, TEXT("名前:"), 3);
EndPaint(hWnd, &ps);
break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case ID_BUTTON1:
GetWindowText(hEWnd1, name, 30);
nameinput(hWnd); //
break;
default:
return(DefWindowProc(hWnd, msg, wParam, lParam));
}
break;
case WM_CLOSE:
id = MessageBox(hWnd,
TEXT("終了してもよいですか"),
TEXT("終了確認"),
MB_YESNO | MB_ICONQUESTION);
if (id == IDYES) {
DestroyWindow(hWnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, msg, wParam, lParam));
}
return 0L;
}