亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mciapi.cpp

?? 赤壁之戰的游戲源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
////////////
//mciapi.cpp	:	v0020
//writen by		:	Liu Gang(0020), Xie Shen(v0010)
//complier		:	Microsoft Visual C++ 4.2
//Library		:	winmm.lib
//v0010			:	Sep.12.1995
//v0020			:	Feb.9.1997
//v0021			:	Aug.14.1997, changed some convensions
////////////
// implementation file

// this file contains the functions to play avi, midi wav file
// need multimeida library when link

#include "stdafx.h"			// standard includings
#include "assert.h"			// debug functions, error message functions
#include "mciapi.h"

BOOL MCI_bEnableAVI = TRUE;
BOOL MCI_bEnableMIDI = TRUE;
BOOL MCI_bEnableWAV = TRUE;
BOOL MCI_bEnableCDAUDIO = TRUE;

////////////
//AVI Animation functions
////////////
// open avi file
// hwnd		:	window for avi file to play on and receive error message
// filename	:	avi file name, must with full path and extension
// lpRect	:	display rectangle on desination window
//				if NULL, display it with its origional size 
//					and the topleft on destination window is (0,0)
//				if right and bottom is 0, the functions will use 
//					left and top as topleft position on destinaiton window
//				如果為空,在目的窗口的左上角按原大小播放AVI
//				如果right和bottom分量都是0,則以left和top分量為左上角原大小播放AVI
// return	:	-1 if failed, others to be the handle of avi file
//				失敗則返回-1,否則返回avi文件的句柄
int MCI_AVI_Open(HWND hwnd,LPSTR filename,CONST RECT *lpRect/*=NULL*/)
{
	if (!MCI_bEnableAVI) return -1;

	DWORD retrn;
	char b[MCI_STRINGSIZE];
	int videoID;

	//Open avi
	MCI_OPEN_PARMS mciopen;
	mciopen.lpstrDeviceType="avivideo";
	mciopen.lpstrElementName=filename;
	if((retrn=mciSendCommand(0,MCI_OPEN,MCI_WAIT|MCI_OPEN_TYPE|MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&mciopen))!=0L)
	{
		mciGetErrorString(retrn,(LPSTR)b,MCI_STRINGSIZE-1);
		ErrorMessageNoQuit(hwnd, MCI_ERROR_ID+2, b, filename);
		OutputDebugString( "MCI_OpenAvi Error(2): Cannot open file:" );
		OutputDebugString( filename );
		OutputDebugString( "\n" );
//		MCI_bEnableAVI=FALSE;
		return -1;
	}
	videoID=mciopen.wDeviceID;

	// set avi time format
	MCI_SET_PARMS	mciset;
	mciset.dwCallback=(DWORD)hwnd;
	mciset.dwTimeFormat=MCI_FORMAT_FRAMES;
	if((retrn=mciSendCommand(videoID,MCI_SET,MCI_WAIT|MCI_SET_TIME_FORMAT	,(DWORD)(LPVOID)&mciset))!=0L)	{
		mciSendCommand(videoID,MCI_CLOSE,0,NULL);
		mciGetErrorString(retrn,(LPSTR)b,128);
		ErrorMessageNoQuit(hwnd, MCI_ERROR_ID+3, b, filename);
		OutputDebugString( "MCI_OpenAvi Error(3): Set time format error:" );
		OutputDebugString( filename );
		OutputDebugString( "\n" );
		MCI_bEnableAVI=FALSE;
		return FALSE;
	}

	//Set position and size on destination window
	if( lpRect == NULL ) return videoID;
	// get display rectangle on destination window
	MCI_DGV_RECT_PARMS	dgvRect;
	dgvRect.dwCallback=(DWORD)hwnd;
	if( lpRect->right == 0 && lpRect->bottom == 0 )
	{
		if((retrn=mciSendCommand(videoID,MCI_WHERE,
			MCI_WAIT|MCI_DGV_WHERE_DESTINATION,(DWORD)(LPVOID)&dgvRect))!=0L)
		{
			mciSendCommand(videoID,MCI_CLOSE,0,NULL);
			mciGetErrorString(retrn,(LPSTR)b,MCI_STRINGSIZE-1);
			ErrorMessageNoQuit(hwnd, MCI_ERROR_ID+9, b, filename);
			OutputDebugString( "MCI_OpenAvi Error(9): GetWave information error!" );
			OutputDebugString( filename );
			OutputDebugString( "\n" );
			MCI_bEnableAVI=FALSE;
			return -1;
		}
	}
	else
	{
		dgvRect.rc.right = lpRect->right - lpRect->left;
		dgvRect.rc.bottom = lpRect->bottom - lpRect->top;
	}
	dgvRect.rc.left = lpRect->left;
	dgvRect.rc.top = lpRect->top;

	// set rectangle
	if((retrn=mciSendCommand(videoID,MCI_PUT,
		MCI_WAIT|MCI_DGV_RECT|MCI_DGV_PUT_DESTINATION,(DWORD)(LPVOID)&dgvRect))!=0L)
	{
		mciSendCommand(videoID,MCI_CLOSE,0,NULL);
		mciGetErrorString(retrn,(LPSTR)b,MCI_STRINGSIZE-1);
		ErrorMessageNoQuit(hwnd, MCI_ERROR_ID+5, b, filename);
		OutputDebugString( "MCI_OpenAvi Error(5): Set position error:" );
		OutputDebugString( filename );
		OutputDebugString( "\n" );
		MCI_bEnableAVI=FALSE;
		return -1;
	}

  	//Set window
	MCI_DGV_WINDOW_PARMS mwindow;
	mwindow.dwCallback=(DWORD)hwnd;
	mwindow.hWnd=hwnd;
	if((retrn=mciSendCommand(videoID,MCI_WINDOW,MCI_WAIT|MCI_ANIM_WINDOW_HWND,(DWORD)(LPVOID)&mwindow))!=0L)
	{
		mciSendCommand(videoID,MCI_CLOSE,0,NULL);
		mciGetErrorString(retrn,(LPSTR)b,MCI_STRINGSIZE-1);
		ErrorMessageNoQuit( hwnd, MCI_ERROR_ID+4, b, filename);
		OutputDebugString( "MCI_OpenAvi Error(4): Set window error:" );
		OutputDebugString( filename );
		OutputDebugString( "\n" );
		MCI_bEnableAVI=FALSE;
		return -1;
	}

	return videoID;
}

// play avi file
// hwnd		:	window for avi file to play on and receive error message
// videoID	:	handle of avi object that previously opened, if it is -1, do nothing
// dwCommand:	command for play, usually be MCI_WAIT, MCI_NOTIFY, and/or MCI_MCIAVI_PLAY_FULLSCREEN
//				when using MCI_WAIT, the function will not returned until end playing.
//				when using MCI_NOTIFY, the function returned at once, when finished playing the 
//              object will send a MM_MCINOTIFY message to the window,
//				you can close it on receiving this message
//				
//				當使用MCI_WAIT參數時,函數要等AVI播放完才能返回
//				使用MCI_NOTIFY時,函數馬上返回,當播放完時,會發出一個消息MM_MCINOTIFY,
//				在響應該消息時,可以關閉該文件
// dwFrom	:	frame number to be played from
// dwTo		:	frame number to be played to, if both zero, play it from beginning to end.
// return	:	TRUE if played
BOOL MCI_AVI_Play(HWND hwnd,int videoID,DWORD dwCommand, DWORD dwFrom/*=0*/, DWORD dwTo/*=0*/)	
{
	if (!MCI_bEnableAVI) return FALSE;
	if (videoID==-1) return FALSE;

	DWORD retrn;
	char b[MCI_STRINGSIZE];

	//Play avi
	MCI_DGV_PLAY_PARMS mciplay;
 	mciplay.dwCallback=(DWORD)hwnd;
	if(dwFrom!=0)	{mciplay.dwFrom=dwFrom;dwCommand|=MCI_FROM;}
	if(dwTo!=0)		{mciplay.dwTo=dwTo;dwCommand|=MCI_TO;}
	if((retrn=mciSendCommand(videoID,MCI_PLAY,
		dwCommand,(DWORD)(LPMCI_DGV_PLAY_PARMS)&mciplay))!=0L)
	{
		mciSendCommand(videoID,MCI_CLOSE,0,NULL);
		mciGetErrorString(retrn,(LPSTR)b,MCI_STRINGSIZE-1);
		ErrorMessageNoQuit(hwnd, MCI_ERROR_ID+6, b);
		OutputDebugString( "MCI_PlayAvi Error(6): Cannot play avi!\n" );
//		MCI_bEnableAVI=FALSE;
		return FALSE;
	}
	return TRUE;
}

// seek in avi file
// hwnd		:	window for avi file to play on and receive error message
// videoID	:	handle of avi object that previously opened, if it is -1, do nothing
// dwCommand:	command for seek, usually be MCI_WAIT, MCI_SEEK_TO_START
// return	:	TRUE if seeked
BOOL MCI_AVI_Seek(HWND hwnd,int videoID,DWORD dwCommand,DWORD dwTo/*=0*/)
{
	if (!MCI_bEnableAVI) return FALSE;
	if (videoID==-1) return FALSE;

	DWORD retrn;
	char b[MCI_STRINGSIZE];

	//seek avi
	MCI_SEEK_PARMS mciseek;
 	mciseek.dwCallback=(DWORD)hwnd;
	mciseek.dwTo=dwTo;
	if((retrn=mciSendCommand(videoID,MCI_SEEK,dwCommand,(DWORD)(LPVOID)&mciseek))!=0L)
	{
		mciSendCommand(videoID,MCI_CLOSE,0,NULL);
		mciGetErrorString(retrn,(LPSTR)b,MCI_STRINGSIZE-1);
		ErrorMessageNoQuit(hwnd, MCI_ERROR_ID+7, b);
		OutputDebugString( "MCI_SeekAvi Error(7): Seek avi error!\n" );
		MCI_bEnableAVI=FALSE;
		return FALSE;
	}
	return TRUE;
}

// stop avi file
// hwnd		:	window for avi file to play on and receive error message
// videoID	:	handle of avi object that previously opened, if it is -1, do nothing
// return	:	TRUE if stoped the avi
BOOL MCI_AVI_Stop(HWND hwnd,int videoID)	
{
	if (!MCI_bEnableAVI) return FALSE;
	if (videoID==-1) return FALSE;

	DWORD retrn;
	char b[MCI_STRINGSIZE];

	//Stop avi
	MCI_GENERIC_PARMS mcigen;
	mcigen.dwCallback=(DWORD)hwnd;
	if((retrn=mciSendCommand(videoID,MCI_STOP,MCI_WAIT,(DWORD)(LPVOID)&mcigen))!=0L)
	{
		mciSendCommand(videoID,MCI_CLOSE,0,NULL);
		mciGetErrorString(retrn,(LPSTR)b,MCI_STRINGSIZE-1);
		ErrorMessageNoQuit(hwnd, MCI_ERROR_ID+8, b);
		OutputDebugString( "MCI_StopAvi Error(8): Stop avi error!\n" );
		MCI_bEnableAVI=FALSE;
		return FALSE;
	}
	return TRUE;
}

// pause avi file
// hwnd		:	window for avi file to play on and receive error message
// videoID	:	handle of avi object that previously opened, if it is -1, do nothing
// return	:	TRUE if stoped the avi
BOOL MCI_AVI_Pause(HWND hwnd,int videoID)	
{
	if (!MCI_bEnableAVI) return FALSE;
 
	DWORD retrn;
	char b[MCI_STRINGSIZE];

	//Stop avi
	MCI_GENERIC_PARMS mcigen;
	mcigen.dwCallback=(DWORD)hwnd;
	if((retrn=mciSendCommand(videoID,MCI_PAUSE,MCI_WAIT,(DWORD)(LPVOID)&mcigen))!=0L)
	{
		mciSendCommand(videoID,MCI_CLOSE,0,NULL);
		mciGetErrorString(retrn,(LPSTR)b,MCI_STRINGSIZE-1);
		ErrorMessageNoQuit(hwnd, MCI_ERROR_ID+8, b);
		OutputDebugString( "MCI_PauseAvi Error(15): Pause avi error!\n" );
		MCI_bEnableAVI=FALSE;
		return FALSE;
	}
	return TRUE;
}

// close avi file
// videoID	:	handle of avi object that previously opened, if it is -1, do nothing
// return	:	TRUE if closed the file
BOOL MCI_AVI_Close(int videoID)	
{

	if (!MCI_bEnableAVI) return FALSE;
	if (videoID==-1) return FALSE;
	//Close avi
	mciSendCommand(videoID,MCI_CLOSE,MCI_WAIT,NULL);
	return TRUE;
}
////////////

////////////
// MIDI music functions
////////////
// open midi file
// hwnd		:	window for midi file to play on and receive error message
// filename	:	midi file name, must with full path and extension
// return	:	-1 if failed, others to be the handle of midi file
//				失敗則返回-1,否則返回midi文件的句柄
int MCI_MIDI_Open(HWND hwnd,LPSTR filename)
{
	if( !MCI_bEnableMIDI ) return -1;

	char b[MCI_STRINGSIZE];
	DWORD retrn;	
	int midiID=-1;

	// open midi
	MCI_DGV_OPEN_PARMS mciOpen;
	mciOpen.wDeviceID=NULL;
	mciOpen.lpstrDeviceType="sequencer";
	mciOpen.lpstrElementName=filename;
	if((retrn=mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE|MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&mciOpen))!=0L)
	{
		mciGetErrorString(retrn,(LPSTR)b,MCI_STRINGSIZE-1);
		ErrorMessageNoQuit(hwnd, MCI_ERROR_ID+10, b, filename);
		OutputDebugString( "MCI_OpenMIDI Error(10): Cannot open file:" );
		OutputDebugString( filename );
		OutputDebugString( "\n" );
		MCI_bEnableMIDI = FALSE;
		return -1;
	}
	midiID=mciOpen.wDeviceID;
	return midiID;
}

// play midi file
// hwnd		:	window for midi file to play on and receive error message
// midiID	:	handle of midi object that previously opened, if it is -1, do nothing
// dwCommand:	command for play, usually be MCI_WAIT, MCI_NOTIFY
//				when using MCI_WAIT, the function will not returned until end playing.
//				when using MCI_NOTIFY, the function returned at once, when finished playing the 
//              object will send a MM_MCINOTIFY message to the window,
//				you can close it on receiving this message
//				當使用MM_WAIT參數時,函數要等MIDI播放完才能返回
//				使用MM_NOTIFY時,函數馬上返回,當播放完時,會發出一個消息MM_MCINOTIFY,
//				在響應該消息時,可以關閉該文件。
//				注意,當使用MCI_MIDI_Stop()函數終止播放時,也會發出該消息
// return	:	TRUE if played the file
BOOL MCI_MIDI_Play(HWND hwnd,int midiID,DWORD dwCommand)
{
	if( !MCI_bEnableMIDI ) return FALSE;
	if( midiID == -1 )	return FALSE;

	DWORD retrn;
	char b[MCI_STRINGSIZE];

	//Play midi
	MCI_PLAY_PARMS mciplay;
 	mciplay.dwCallback=(DWORD)hwnd;
	if((retrn=mciSendCommand(midiID,MCI_PLAY,dwCommand,(DWORD)(LPVOID)&mciplay))!=0L)
	{
		mciSendCommand(midiID,MCI_CLOSE,0,NULL);
		mciGetErrorString(retrn,(LPSTR)b,MCI_STRINGSIZE-1);
		ErrorMessageNoQuit(hwnd, MCI_ERROR_ID+11, b);
		OutputDebugString( "MCI_PlayMIDI Error(11):	cannot play midi!\n" );
		MCI_bEnableMIDI = FALSE;
		return FALSE;
	}
	return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产麻豆视频一区| 亚洲精品美国一| 亚洲一区二区影院| 国产精品18久久久久久久久| 欧美色网站导航| 国产免费成人在线视频| 日本最新不卡在线| 99久久99久久精品免费看蜜桃| 精品国产网站在线观看| 亚洲一级二级三级在线免费观看| 成人av免费在线| 26uuu另类欧美| 日本不卡视频在线观看| 欧美中文一区二区三区| 中文字幕五月欧美| 国产成人在线色| 欧美一区二区黄色| 亚洲va韩国va欧美va精品| 99久精品国产| 国产精品美女久久久久久2018| 九色综合狠狠综合久久| 欧美久久久久免费| 一级日本不卡的影视| jlzzjlzz欧美大全| 欧美激情一区二区三区不卡| 国模冰冰炮一区二区| 日韩一区二区在线播放| 亚洲一区二区三区视频在线 | 国产欧美日韩另类一区| 美国十次了思思久久精品导航| 欧美日韩在线电影| 亚洲一区二区欧美日韩| 在线精品国精品国产尤物884a| 一区二区中文视频| a4yy欧美一区二区三区| 国产精品国模大尺度视频| 国产91精品久久久久久久网曝门 | 色综合久久中文综合久久97 | 欧美精品免费视频| 亚洲成人精品一区| 欧美日韩一区二区三区免费看| 亚洲三级小视频| 91小视频免费观看| 亚洲人成7777| 在线观看一区二区视频| 亚洲一区二区三区四区在线免费观看 | 久久婷婷成人综合色| 韩国欧美一区二区| 久久亚洲一级片| 国产精品白丝jk白祙喷水网站| 国产亚洲精品福利| 欧美视频一区在线| 亚洲成国产人片在线观看| 欧美挠脚心视频网站| 日韩精品乱码免费| 欧美白人最猛性xxxxx69交| 激情国产一区二区| 久久精品一二三| 波多野结衣视频一区| 亚洲精品免费播放| 欧美精品1区2区| 久久超碰97人人做人人爱| 久久亚洲精精品中文字幕早川悠里| 国产精品一二一区| 亚洲欧洲av在线| 欧美日韩一区二区欧美激情| 麻豆久久一区二区| 国产视频在线观看一区二区三区| 成人av影视在线观看| 亚洲网友自拍偷拍| 精品国产成人系列| 成人的网站免费观看| 亚洲一区在线电影| 欧美一区二区三区男人的天堂| 国产精品亚洲综合一区在线观看| 日韩理论片网站| 欧美精品丝袜中出| 国产久卡久卡久卡久卡视频精品| 综合分类小说区另类春色亚洲小说欧美| 在线一区二区视频| 日韩avvvv在线播放| 久久精品人人爽人人爽| 色综合一区二区| 麻豆国产精品官网| 综合欧美一区二区三区| 7777精品久久久大香线蕉| 国产电影一区在线| 亚洲成a人片在线不卡一二三区| 精品奇米国产一区二区三区| 99国产精品久| 蜜臀av一区二区三区| 国产精品天美传媒沈樵| 欧美日产国产精品| 高清av一区二区| 亚洲第一搞黄网站| 国产精品欧美极品| 3atv在线一区二区三区| 成人黄色在线视频| 日韩二区三区四区| 国产精品不卡在线观看| 91精品国产入口在线| 97久久人人超碰| 精品一区二区在线观看| 亚洲精品久久久久久国产精华液| 26uuu欧美| 欧美精品v国产精品v日韩精品| 成人一区二区三区视频在线观看| 午夜精品福利视频网站| 国产精品久久久久久久岛一牛影视| 9191久久久久久久久久久| 99久久久久免费精品国产| 久久综合综合久久综合| 一区二区在线看| 国产亲近乱来精品视频| 在线播放中文一区| 91香蕉视频污在线| 国产成人激情av| 美腿丝袜亚洲综合| 欧美三电影在线| 亚洲免费视频成人| 日韩高清不卡在线| **性色生活片久久毛片| 久久综合久色欧美综合狠狠| 欧美另类变人与禽xxxxx| 99re热视频精品| 国产成人免费在线观看不卡| 蓝色福利精品导航| 亚洲第一搞黄网站| 一二三四社区欧美黄| 国产精品传媒入口麻豆| 精品免费99久久| 制服丝袜亚洲色图| 欧美三级电影在线观看| 色综合久久综合网欧美综合网| 成人av在线播放网址| 国产suv一区二区三区88区| 老司机免费视频一区二区| 亚洲午夜国产一区99re久久| 亚洲美女在线一区| 一区免费观看视频| 中文字幕亚洲区| 国产精品高潮呻吟久久| 日本一区二区三区免费乱视频| 日韩无一区二区| 91精品国产色综合久久ai换脸| 欧美日韩免费不卡视频一区二区三区 | 日韩美女啊v在线免费观看| 国产女人水真多18毛片18精品视频| 精品88久久久久88久久久| 日韩免费性生活视频播放| 在线91免费看| 欧美一区二区福利在线| 日韩一区二区三区免费看| 91精品国产综合久久婷婷香蕉| 欧美体内she精视频| 欧美写真视频网站| 欧美在线影院一区二区| 欧美伊人久久久久久午夜久久久久| 在线观看国产一区二区| 欧美色男人天堂| 777欧美精品| 日韩一级大片在线| 欧美大片免费久久精品三p| 精品少妇一区二区三区日产乱码| 日韩欧美一区在线| 精品1区2区在线观看| 久久久国产精品午夜一区ai换脸| 国产欧美精品区一区二区三区| 国产精品天美传媒| 亚洲色图.com| 亚洲国产精品一区二区尤物区| 天堂一区二区在线| 毛片不卡一区二区| 国产乱码精品一区二区三区五月婷| 国产精品66部| 99re免费视频精品全部| 欧美在线免费播放| 欧美一区二区三区性视频| 欧美本精品男人aⅴ天堂| 久久久精品国产免大香伊| 国产免费观看久久| 亚洲免费观看在线视频| 亚洲不卡一区二区三区| 日本成人在线看| 国产精品一区三区| gogogo免费视频观看亚洲一| 色狠狠av一区二区三区| 在线成人免费视频| 欧美成人高清电影在线| 亚洲国产精品黑人久久久| 亚洲色图制服诱惑| 午夜久久久久久久久| 韩国成人在线视频| 91啪在线观看| 538在线一区二区精品国产| 久久亚洲综合色一区二区三区| 亚洲色图在线视频| 日韩av一区二区三区| 国产成人免费9x9x人网站视频| 色哟哟一区二区在线观看|