mymedia.cpp

来自「2D即时战略游戏VC源码」· C++ 代码 · 共 115 行

CPP
115
字号
#include <windows.h>
#include <mmsystem.h>
#include "mymedia.h"
#include "digitalv.h"

WORD PlayAvi(LPSTR path,int Left,int Top,int Width,int Height,
		HWND hWndCallback,HWND hWndShow,DWORD dwFlag)
{
  MCI_DGV_OPEN_PARMS mciopen;
  MCI_DGV_PLAY_PARMS mciplay;
  MCI_ANIM_WINDOW_PARMS mciWindow;
  MCI_ANIM_RECT_PARMS mciRect;

  DWORD	rtrn;
  char	b[130];
  int		i,Tested;
  WORD	wAviID;

  mciopen.lpstrDeviceType="AVIVideo";
  mciopen.lpstrElementName=path;
  mciWindow.hWnd=hWndShow;
  mciplay.dwCallback=(DWORD)hWndCallback;
  mciRect.rc.top=Top;
  mciRect.rc.left=Left;
  mciRect.rc.bottom=Height;
  mciRect.rc.right=Width;
  int MaxAviNum=3;
  Tested=0;
  for(i=0;(i<MaxAviNum)&&(Tested==0);i++){
  if ((rtrn=mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE|
		MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&mciopen))==0L)
		Tested=1;
  }
  if(Tested==0)	return(-1);

  wAviID=mciopen.wDeviceID;

  mciSendCommand(wAviID,MCI_PUT,
		MCI_ANIM_PUT_DESTINATION|MCI_ANIM_RECT,
		(DWORD)(LPVOID)&mciRect);
  mciSendCommand(wAviID,MCI_WINDOW,
		MCI_ANIM_WINDOW_HWND,
		(DWORD)(LPVOID)&mciWindow);

  if ((rtrn=mciSendCommand(wAviID,MCI_PLAY,dwFlag,
									(DWORD)(LPVOID)&mciplay))!=0L){
		 mciSendCommand(wAviID,MCI_CLOSE,0,NULL);
		 mciGetErrorString(rtrn,(LPSTR)b,129);
		 return(-1);
  }
  return(wAviID);
}

BOOL PlayMIDI(WORD idMIDI, HWND hwnd)
{
	MCI_PLAY_PARMS mciPlay;

	mciPlay.dwCallback=(DWORD)hwnd;

	if( mciSendCommand(idMIDI,MCI_PLAY,MCI_NOTIFY,
		(DWORD)(LPVOID)&mciPlay)!=0l )
    {
		mciSendCommand(idMIDI,MCI_CLOSE,0,0);
		return FALSE;
	}
	return	TRUE;
}

int LoadMIDI(LPSTR path)
{
	MCI_OPEN_PARMS mciOpen;
	unsigned long rtrn;
	WORD	wMIDIID;
	WORD	NumDevs;
	int	i,Tested;

	mciOpen.wDeviceID=0;
	mciOpen.lpstrDeviceType="sequencer";
	mciOpen.lpstrElementName=path;

	NumDevs=midiOutGetNumDevs();
	if(NumDevs<1)	return(-1);

	Tested=0;
	for(i=0;(i<NumDevs) && (Tested==0);i++){
		if((rtrn=mciSendCommand(i,MCI_OPEN,MCI_OPEN_TYPE|
								MCI_OPEN_ELEMENT,
								(DWORD)(LPVOID)&mciOpen))==0L){
			Tested=1;
		}
	}
	if(Tested==0)	return(-1);

	wMIDIID=mciOpen.wDeviceID;
	return ((int)wMIDIID);
}

/*
Use Sample:
// Open & Play
	idMIDI  = LoadMIDI("\\dingding\\midi\\1step.mid");
	PlayMIDI(idMIDI, hwndApp);

// In WinProc:
	case MM_MCINOTIFY:
		if( LOWORD(lParam) == idMIDI )
		{
			mciSendCommand( idMIDI, MCI_SEEK, MCI_SEEK_TO_START,NULL );
			PlayMIDI( idMIDI, hWnd );
		}
		break;

// Close:
	mciSendCommand(idMIDI, MCI_CLOSE, MCI_WAIT, NULL);
*/

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?