WNDCLASSEX構造体を継承して、MyWndClassクラスを作ります。
ファイル名は、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つクラスを作ります。