//
// アプリケーションサポートクラス
//

#ifndef	__CAPP_INCLUDED__
#define	__CAPP_INCLUDED__

#define	WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

#define	ERRORSTRING_MAX	32

class CApp {
public:
	// 起動時に設定する
	static	void	SetInstance( HINSTANCE hInstance )	{ m_hInstance = hInstance; }
	static	void	SetPrevInstance( HINSTANCE hInstance )	{ m_hPrevInstance = hInstance; }
	static	void	SetCmdLine( LPSTR lpCmdLine )		{ m_lpCmdLine = lpCmdLine; }
	static	void	SetCmdShow( INT nCmdShow )		{ m_nCmdShow = nCmdShow; }

	static	void	SetHWnd( HWND hWnd )			{ m_hWnd = hWnd; }
	static	void	SetMenu( HMENU hMenu )			{ m_hMenu = hMenu; }
	static	void	SetPlugin( HINSTANCE hPlugin )		{ m_hPlugin = hPlugin; LoadErrorString(); }

	static	void	SetModulePath( LPCSTR lpModulePath )	{ ::strcpy( m_szModulePath, lpModulePath ); }

	// アプリ内部で使用する
	static	HINSTANCE	GetInstance()		{ return m_hInstance; }
	static	HINSTANCE	GetPrevInstance()	{ return m_hPrevInstance; }
	static	LPTSTR		GetCmdLine()		{ return m_lpCmdLine; }
	static	INT		GetCmdShow()		{ return m_nCmdShow; }

	static	HWND		GetHWnd()		{ return m_hWnd; }
	static	HMENU		GetMenu()		{ return m_hMenu; }
	static	HINSTANCE	GetPlugin()		{ return m_hPlugin; }

	static	LPCSTR		GetModulePath()		{ return m_szModulePath; }

	static	HMENU		LoadMenu( UINT uID )	{ return ::LoadMenu( m_hPlugin, MAKEINTRESOURCE(uID) ); }
	static	HICON		LoadIcon( UINT uID )	{ return ::LoadIcon( m_hInstance, MAKEINTRESOURCE(uID) ); }
	static	INT		LoadString( UINT uID, LPTSTR lpBuffer, INT nBufferMax ) {
					return	::LoadString( m_hPlugin, uID, lpBuffer, nBufferMax ); }

	// エラー処理用
	static	void	LoadErrorString();
	static	CHAR*	GetErrorString( INT nID );

protected:
	// WinMain からの引数そのまま
	static	HINSTANCE	m_hInstance;
	static	HINSTANCE	m_hPrevInstance;
	static	LPSTR		m_lpCmdLine;
	static	INT		m_nCmdShow;

	// 言語リソースプラグインのインスタンスハンドル
	static	HINSTANCE	m_hPlugin;
	// メインウインドウのウインドウハンドル
	static	HWND		m_hWnd;
	// メインウインドウのメニューハンドル
	static	HMENU		m_hMenu;

	// プログラムのパス(起動時のパス)
	static	CHAR		m_szModulePath[_MAX_PATH];

	// エラー処理用
	static	INT	m_ErrorStringTableID[ERRORSTRING_MAX];
	static	CHAR	m_ErrorString[ERRORSTRING_MAX][256];
private:
};

// エラーメッセージ用テンポラリ
extern	CHAR	szErrorString[256];

#endif	// !__CAPP_INCLUDED__
