File Annotation

Not logged in
dcdd144598 2011-02-23        kinaba: #include "stdafx.h"
dcdd144598 2011-02-23        kinaba: #include "app.h"
dcdd144598 2011-02-23        kinaba: #include "log.h"
dcdd144598 2011-02-23        kinaba: #include "memory.h"
dcdd144598 2011-02-23        kinaba: #include "thread.h"
dcdd144598 2011-02-23        kinaba: #include "window.h"
dcdd144598 2011-02-23        kinaba: #include "string.h"
dcdd144598 2011-02-23        kinaba: using namespace ki;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //=========================================================================
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: App* App::pUniqueInstance_;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: inline App::App()
dcdd144598 2011-02-23        kinaba: 	: exitcode_    (-1)
dcdd144598 2011-02-23        kinaba: 	, loadedModule_(0)
dcdd144598 2011-02-23        kinaba: 	, hInst_       (::GetModuleHandle(NULL))
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// 唯一のインスタンスは私です。
dcdd144598 2011-02-23        kinaba: 	pUniqueInstance_ = this;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: #pragma warning( disable : 4722 ) // 警告:デストラクタに値が戻りません
dcdd144598 2011-02-23        kinaba: App::~App()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// ロード済みモジュールがあれば閉じておく
dcdd144598 2011-02-23        kinaba: 	if( loadedModule_ & COM )
dcdd144598 2011-02-23        kinaba: 		::CoUninitialize();
dcdd144598 2011-02-23        kinaba: 	if( loadedModule_ & OLE )
dcdd144598 2011-02-23        kinaba: 		::OleUninitialize();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// 終〜了〜
dcdd144598 2011-02-23        kinaba: 	::ExitProcess( exitcode_ );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: inline void App::SetExitCode( int code )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// 終了コードを設定
dcdd144598 2011-02-23        kinaba: 	exitcode_ = code;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void App::InitModule( imflag what )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// 初期化済みでなければ初期化する
dcdd144598 2011-02-23        kinaba: 	if( !(loadedModule_ & what) )
dcdd144598 2011-02-23        kinaba: 		switch( what )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 		case CTL: ::InitCommonControls(); break;
dcdd144598 2011-02-23        kinaba: 		case COM: ::CoInitialize( NULL ); break;
dcdd144598 2011-02-23        kinaba: 		case OLE: ::OleInitialize( NULL );break;
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// 今回初期化したモノを記憶
dcdd144598 2011-02-23        kinaba: 	loadedModule_ |= what;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void App::Exit( int code )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// 終了コードを設定して
dcdd144598 2011-02-23        kinaba: 	SetExitCode( code );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// 自殺
dcdd144598 2011-02-23        kinaba: 	this->~App();
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: const OSVERSIONINFO& App::osver()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	static OSVERSIONINFO s_osVer;
dcdd144598 2011-02-23        kinaba: 	if( s_osVer.dwOSVersionInfoSize == 0 )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		// 初回だけは情報取得
dcdd144598 2011-02-23        kinaba: 		s_osVer.dwOSVersionInfoSize = sizeof( s_osVer );
dcdd144598 2011-02-23        kinaba: 		::GetVersionEx( &s_osVer );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	return s_osVer;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool App::isNewTypeWindows()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	static const OSVERSIONINFO& v = osver();
dcdd144598 2011-02-23        kinaba: 	return (
dcdd144598 2011-02-23        kinaba: 		( v.dwPlatformId==VER_PLATFORM_WIN32_NT && v.dwMajorVersion>=5 )
dcdd144598 2011-02-23        kinaba: 	 || ( v.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS &&
dcdd144598 2011-02-23        kinaba: 	          v.dwMajorVersion*100+v.dwMinorVersion>=410 )
dcdd144598 2011-02-23        kinaba: 	);
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool App::isWin95()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	static const OSVERSIONINFO& v = osver();
dcdd144598 2011-02-23        kinaba: 	return (
dcdd144598 2011-02-23        kinaba: 		v.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS &&
dcdd144598 2011-02-23        kinaba: 		v.dwMajorVersion==4 &&
dcdd144598 2011-02-23        kinaba: 		v.dwMinorVersion==0
dcdd144598 2011-02-23        kinaba: 	);
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool App::isNT()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	static const OSVERSIONINFO& v = osver();
dcdd144598 2011-02-23        kinaba: 	return v.dwPlatformId==VER_PLATFORM_WIN32_NT;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //=========================================================================
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: extern int kmain();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: namespace ki
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	void APIENTRY Startup()
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		// Startup :
dcdd144598 2011-02-23        kinaba: 		// プログラム開始すると、真っ先にここに来ます。
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		// C++のローカルオブジェクトの破棄順序の仕様に
dcdd144598 2011-02-23        kinaba: 		// 自信がないので(^^;、スコープを利用して順番を強制
dcdd144598 2011-02-23        kinaba: 		// たぶん宣言の逆順だとは思うんだけど…
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		LOGGER( "StartUp" );
dcdd144598 2011-02-23        kinaba: 		App myApp;
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			LOGGER( "StartUp app ok" );
dcdd144598 2011-02-23        kinaba: 			ThreadManager myThr;
dcdd144598 2011-02-23        kinaba: 			{
dcdd144598 2011-02-23        kinaba: 				LOGGER( "StartUp thr ok" );
dcdd144598 2011-02-23        kinaba: 				MemoryManager myMem;
dcdd144598 2011-02-23        kinaba: 				{
dcdd144598 2011-02-23        kinaba: 					LOGGER( "StartUp mem ok" );
dcdd144598 2011-02-23        kinaba: 					IMEManager myIME;
dcdd144598 2011-02-23        kinaba: 					{
dcdd144598 2011-02-23        kinaba: 						LOGGER( "StartUp ime ok" );
dcdd144598 2011-02-23        kinaba: 						String::LibInit();
dcdd144598 2011-02-23        kinaba: 						{
dcdd144598 2011-02-23        kinaba: 							const int r = kmain();
dcdd144598 2011-02-23        kinaba: 							myApp.SetExitCode( r );
dcdd144598 2011-02-23        kinaba: 						}
dcdd144598 2011-02-23        kinaba: 					}
dcdd144598 2011-02-23        kinaba: 				}
dcdd144598 2011-02-23        kinaba: 			}
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: #ifdef SUPERTINY
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	extern "C" int __cdecl _purecall(){return 0;}
dcdd144598 2011-02-23        kinaba: 	#ifdef _DEBUG
dcdd144598 2011-02-23        kinaba: 		int main(){return 0;}
dcdd144598 2011-02-23        kinaba: 	#endif
dcdd144598 2011-02-23        kinaba: 	#pragma comment(linker, "/entry:\"Startup\"")
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: #else
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// VS2005でビルドしてもWin95で動くようにするため
dcdd144598 2011-02-23        kinaba: 	#if _MSC_VER >= 1400
dcdd144598 2011-02-23        kinaba: 		extern "C" BOOL WINAPI _imp__IsDebuggerPresent() { return FALSE; }
dcdd144598 2011-02-23        kinaba: 	#endif
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	int APIENTRY WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		ki::Startup();
dcdd144598 2011-02-23        kinaba: 		return 0;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: #endif