ウィンドウクラス名は、同じものを2箇所で書いている。
後に修正が入ることも考慮して、こういうものは定数宣言しておいたほうがよい。
#include <Windows.h>
//定数宣言
const char* WIN_CLASS_NAME = "SampleGame"; //ウィンドウクラス名
//プロトタイプ宣言
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
//エントリーポイント
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
//ウィンドウクラス(設計図)を作成
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX); //この構造体のサイズ
wc.hInstance = hInstance; //インスタンスハンドル
wc.lpszClassName = WIN_CLASS_NAME; //ウィンドウクラス名
wc.lpfnWndProc = WndProc; //ウィンドウプロシージャ
:
:
:
//ウィンドウを作成
HWND hWnd = CreateWindow(
WIN_CLASS_NAME, //ウィンドウクラス名
"サンプルゲーム", //タイトルバーに表示する内容
WS_OVERLAPPEDWINDOW, //スタイル(普通のウィンドウ)
CW_USEDEFAULT, //表示位置左(おまかせ)
CW_USEDEFAULT, //表示位置上(おまかせ)
:
:
:
CreateWindow関数でウィンドウのサイズを指定しているが、これはタイトルバーや枠も含んだサイズとなる。
つまり、実際に使える白い部分(クライアントサイズ)は、指定したものより狭くなる。
AdjustWindowRect関数を使うと、クライアントサイズを正しく指定することができる。
//定数宣言
const LPCSTR WIN_CLASS_NAME = "SampleGame"; //ウィンドウクラス名
const int WINDOW_WIDTH = 800; //ウィンドウの幅
const int WINDOW_HEIGHT = 600; //ウィンドウの高さ
//プロトタイプ宣言
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
//エントリーポイント
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
:
:
:
RegisterClassEx(&wc); //クラスを登録
//ウィンドウサイズの計算
RECT winRect = { 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT };
AdjustWindowRect(&winRect, WS_OVERLAPPEDWINDOW, FALSE);
int winW = winRect.right - winRect.left; //ウィンドウ幅
int winH = winRect.bottom - winRect.top; //ウィンドウ高さ
//ウィンドウを作成
HWND hWnd = CreateWindow(
WIN_CLASS_NAME, //ウィンドウクラス名
"サンプルゲーム", //タイトルバーに表示する内容
WS_OVERLAPPEDWINDOW, //スタイル(普通のウィンドウ)
CW_USEDEFAULT, //表示位置左(おまかせ)
CW_USEDEFAULT, //表示位置上(おまかせ)
winW, //ウィンドウ幅
winH, //ウィンドウ高さ
NULL, //親ウインドウ(なし)
NULL, //メニュー(なし)
:
:
AdjustWindowRect関数の引数は
①希望するサイズ(RECT構造体)
②ウィンドウスタイル
③メニューバーの有無
の3つとなっている。