先ずはソースから見てもらいましょう
ゲームなどの場合ウィンドウ(もしくはクライアント)のサイズを指定する場合というのは
ユーザーに自由にそれらのサイズを変更されると困る場合があります
なので今回はサイズの変更が出来ないようにしました
スタイルをWS_OVERLAPPEDWINDOWは一般的なスタイルでサイズの変更が可能です
なので今回のスタイルはWS_OVERLAPPEDWINDOW ^ WS_THICKFRAME ^ WS_MAXIMIZEBOXです
WS_OVERLAPPEDWINDOWからWS_THICKFRAME(サイズ変更)とWS_MAXIMIZEBOX(ウィンドウの最大化)
をなくしたスタイルです
またクライアントのサイズを640*480にして
さらにウィンドウをデスクトップの中央に表示するようにしています
具体的にはSystemParametersInfo()にてデスクトップのサイズを取得し
デスクトップの大きさからウィンドウの大きさを2で割っています
そうすると左右、もしくは上下の大きさが等しくなる、つまり中央に表示することになります
またエスケープキーを押された場合終了するようにしています
(ウインドウプロシージャの部分)
ゲームならばあとは二重起動を禁止した方が良いかもしれません
それはまた後ほど
#include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //============================================================================================== // Windows メイン処理 //============================================================================================== int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { // ウインドウクラスの登録 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 = "Windows"; if(!RegisterClass(&wc)) return 0; // ウインドウサイズの計算 int window_width = 640 + GetSystemMetrics(SM_CXDLGFRAME) * 2; int window_height = 480 + GetSystemMetrics(SM_CYDLGFRAME) * 2 + GetSystemMetrics(SM_CYCAPTION); // サイズの取得 RECT desktop; SystemParametersInfo(SPI_GETWORKAREA, NULL, (LPRECT)&desktop, NULL); // デスクトップ(-タスクバー) // ウインドウの作成 HWND hWnd = CreateWindow( wc.lpszClassName, "タイトル", WS_OVERLAPPEDWINDOW ^ WS_THICKFRAME ^ WS_MAXIMIZEBOX, (desktop.right - window_width) / 2, (desktop.bottom - window_height) / 2, window_width, window_height, NULL, NULL, hInstance, NULL); // ウインドウの表示 ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // メッセージループ MSG msg; while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; } //============================================================================================== // ウインドウプロシージャ //============================================================================================== LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_KEYDOWN: switch(wParam) { case VK_ESCAPE: PostQuitMessage(0); } case WM_DESTROY: // 終了メッセージ PostQuitMessage(0); return 0; default: // デフォルト処理 return DefWindowProc(hWnd, msg, wParam, lParam); } }
ゲームなどの場合ウィンドウ(もしくはクライアント)のサイズを指定する場合というのは
ユーザーに自由にそれらのサイズを変更されると困る場合があります
なので今回はサイズの変更が出来ないようにしました
スタイルをWS_OVERLAPPEDWINDOWは一般的なスタイルでサイズの変更が可能です
なので今回のスタイルはWS_OVERLAPPEDWINDOW ^ WS_THICKFRAME ^ WS_MAXIMIZEBOXです
WS_OVERLAPPEDWINDOWからWS_THICKFRAME(サイズ変更)とWS_MAXIMIZEBOX(ウィンドウの最大化)
をなくしたスタイルです
またクライアントのサイズを640*480にして
さらにウィンドウをデスクトップの中央に表示するようにしています
具体的にはSystemParametersInfo()にてデスクトップのサイズを取得し
デスクトップの大きさからウィンドウの大きさを2で割っています
そうすると左右、もしくは上下の大きさが等しくなる、つまり中央に表示することになります
またエスケープキーを押された場合終了するようにしています
(ウインドウプロシージャの部分)
ゲームならばあとは二重起動を禁止した方が良いかもしれません
それはまた後ほど