このページはインターネットエクスプローラ4.0以降に調整されています
2002.05.31,00:34

Windows


Windowを作成してみましょう

Windows Programの決まり文句ですから,
一度書いてしまえば,あとはコピーしてちょっと変えるだけで使いまわせます.


WinMain

int WINAPI WinMain(
	HINSTANCE hThisInstance,
	HINSTANCE hPrevInstance,
	LPSTR lpszCmdParam,
	int nCmdShow
	);
Win32アプリケーションの初期エントリポイントです.
Windowsシステムが呼び出します.
いわゆるmain関数のWin版です.


WndProc

LRESULT APIENTRY WndProc(
	HWND hwnd,
	UINT message,
	WPARAM wParam,
	LPARAM lParam
	);
ウィンドウクラスに関連づけられた,コールバック関数.
なんかイベントがあるたびに呼ばれます.
普通のアプリケーションとかは,大体この上で処理が行われていくが,
ゲームではあまり使わない気がする….
ここではWinProcとしているが,名前はなんでもよい.
ちなみに,WindowProcedure(ウィンドウプロシジャ)の略.


#include <windows.h>
#include "winmain.h"


/*
ウィンドウのメイン関数
*/
int WINAPI
WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
	static char szAppName[] = MY_APPNAME;	//アプリケーションの名前
	HWND hwnd;	//ウィンドウハンドル
	WNDCLASS wndclass;	//ウィンドウクラス

	//ウィンドウクラスの設定
	wndclass.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;	//ウィンドウスタイル
	wndclass.lpfnWndProc = WndProc;	//ウィンドウプロシジャ関数へのポインタ
	wndclass.cbClsExtra = 0;	//エクストラバイト
	wndclass.cbWndExtra = 0;	//エクストラバイト
	wndclass.hInstance = hThisInstance;	//インスタンスハンドル
	wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);	//アイコンの指定
	wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);	//カーソルの指定
	wndclass.hbrBackground = GetStockObject(BLACK_BRUSH);	//背景を塗るブラシへのハンドル
	wndclass.lpszMenuName = NULL;	//クラスメニューへのポインタ
	wndclass.lpszClassName = MY_CLASSNAME;	//ウィンドウクラスの名前

	//ウィンドウクラスの登録
	RegisterClass(&wndclass);

	//ウィンドウの作成
	hwnd = CreateWindowEx(
		0,//WS_EX_TOPMOST,	//ウィンドウの拡張スタイル
		wndclass.lpszClassName,	//ウィンドウクラスの名前
		MY_WINDOWCAPTION,	//ウィンドウのタイトル
		WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,	//ウィンドウのスタイル
		CW_USEDEFAULT,	//ウィンドウ表示x座標の初期値
		CW_USEDEFAULT,	//ウィンドウ表示y座標の初期値
		MY_WINDOW_XSIZE,	//ウィンドウの横幅の初期値
		MY_WINDOW_YSIZE,	//ウィンドウの縦幅の初期値
		NULL,	//親ウィンドウのハンドル
		NULL,	//ウィンドウメニューのハンドル
		hThisInstance,	//インスタンスハンドル
		NULL);	//作成引数

	//ウィンドウの表示
	ShowWindow(hwnd,nCmdShow);

	//ウィンドウの再描画
	UpdateWindow(hwnd);

	//フォーカスをもらう
	SetFocus(hwnd);

	//カーソルを非表示
	//ShowCursor(FALSE);

	//メッセージループ
	MSG msg;
	while(GetMessage(&msg, NULL, 0, 0))	//メッセージの取り出し
	{
		TranslateMessage(&msg);	//メッセージの変換
		DispatchMessage(&msg);	//メッセージの転送
	}
	return msg.wParam;
}

/*
ウィンドウプロシジャ関数
*/
LRESULT APIENTRY
WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	HDC hdc;	//デバイスコンテキストのハンドル
	PAINTSTRUCT ps;	//クライアント領域描画用情報構造体

	//ウィンドウメッセージの処理
	switch(message)
	{
		case WM_PAINT:	//描画要求メッセージ
			hdc = BeginPaint(hwnd,&ps);	//描画開始(デバイスコンテキストを作成)
			EndPaint(hwnd,&ps);	//描画終了(デバイスコンテキストを破棄)
			return 0;

		case WM_DESTROY:	//ウィンドウ破棄要求メッセージ
			PostQuitMessage(0);	//WM_QUITをメッセージキューに放り込む
			return 0;
	}

	return DefWindowProc(hwnd, message, wParam, lParam);	//残りはデフォルトにお任せ
}





WinMain
RotoZoomer
Tunnel
Plasma
Fire
MetaBall

Entrance Home Back

|MSX|MOD|DEMO|the others|ContentsMap|GuestBook|Download|Guchi|Weblog|
| LINKs | ImpulseTracker Manual | Get DEMO |

(C)Copyright,all rights reserved,Yashok,1997-2004