戻る 第4章 スケルトンプログラムの詳細 次へ


Windowの表示は出来ましたけど細かい機能の説明がまだですね
それでは説明をして行きます。

//dosやUNIXでいうmain関数に当るものです。
//WindowsのプログラムはWinMainからスタートし、
//WinMainが終わるとプログラムも終了します。
int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, 
LPSTR lpszArgs, int nWinMode)
{ 
	//ハンドルとは車のハンドルと同じように
	//指揮権と言う意味合いで覚えておいてください。
	HWND hwnd;//ハンドルを保持する変数
	//1章で説明した「メッセージ」を保持しておくための構造体です
	MSG msg;//メッセージを保持する変数
	//ウィンドウクラスを登録するための情報を記憶させる構造体です。
	//後ろにEXとついてることからわかるように拡張されていますが,
	//気にせずこっちを使いましょう
	WNDCLASSEX wcl;//Windowクラスを保持する変数

	char szWinName[] = "new_win";//クラス名を保持する変数


	//以下の代入はウィンドウクラスの設定をしています

	wcl.cbSize = sizeof(WNDCLASSEX); 
	wcl.hInstance = hThisInst;//このインスタンスのハンドル
	wcl.lpszClassName = szWinName;//ウィンドウクラスの名前
	wcl.lpfnWndProc = WinProc; //ウィンドウプロシージャ関数
	wcl.style = 0; //デフォルトのスタイル

	wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION);//標準アイコン
	wcl.hIconSm = LoadIcon(NULL, IDI_WINLOGO); //小さいアイコン
	wcl.hCursor = LoadCursor(NULL, IDC_ARROW); //カーソルのスタイル

	wcl.lpszMenuName = NULL; //メニューバーを使用しない
	wcl.cbClsExtra = 0; //そのほかの情報は必要ない
	wcl.cbWndExtra = 0; //そのほかの情報は必要ない

	//ウィンドウの背景を白にする
	wcl.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); 

	//ここでWindowsに「こんなWindowを作りますよ」という通知をします。
	if(!RegisterClassEx(&wcl)) return 0;
	//失敗するとWinMainを終了=プログラムが終わります

	//登録したウィンドウクラス情報をもとにWindowを作成します。
	hwnd = CreateWindow(szWinName,//さっき作成したウィンドウクラスを書く
	"ぶーにゃんのSDKプログラム",//タイトルバーに表示される文字
	WS_OVERLAPPEDWINDOW,//Windowスタイル
	100, 100,//初期x,y座標
	240, 160,//Windowの大きさ(x、y)
	HWND_DESKTOP, //親ウィンドウはない
	NULL, //メニューを使用しない
	hThisInst, //プログラムのこのインスタンスのハンドル
	NULL //このほかの引数は必要ないのでNULL指定
	);

	//Windowを作りましたけどまだ表示はされていません
	//ここでShowWindow関数を呼び出して始めて表示されます。
	ShowWindow(hwnd, nWinMode);//Windowを表示する
	UpdateWindow(hwnd);

	//1章で説明した「メッセージ」を受け取る為のループです。
	while(GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg); 
		DispatchMessage(&msg); 
	}
	return msg.wParam;
}



標準なWindowスタイル
スタイルマクロ機能
WS_OVERLAPPED 境界線
WS_MAXIMIZEBOX最大化ボタン
WS_MINIMIZEBOX最小化ボタン
WS_SYSMENU システムメニュー
WS_HSCROLL 水平スクロールバー
WS_VSCROLL 垂直スクロールバー
現在指定しているWS_OVERLAPPEDWINDOWは、 WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SYSMENU | WS_OVERLAPPED と同じ意味です。 復習問題: 1.ウィンドウスタイルを変えてみましょう。