Beispiel #1
0
STDMETHODIMP CFACE::fClear( ){
	LogBegin( "fClearMethod" );
	LogPut( CONTINUE , IDS_LOG_FILEIO , WritingPath );
	HANDLE hFile;
	if ( NULL == ( hFile = CreateFile( WritingPath , GENERIC_WRITE , 0 , NULL , CREATE_ALWAYS, 
		FILE_ATTRIBUTE_NORMAL , NULL ) )) 
		LogPut( FATAL , IDS_ERR_INVALIDFILE );
	CloseHandle( hFile );

	return S_OK;
}
Beispiel #2
0
STDMETHODIMP CFACE::Snd_Open( LONG BufferID , BSTR FileName ){
	USES_CONVERSION;
	// 開始
	LogBegin( _T( "Snd_Open" ) );
	//モードチェックと範囲チェック
	CHECK_MODE( dwSndMode );
	CHECK_RANGE_STR( BufferID , 0 , dwBufferNum , "Sound系関数(Snd_Open)->BufferID" );
	/* スプライトへのアクセスポインタ -- */
	BUFFERS *lpBuffer = &Buffers[ BufferID ];
	lpBuffer->Clear( );
	/* ファイルへのパスを取得する */
	// ログアウト
	LogPut( CONTINUE , IDS_LOG_LOADFROMFILE , OLE2T( FileName ) , BufferID );
	TCHAR FilePath[ MAX_PATH ] , lpFormatStr[ 64 ];
	if ( !GetFilePath( OLE2T( FileName ) , FilePath ) )
		LogPut( FATAL , IDS_ERR_FILENOTFOUND );
	lpBuffer->SndPts = fopen( FilePath , _T( "rb" ) );
	
	// Check OGG Vorbis File?
	if ( ogg_Open( lpBuffer ) != S_OK ){
		// Check WAV File?
		if ( wav_Open( lpBuffer ) != S_OK )
			LogPut( FATAL , IDS_ERR_INVALIDFILE );
		else
			lstrcpy( lpFormatStr ,  _T( " ** WavFile **" ) );
	}else
		lstrcpy( lpFormatStr , _T(" ** OGGVorbisFile ** " ) );

	// SoundBuffer構築構造体を初期化
	lpBuffer->Make( BufferID == 0 );
	/* Notify定義 */
	if ( BufferID == 0 ){
		SAFE_RELEASE( Notify );
		// DirectSoundNotifyの作成
		lpBuffer->SecBuf->QueryInterface( IID_IDirectSoundNotify ,(LPVOID*)&Notify );

		DSBPOSITIONNOTIFY pn[3];
			pn[0].dwOffset = lpBuffer->WaveFormat.nAvgBytesPerSec * BufferSec - 1;
			pn[0].hEventNotify = hEvent[ 0 ];
			pn[1].dwOffset = lpBuffer->WaveFormat.nAvgBytesPerSec * BufferSec / 2;
			pn[1].hEventNotify = hEvent[ 1 ];
			pn[2].dwOffset = DSBPN_OFFSETSTOP;	// 再生停止
			pn[2].hEventNotify = hEvent[ 2 ];
		Notify->SetNotificationPositions( 3 , pn );		
	}
	// ログアウト
	LogPut( CONTINUE , IDS_LOG_SOUNDINFO , lpFormatStr );
	LogQuit( );
	return S_OK;
}
Beispiel #3
0
STDMETHODIMP CFACE::fOpen( BSTR FName ){
	USES_CONVERSION;
	// 書き込みファイル名生成
	wsprintf( WritingPath , _T( "%s\\%s.FACEDat" ) , FACEDir , OLE2T( FName ) );
	LogBegin( "fOpenMethod" );
	LogPut( CONTINUE , IDS_LOG_FILEIO , WritingPath );
	// オープン
	HANDLE hFile;
	if ( NULL == ( hFile = CreateFile( WritingPath , GENERIC_WRITE , 0 , NULL , OPEN_ALWAYS , 
		FILE_ATTRIBUTE_NORMAL , NULL ) ) )
			LogPut( FATAL , IDS_ERR_INVALIDFILE );
	CloseHandle( hFile );

	return S_OK;
}
Beispiel #4
0
/*------------------------
	イニシャライズ
  -------------------------*/
STDMETHODIMP CFACE::Sound( LONG DSMODE ){ if ( DSMODE == dwSndMode ) return S_OK;
	// ログに記述
		LogBegin( "Sounds Initializer" );
		LogPut( CONTINUE , IDS_LOG_MODEOUT , DSMODE ); 

	// ハンドルチェック
		CHECK_HWND;
	// グラフィック定数範囲チェック
		CHECK_RANGE( DSMODE , 0 , 1 );

	// 使用しないモード
	if ( DSMODE == SOUNDDISABLE ) SoundRelease( ); 
	else{
		SoundRelease( );	// 全解放
		// DirectSound を作成する。
		if ( FAILED( DirectSoundCreate( NULL , &ObjDS , NULL ) ) )
			DSoundInitFailed;
		// 協調レベルを設定する
		if ( FAILED( ObjDS->SetCooperativeLevel( hWnd , DSSCL_NORMAL ) ) )
			DSoundInitFailed;
		// イベントの作成
		// at Half, at EndPos , FinallyHandler at Half
		for ( int i = 0 ; i < 3 ; i++ ) 
			hEvent[ i ] = CreateEvent( NULL , FALSE , FALSE , NULL );
	}
	dwSndMode = (BYTE)DSMODE;
	LogQuit( );
	return S_OK;
}
Beispiel #5
0
STDMETHODIMP CFACE::fWriteString( BSTR Category, BSTR KeyName, BSTR Data){
	USES_CONVERSION;

	if ( !WritePrivateProfileString( OLE2T( Category ), OLE2T( KeyName ) , OLE2T( Data ) , WritingPath ) )
		LogPut( FATAL , IDS_ERR_INVALIDFILE );

	return S_OK;
}
Beispiel #6
0
STDMETHODIMP CFACE::fWriteInteger( BSTR Category, BSTR KeyName, LONG Data){	
	USES_CONVERSION;

	TCHAR DataString[ 256 ] ; ZeroMemory( DataString , sizeof(DataString) );
	wsprintf( DataString , _T( "%l" ) , Data );
	
	if ( !WritePrivateProfileString( OLE2T( Category ), OLE2T( KeyName ) , DataString , WritingPath ) )
		LogPut( FATAL , IDS_ERR_INVALIDFILE );

	return S_OK;
}
Beispiel #7
0
bool LogInit(const const_unicode_string& log_name)
{
	delete g_log;
	g_log = new (nonpaged) log_t();
	if(!g_log){
		dbg::error("Failed allocate log file object");
		return false;
	}

	bool ok = g_log->create(log_name.get_string(), file::open_if, file::append_data);
	if(!ok){
		dbg::error("Failed to open log file");
		delete g_log;
		g_log = NULL;
	}else{
		LogPut(const_ansi_string("\n-- "), false);
	}
	return ok;
}
Beispiel #8
0
STDMETHODIMP CFACE::SpriteLoadFromFile( LONG SpriteID , BSTR FileName ){
	USES_CONVERSION;
	// 開始
	LogBegin( _T( "SpriteLoadFromFile" ) );
	//モードチェックと範囲チェック
	CHECK_MODE( dwDrawMode );
	CHECK_RANGE_STR( SpriteID , 0 , dwSpriteNum , "Draw系関数(DSetColorKey)->Sprite ID" );
	// ログアウト
	LogPut( CONTINUE , IDS_LOG_LOADFROMFILE , OLE2T( FileName ) , SpriteID );
	/* スプライトへのアクセスポインタ -- */
	SPRITE *lpSprite = &Sprites[ SpriteID ];
	lpSprite->Clear( );
	/* ファイルへのパスを取得する */
	TCHAR FilePath[ MAX_PATH ];
	if ( !GetFilePath( OLE2T( FileName ) , FilePath ) )
		LogPut( FATAL , IDS_ERR_FILENOTFOUND );
	/* 外部ライブラリのロード */
	HINSTANCE	jpg , png; 
	ISSUPPORTED	jpgIsSupported	,	pngIsSupported;
	GETPICTURE	jpgGetPicture	,	pngGetPicture ;
	HBITMAP		hBitmap ;
	GETPICTURE		GetFunc = NULL;	// 読み込み先
	// JPGLibの取り込み
		if ( jpg = LoadLibrary( _T( "jpegloader." ) ) ){
			// 関数ロード
			jpgIsSupported	= (ISSUPPORTED)GetProcAddress( jpg , "IsSupported" );
			jpgGetPicture	= (GETPICTURE) GetProcAddress( jpg , "GetPicture" );
			if (!( jpgIsSupported && jpgGetPicture ) ){
				FreeLibrary( jpg ); jpg = NULL;
			}
		}
	// PNGLibの取り込み
		if ( png = LoadLibrary( _T( "pngloader." ) ) ){
			// 関数ロード
			pngIsSupported	= (ISSUPPORTED)GetProcAddress( png , "IsSupported" );
			pngGetPicture	= (GETPICTURE) GetProcAddress( png , "GetPicture" );
			if ( !( pngIsSupported && pngGetPicture ) ){
				FreeLibrary( png ); png = NULL;
			}
		}
	// 対応を調べる
		TCHAR lpFormatStr[ 64 ];
		HANDLE hFile = CreateFile( FilePath  , GENERIC_READ , FILE_SHARE_READ , NULL , 
			OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL );
		// Chk JPG
		if ( jpg && jpgIsSupported( FilePath , (DWORD)hFile ) ){
			GetFunc = jpgGetPicture;
			lstrcpy( lpFormatStr, _T("Joint Photographic Exports Group(JPEG) Image file") );
		}else{
			CloseHandle( hFile );
			hFile = CreateFile( FilePath  , GENERIC_READ , FILE_SHARE_READ , NULL , 
				OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL );
			// Chk PNG
			if ( png && pngIsSupported( FilePath , (DWORD)hFile ) ){
				GetFunc = pngGetPicture; 
				lstrcpy( lpFormatStr, _T( "Portable Network Graphics(PNG) Image file" ) );
			}else{
				CloseHandle( hFile );
				// Chk BMP
				if ( hBitmap = ( HBITMAP )LoadImage( NULL , FilePath , IMAGE_BITMAP , 
					0 , 0 , LR_LOADFROMFILE | LR_CREATEDIBSECTION ) ) 
						lstrcpy( lpFormatStr, _T( "BITMAP Image file **" ) );
				else{
					LogPut( FATAL , IDS_ERR_INVALIDFILE );
				}
			}
		}
	SIZE Size ;	// 幅と高さ情報		
	if ( GetFunc ){
		CloseHandle( hFile );
		// ライブラリからロードすることができる
		HDC				DestDC;
		HANDLE			hBitmapInfo , hBitmapBitData;
		LPBYTE			m_pImage;
		LPBITMAPINFO	m_pHDR;
	
		GetFunc( FilePath , 0 , 0 , 
			&hBitmapInfo , &hBitmapBitData , ProgressCallback , 0 );
		m_pImage	= (LPBYTE)LocalLock(hBitmapBitData);
		m_pHDR		= (LPBITMAPINFO)LocalLock(hBitmapInfo);
		// 情報取得
		Size.cx = m_pHDR->bmiHeader.biWidth;
		Size.cy = m_pHDR->bmiHeader.biHeight;
		// スプライト作成
		lpSprite->Make( Size.cx , Size.cy );
		//GDI関数でブロック転送
		DestDC = lpSprite->GetSprDC( );
		StretchDIBits( DestDC , 0 , 0 , Size.cx , Size.cy , 0 , 0 , 
					Size.cx , Size.cy , m_pImage , m_pHDR , 
					DIB_RGB_COLORS , SRCCOPY );
		lpSprite->EndSprDC( DestDC );

		/* -- 読み込みに使用したオブジェクトの開放 -- */
		LocalUnlock( hBitmapInfo );
		LocalUnlock( hBitmapBitData );
		LocalFree( m_pHDR );
		LocalFree( m_pImage );
		if ( png )FreeLibrary( png );
		if ( jpg )FreeLibrary( jpg );
	}else{
		HDC			SrcDC , DestDC;
		BITMAP		bmp;
		//ビットマップヘッダからサイズを取得
		GetObject( hBitmap , sizeof( BITMAP ) , ( LPSTR )&bmp );
		Size.cx = bmp.bmWidth; Size.cy = bmp.bmHeight;
		// 空のCompatibleDCを作成後BMPと関連づける
		SrcDC	= CreateCompatibleDC( NULL );
		SelectObject( SrcDC , hBitmap );
		// スプライト作成
		lpSprite->Make( Size.cx, Size.cy );
		//GDI関数でブロック転送
		DestDC = lpSprite->GetSprDC( );
		BitBlt( DestDC , 0 , 0 , Size.cx , Size.cy , SrcDC , 0 , 0 , SRCCOPY );
		lpSprite->EndSprDC( DestDC );
		// 解放
		DeleteObject( hBitmap );
		DeleteDC( SrcDC );
	}
	// 幅と高さの書き出し
	LogPut( CONTINUE , IDS_LOG_IMAGEINFO , lpFormatStr, EXPAND_SIZE( Size ) );
	LogQuit( );
	// カラーキー適応
	DSetColorKey( lpSprite->CLRKey , SpriteID ); 
	
	return S_OK;
}
Beispiel #9
0
STDMETHODIMP CFACE::Download( BSTR URL, BSTR DownloadFile ){
	
	USES_CONVERSION;

	HANDLE hFile; TCHAR DownloadTo[ MAX_PATH ] , TXT[ 256 ] ;
	HWND hDialog;

	LogBegin( "File Download Method" );
	LogPut( CONTINUE , IDS_LOG_DOWNLOAD , URL );
	// ユーザーフォルダ名を取得
	// ダイアログの作成
	hDialog = CreateDialog( hInst ,MAKEINTRESOURCE( IDD_DownLoading ) , 
		hWnd , (DLGPROC)DownLoadProc );
	wsprintf( TXT , _T( "%s \nDown To : %s " ) , OLE2T( URL ) , OLE2T( DownloadFile ) );
	SetWindowText( GetDlgItem( hDialog , IDC_Down ) ,TXT );
	// そこに、ファイル名を追加することで、ダウンロード先の完成
	wsprintf( DownloadTo , _T( "%s\\%s" ) , FACEDir , OLE2T( DownloadFile ) );
	
    // ダウンロードを行う関数をロード
	DWORD dwBytesWrite , dwBytesRead , dwBytesAvailable , dwTotalRead = 0; 
	BYTE *Buffer;
	
	// DLL関数初期化
	HANDLE hInternet = InternetOpen( 
				_T( "FACE Download Method" ) , 
				INTERNET_OPEN_TYPE_PRECONFIG , NULL , NULL , 0 ) , 
			hInternetFile = InternetOpenUrl( hInternet , OLE2T( URL ) , NULL , 0 ,0 , 0 );
	LogPut( CONTINUE , IDS_LOG_DOWNLOAD , OLE2T( URL ) );

	if ( hInternet == NULL || hInternetFile == NULL )
		LogPut( FATAL , IDS_ERR_CANTDOWNLOAD );

	// 最適サイズ取得
	InternetQueryDataAvailable( hInternetFile , &dwBytesAvailable, 0, 0 );
	Buffer = (BYTE*)malloc( dwBytesAvailable + 1 );
	// タイムアウト設定
	DWORD TimeOut;
	TimeOut = 30 * 1000;  // ここでは30秒に指定しています。
	InternetSetOption( hInternetFile, INTERNET_OPTION_RECEIVE_TIMEOUT,  &TimeOut, sizeof(TimeOut) );

	// インターネットファイルの更新日時をクエリー
	SYSTEMTIME LastModified;
	dwBytesRead = sizeof(LastModified);
	HttpQueryInfo( hInternetFile , HTTP_QUERY_LAST_MODIFIED  | HTTP_QUERY_FLAG_SYSTEMTIME 
		, &LastModified , &dwBytesRead , 0 );
	// ファイルがすでにある場合は更新日時をチェック
	if ( ( hFile = CreateFile( DownloadTo , GENERIC_WRITE , 0 , NULL , 
		OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL  ) ) != INVALID_HANDLE_VALUE ){
			// 更新日時の比較
		FILETIME ft2,ft1;
		SystemTimeToFileTime( &LastModified , &ft2 );
		FileTimeToLocalFileTime( &ft2 , &ft1 );
		GetFileTime( hFile , NULL , NULL , &ft2 );
		CloseHandle( hFile );
	}
	
	hFile = CreateFile( DownloadTo , GENERIC_WRITE , 0 , NULL , 
		CREATE_ALWAYS , FILE_ATTRIBUTE_NORMAL , NULL  );

	LONG x = -40 , ax = 1; // Progressing

	do{
		ZeroMemory( Buffer , sizeof(Buffer) );
		// ダウンロード
		InternetReadFile( hInternetFile , Buffer , dwBytesAvailable , &dwBytesRead );
		sprintf( TXT , _T( 
			" 最適レート / 実ダウン : %d / %d Bytes" ) , 
			dwBytesAvailable , dwBytesRead );
		SetWindowText( GetDlgItem( hDialog , IDC_Down3 ) , TXT );

		/* -- ダウンロード総容量の表示 -- */
		dwTotalRead += dwBytesRead;
		if ( dwTotalRead < 1000000 )
			sprintf( TXT , _T( 
			" ダウンロード済みサイズ : %.3g KBytes" ) , 
				(double)dwTotalRead / 1024 );
		else
			sprintf( TXT , _T( 
			" ダウンロード済みサイズ : %.3g MBytes " ) , 
				(double)dwTotalRead / 1024 / 1024 );
		SetWindowText( GetDlgItem( hDialog , IDC_Down2 ) , TXT );

		// ダウンロード進行を示す プログレス
		x += ax; 
		HDC hDC = GetDC( GetDlgItem( hDialog , IDC_PROGRESS1 ) );
		RECT RT ;
		GetClientRect( GetDlgItem( hDialog , IDC_PROGRESS1 ) ,  &RT );
		if ( x < RT.left- 40 || x > RT.right + 30 ) ax *= -1;
		FillRect( hDC , &RT , (HBRUSH)( COLOR_BTNFACE + 1 ) );
		
		SetRect( &RT, x , 0 , x + 30 , 10 );
		FillRect( hDC , &RT , (HBRUSH)( COLOR_ACTIVECAPTION + 1 ) );
		ReleaseDC(  GetDlgItem( hDialog , IDC_PROGRESS1 ) , hDC );

		Buffer [ dwBytesRead ] = 0;
		WriteFile( hFile , Buffer , dwBytesRead , &dwBytesWrite , NULL );

		BOOL END; DoEvents( &END );if (END)break;
	}while ( dwBytesRead > 0 );

	InternetCloseHandle( hInternetFile );
	InternetCloseHandle( hInternet );
	
	CloseHandle( hFile );
	DestroyWindow( hDialog );

	LogQuit( );

	return S_OK;
}