ウィンドウを作ってみよう

久々の更新の割には内容がトレーシングペーパー並だったり・・・

まずはC.NET出のウィンドウの作成方法を書いていきますぞ
C.NETだけでなく、C++でも使用できたはずですが
#include "windows.h"

#define MYWNDCLASS "ウィンドウサンプル"

HINSTANCE g_hInst;

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){

	switch(uMsg){
		case WM_CLOSE:
			if (MessageBox(hWnd,"終了します、よろしいですか?",
				MYWNDCLASS,MB_ICONQUESTION | MB_OKCANCEL) == IDOK) {
				DestroyWindow(hWnd);
			}
			break;
		case WM_DESTROY:
			PostQuitMessage(0);
			break;
		default:
			return DefWindowProc(hWnd, uMsg, wParam, lParam);
	}
	return(0);
	
}

int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, LPSTR lpCmdLine, int nCmdShow){
	MSG msg;
	WNDCLASSEX wc;
	HWND hWnd;
	DWORD dStatus;

	g_hInst = hInst;

	ZeroMemory(&wc,sizeof(wc));
	wc.cbSize = sizeof(WNDCLASSEX);
	wc.lpfnWndProc = (WNDPROC)WndProc;
	wc.hInstance = g_hInst;
	wc.hCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW));
	wc.lpszClassName = MYWNDCLASS;
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
	wc.style &= WS_SIZEBOX;
	RegisterClassEx(&wc);
	dStatus = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;

	//ウィンドウの作成
	hWnd = CreateWindowEx(0, MYWNDCLASS, MYWNDCLASS, dStatus,
			CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
			NULL, NULL, g_hInst, NULL);
	ShowWindow(hWnd, nCmdShow);

	while(GetMessage(&msg, NULL, 0, 0)){
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
}
一応こんな感じで作ることができます
dStatus = ・・・というところをor演算子でくくってわざわざ面倒なふうにしているのは、簡単にWS_OVERLAPPEDWINDOWだとウィンドウのサイズ変更が可能になるからです
ほとんどのゲームの場合、ウィンドウサイズを変更されると画像が切れたりなどいろいろと厄介ごとがありますのでウィンドウサイズの変更を可能にする定数だけを省いています
あと、クライアント領域を指定してウィンドウサイズを指定する方法がありますが、一応ここではウィンドウの作成だけにスポットを当てています

VBで作るとどうなるのかな〜と思われる方がもしやいるかもしれません
残念ながらフォームを作成したと同時にほぼこのプログラムが内示的に宣言されますのでいちいちこんな行数のプログラムを書く必要はありません

まぁ、この点がVBは初心者向けといわれる所以ですが


と〜っぷ