Artifact 6f13d2b44d31dee8be4e249abe2479a24e875a66
#ifndef _KILIB_APP_H_
#define _KILIB_APP_H_
#include "types.h"
#include "log.h"
#ifndef __ccdoc__
namespace ki {
#endif
//=========================================================================
//@{ @pkg ki.Core //@}
//@{
//	アプリケーション全体の統括
//
//	アプリ起動/終了用処理を担当します。
//	旧kilibと違って、ユーザー側のアプリケーションクラスを
//	ここから派生させることは出来ません。ユーザーのコードは、
//	必ず kmain() というグローバル関数から実行開始されます。
//	このAppクラス自体は、主にHINSTANCEの管理を行うだけ。
//@}
//=========================================================================
class App
{
public:
	enum imflag { CTL=1, COM=2, OLE=4 };
	//@{
	//	種々のモジュールを初期化する
	//
	//	これで初期化しておくと、App終了時に自動で
	//	終了処理が行われるので簡単便利でございます。
	//	@param what CTL(コモンコントロール)、COM、OLE
	//@}
	void InitModule( imflag what );
	//@{ プロセス強制終了 //@}
	void Exit( int code );
	//@{ リソース //@}
	HACCEL LoadAccel( LPCTSTR name );
	//@{ リソース //@}
	HACCEL LoadAccel( UINT id );
	//@{ リソース //@}
	HBITMAP LoadBitmap( LPCTSTR name );
	//@{ リソース //@}
	HBITMAP LoadBitmap( UINT id );
	//@{ リソース(OBM_XXXX) //@}
	HBITMAP LoadOemBitmap( LPCTSTR obm );
	//@{ リソース //@}
	HCURSOR LoadCursor( LPCTSTR name );
	//@{ リソース //@}
	HCURSOR LoadCursor( UINT id );
	//@{ リソース(IDC_XXXX) //@}
	HCURSOR LoadOemCursor( LPCTSTR idc );
	//@{ リソース //@}
	HICON LoadIcon( LPCTSTR name );
	//@{ リソース //@}
	HICON LoadIcon( UINT id );
	//@{ リソース(IDI_XXXX) //@}
	HICON LoadOemIcon( LPCTSTR idi );
	//@{ リソース //@}
	HMENU LoadMenu( LPCTSTR name );
	//@{ リソース //@}
	HMENU LoadMenu( UINT id );
	//@{ リソース //@}
	int LoadString( UINT id, LPTSTR buf, int siz );
public:
	//@{ インスタンスハンドル //@}
	HINSTANCE hinst() const;
	//@{ Windowsのバージョン //@}
	static const OSVERSIONINFO& osver();
	static bool isWin95();
	static bool isNT();
	static bool isNewTypeWindows();
private:
	App();
	~App();
	void SetExitCode( int code );
private:
	int             exitcode_;
	ulong           loadedModule_;
	const HINSTANCE hInst_;
	static App*     pUniqueInstance_;
private:
	friend void APIENTRY Startup();
	friend inline App& app();
	NOCOPY(App);
};
//-------------------------------------------------------------------------
//@{ 唯一のアプリ情報オブジェクトを返す //@}
inline App& app()
	{ return *App::pUniqueInstance_; }
inline HACCEL App::LoadAccel( LPCTSTR name )
	{ return ::LoadAccelerators( hInst_, name ); }
inline HACCEL App::LoadAccel( UINT id )
	{ return ::LoadAccelerators( hInst_, MAKEINTRESOURCE(id) ); }
inline HBITMAP App::LoadBitmap( LPCTSTR name )
	{ return ::LoadBitmap( hInst_, name ); }
inline HBITMAP App::LoadBitmap( UINT id )
	{ return ::LoadBitmap( hInst_, MAKEINTRESOURCE(id) ); }
inline HBITMAP App::LoadOemBitmap( LPCTSTR obm )
	{ return ::LoadBitmap( NULL, obm ); }
inline HCURSOR App::LoadCursor( LPCTSTR name )
	{ return ::LoadCursor( hInst_, name ); }
inline HCURSOR App::LoadCursor( UINT id )
	{ return ::LoadCursor( hInst_, MAKEINTRESOURCE(id) ); }
inline HCURSOR App::LoadOemCursor( LPCTSTR idc )
	{ return ::LoadCursor( NULL, idc ); }
inline HICON App::LoadIcon( LPCTSTR name )
	{ return ::LoadIcon( hInst_, name ); }
inline HICON App::LoadIcon( UINT id )
	{ return ::LoadIcon( hInst_, MAKEINTRESOURCE(id) ); }
inline HICON App::LoadOemIcon( LPCTSTR idi )
	{ return ::LoadIcon( NULL, idi ); }
inline HMENU App::LoadMenu( LPCTSTR name )
	{ return ::LoadMenu( hInst_, name ); }
inline HMENU App::LoadMenu( UINT id )
	{ return ::LoadMenu( hInst_, MAKEINTRESOURCE(id) ); }
inline int App::LoadString( UINT id, LPTSTR buf, int siz )
	{ return ::LoadString( hInst_, id, buf, siz ); }
inline HINSTANCE App::hinst() const
	{ return hInst_; }
//=========================================================================
}      // namespace ki
#endif // _KILIB_APP_H_