#include "stdafx.h"

//
// ウインドウベースアプリケーションフレームワークと
// ユーザー実装のブリッジルーチン
//
#include "MyAppli.h"
#include "AboutDlg.h"

// アプリケーションオブジェクト
MyAppli *appObj;

/**
 * アプリケーションオブジェクトを作成します。
 */
WindowAppliBase *createAppli()
{
	// TODO;ここでユーザーのアプリケーションオブジェクトを作成します。
	appObj = new MyAppli();
	return appObj;
}

/**
 * ウィンドウクラスを登録します。
 *
 * @param hInstance アプリケーションのインスタンスハンドル
 * @return ウインドウクラスのクラスアトム
 */
ATOM MyRegisterClass(HINSTANCE hInstance)
{
	WNDCLASSEX wcex;

	wcex.cbSize = sizeof(WNDCLASSEX);

	wcex.lpfnWndProc	= WndProc;
	wcex.cbClsExtra		= 0;
	wcex.cbWndExtra		= 0;
	wcex.hInstance		= hInstance;
	wcex.lpszClassName	= szWindowClass;

	// TODO:アプリケーション固有の情報を記述します。
	// ウインドウスタイル
	wcex.style			= CS_HREDRAW | CS_VREDRAW;
	// アイコン
	wcex.hIcon			= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPICON));
	// スモールアイコン
	wcex.hIconSm		= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
	// カーソル
	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
	// 背景色
	// ウインドウ色
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
	// メニュー等に色を合わせる。
	// wcex.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
	// メニュー名
	wcex.lpszMenuName	= MAKEINTRESOURCE(IDC_APP_MENU);

	return RegisterClassEx(&wcex);
}


/**
 * アプリケーションウインドウクラスのインスタンスを生成します。
 *
 * @return アプリケーションウインドウクラスのインスタンス
 */
BaseForm *MyAppli::createBaseForm()
{
	return appObj;
}

/**
 * アプリケーションの開始処理を実行します。
 *
 * @param lpCmdLine コマンドライン
 * @return 予備
 */
int MyAppli::OnAppliStart(TCHAR *lpCmdLine)
{
	// TODO:この関数をオーバーライドしてアプリ固有の初期化を行います。
	return 0;
}

/**
 * ウインドウが表示されたときの処理を実行します。
 *
 * @return 予備
 */
int MyAppli::OnWindowShow()
{
	// TODO:この関数をオーバーライドして、初回の表示時の処理を行います。
	// このタイミングでウインドウが存在するので、ここに処理を入れることで
	// ウインドウがある状態で起動時の初期化処理を行うことができます。

	return 0;
}

/**
 * アプリケーションの終了処理を実行します。
 *
 * @return 予備
 */
int MyAppli::OnAppliEnd()
{
	// TODO:この関数をオーバーライドしてアプリ固有の後処理を行います。
	return 0;
}

/**
 * WM_COMMANDメッセージが来た時の処理を行います。
 *
 * @param wmId 
 * @param wmEvent
 * @return メッセージ処理結果
 */
LRESULT MyAppli::OnCommand(int wmId, int wmEvent)
{
	switch(wmId) {
		case IDM_EXIT:
			DestroyWindow(hWnd);
			break;
		case IDM_ABOUT:
			// バージョン情報ダイアログ表示サンプル
			AboutDlg *dlg = new AboutDlg(hWnd, IDD_ABOUTBOX);
			dlg->showModal();
			delete dlg;
			break;
	}

	return BaseForm::OnCommand(wmId, wmEvent);
}