メインウィンドウ

WNDCLASSEX構造体を継承して、MyWndClassクラスを作ります。

MyWndClass クラス (MyWndClass.h)

ファイル名は、MyWndClass.h とします。 クラスの名前は、MyWndClass です。

#pragma once

/*
	メインウィンドウ
*/

// グローバル変数
HINSTANCE hInst;	// アプリケーションインスタンスのハンドル
HWND hWnd;			// メインウィンドウのウィンドウハンドル

// 宣言
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);	// ウインドウプロシージャ

// MyWndClass クラス(WNDCLASSEX構造体)
class MyWndClass : public WNDCLASSEX{
public:
	// コンストラクタ
	MyWndClass(LPCTSTR AppName){
		// ウィンドウの定義
		cbSize = sizeof(WNDCLASSEX);	// WNDCLASSEXのサイズ
		style = CS_HREDRAW | CS_VREDRAW;// 拡張スタイル
		lpfnWndProc = WndProc;			// ウィンドウプロシージャ
		cbClsExtra = 0;					// 追加領域
		cbWndExtra = 0;					// 追加領域
		hInstance = hInst;				// インスタンス
		hIcon = LoadIcon(NULL,IDI_APPLICATION);		// アイコン
		hCursor = LoadCursor(NULL,IDC_ARROW);		// カーソル
		hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);	// 背景ブラシ
		lpszMenuName = NULL;						// メニュー
		lpszClassName = AppName;					// クラス名
		hIconSm = LoadIcon(NULL, IDI_WINLOGO);		// 小さなアイコン
	}
	
	// プロパティ
	void BackColor(HBRUSH col){
		hbrBackground = col;
	}
	void Menu(LPCTSTR mn){
		lpszMenuName = mn;
	}
};

解説

まず、グローバル変数と、ウィンドウプロシージャの宣言があります。

WNDCLASSEX構造体を継承して、MyWndClassクラスを作ります。 コンストラクタを使って、"よくあるWindowsプログラム"と同じ値になるようにしました。 これで、青くなっている4つのメンバーは決定です。 他もほとんど変わりません。 ただ、メニューと背景ブラシは気軽に扱えるよう、メソッドを作りました。

クラス変数の宣言は、次のように書きます。 引数は、アプリケーション名です。

MyWndClass wc(TEXT("win114"));

この時点で自動的にコンストラクタを実行してくれるので、"よくあるWindowsプログラム"と同じになります。

使うときは構造体と同じで、ドット"." を使って、wc.style のように使います。

次回は、もう1つクラスを作ります。


[前] [目次] [次]