?? demo10_3.cpp
字號(hào):
// DEMO10_3.CPP - Loading and playing a wav file
// with real-time manipulation
// INCLUDES ///////////////////////////////////////////////
#define WIN32_LEAN_AND_MEAN
#include <windows.h> // include important windows stuff
#include <windowsx.h>
#include <mmsystem.h>
#include <iostream.h> // include important C/C++ stuff
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
#include <math.h>
#include <io.h>
#include <fcntl.h>
#include <ddraw.h> // directX includes
#include <dsound.h>
// directx 7.0 compatibility
#ifndef DSBCAPS_CTRLDEFAULT
#define DSBCAPS_CTRLDEFAULT (DSBCAPS_CTRLFREQUENCY | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME )
#endif
// DEFINES ////////////////////////////////////////////////
// defines for windows
#define WINDOW_CLASS_NAME "WINCLASS1" // class name
#define WINDOW_WIDTH 400 // size of window
#define WINDOW_HEIGHT 300
#define SCREEN_WIDTH 640 // size of screen
#define SCREEN_HEIGHT 480
#define SCREEN_BPP 8 // bits per pixel
#define MAX_SOUNDS 256 // max number of sounds in system at once
// digital sound object state defines
#define SOUND_NULL 0 // " "
#define SOUND_LOADED 1
#define SOUND_PLAYING 2
#define SOUND_STOPPED 3
// MACROS /////////////////////////////////////////////////
// these read the keyboard asynchronously
#define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEY_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
// TYPES //////////////////////////////////////////////////
typedef unsigned short USHORT;
typedef unsigned short WORD;
typedef unsigned char UCHAR;
typedef unsigned char BYTE;
// this holds a single sound
typedef struct pcm_sound_typ
{
LPDIRECTSOUNDBUFFER dsbuffer; // the ds buffer containing the sound
int state; // state of the sound
int rate; // playback rate
int size; // size of sound
int id; // id number of the sound
} pcm_sound, *pcm_sound_ptr;
// PROTOTYPES /////////////////////////////////////////////
int Game_Init(void *parms=NULL);
int Game_Shutdown(void *parms=NULL);
int Game_Main(void *parms=NULL);
int DSound_Load_WAV(char *filename, int control_flags = DSBCAPS_CTRLDEFAULT);
// GLOBALS ////////////////////////////////////////////////
HWND main_window_handle = NULL; // save the window handle
HINSTANCE main_instance = NULL; // save the instance
char buffer[80]; // used to print text
LPDIRECTSOUND lpds; // directsound interface pointer
DSBUFFERDESC dsbd; // directsound description
DSCAPS dscaps; // directsound caps
HRESULT dsresult; // general directsound result
DSBCAPS dsbcaps; // directsound buffer caps
LPDIRECTSOUNDBUFFER lpdsbprimary, // you won't need this normally
lpdsbsecondary; // the sound buffers
WAVEFORMATEX pcmwf; // generic waveformat structure
pcm_sound sound_fx[MAX_SOUNDS]; // the array of secondary sound buffers
HWND freq_hwnd, // window handles for controls
volume_hwnd,
pan_hwnd;
int sound_id = -1; // id of sound we load for demo
// FUNCTIONS //////////////////////////////////////////////
LRESULT CALLBACK WindowProc(HWND hwnd,
UINT msg,
WPARAM wparam,
LPARAM lparam)
{
// this is the main message handler of the system
PAINTSTRUCT ps; // used in WM_PAINT
HDC hdc; // handle to a device context
// what is the message
switch(msg)
{
case WM_CREATE:
{
// do initialization stuff here
return(0);
} break;
case WM_PAINT:
{
// start painting
hdc = BeginPaint(hwnd,&ps);
// first the static text
// set the color
SetTextColor(hdc,RGB(0,255,0));
SetBkColor(hdc,RGB(0,0,0));
SetBkMode(hdc,OPAQUE);
TextOut(hdc,160-5*7,40-20,"VOLUME ", strlen("VOLUME "));
TextOut(hdc,160-5*13,100-20,"PLAYBACK RATE ",strlen("PLAYBACK RATE "));
TextOut(hdc,160-5*14,160-20,"STEREO PANNING ",strlen("STEREO PANNING "));
// end painting
EndPaint(hwnd,&ps);
return(0);
} break;
///////////////////////////////////////////////////////////
case WM_HSCROLL:
case WM_VSCROLL:
{
int nscrollcode = (int)LOWORD(wparam); // scroll bar value
int npos = (int)HIWORD(wparam); // scroll box position
HWND hwndscrollbar = (HWND)lparam; // handle of scroll bar
// get teh dc for printing
hdc = GetDC(hwnd);
// set the color
SetTextColor(hdc,RGB(0,255,0));
SetBkColor(hdc,RGB(0,0,0));
SetBkMode(hdc,OPAQUE);
// make sure that the scroll bar is being tracked
if (nscrollcode==SB_THUMBPOSITION ||
nscrollcode==SB_THUMBTRACK)
{
// what scroll bar sent message
if (hwndscrollbar==volume_hwnd)
{
// re-position scroll bar
SetScrollPos(volume_hwnd, SB_CTL,npos,TRUE);
sprintf(buffer,"VOLUME=%d ",-npos);
// output text
TextOut(hdc,160-5*7,40-20,buffer,strlen(buffer));
// set the volume
sound_fx[sound_id].dsbuffer->SetVolume(-npos);
} // end if
else
if (hwndscrollbar==freq_hwnd)
{
// re-position scroll bar
SetScrollPos(freq_hwnd, SB_CTL,npos,TRUE);
sprintf(buffer,"PLAYBACK RATE=%d ",npos);
// output text
TextOut(hdc,160-5*13,100-20,buffer,strlen(buffer));
// set the frequency
sound_fx[sound_id].dsbuffer->SetFrequency(npos);
} // end if
// what scroll bar sent message
else
if (hwndscrollbar==pan_hwnd)
{
// re-position scroll bar
SetScrollPos(pan_hwnd, SB_CTL,npos,TRUE);
sprintf(buffer,"STEREO PANNING=%d ",-(npos-10000));
// output text
TextOut(hdc,160-5*14,160-20,buffer,strlen(buffer));
// set the stereo panning
sound_fx[sound_id].dsbuffer->SetPan(-(npos-10000));
} // end if
} // end if
// release the dc
ReleaseDC(hwnd,hdc);
// message has been processed
return(0);
} break;
///////////////////////////////////////////////////////////
case WM_DESTROY:
{
// kill the application
PostQuitMessage(0);
return(0);
} break;
default:break;
} // end switch
// process any messages that we didn't take care of
return (DefWindowProc(hwnd, msg, wparam, lparam));
} // end WinProc
// WINMAIN ////////////////////////////////////////////////
int WINAPI WinMain( HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow)
{
WNDCLASS winclass; // this will hold the class we create
HWND hwnd; // generic window handle
MSG msg; // generic message
HDC hdc; // generic dc
PAINTSTRUCT ps; // generic paintstruct
// first fill in the window class stucture
winclass.style = CS_DBLCLKS | CS_OWNDC |
CS_HREDRAW | CS_VREDRAW;
winclass.lpfnWndProc = WindowProc;
winclass.cbClsExtra = 0;
winclass.cbWndExtra = 0;
winclass.hInstance = hinstance;
winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
winclass.lpszMenuName = NULL;
winclass.lpszClassName = WINDOW_CLASS_NAME;
// register the window class
if (!RegisterClass(&winclass))
return(0);
// create the window, note the use of WS_POPUP
if (!(hwnd = CreateWindow(WINDOW_CLASS_NAME, // class
"DirectSound WAV File Loading DEMO", // title
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
0,0, // x,y
WINDOW_WIDTH, // width
WINDOW_HEIGHT, // height
NULL, // handle to parent
NULL, // handle to menu
hinstance,// instance
NULL))) // creation parms
return(0);
// save the window handle and instance in a global
main_window_handle = hwnd;
main_instance = hinstance;
// create some scroll controls to change volume, frequency
// and panning
// create the volume control scroller
volume_hwnd = CreateWindow("SCROLLBAR", // class
"", // title
WS_CHILD | WS_VISIBLE,
80,40, // x,y
160, // width
16, // height
hwnd, // handle to parent
NULL, // handle to menu
hinstance,// instance
NULL); // creation parms
// create the frequency control scroller
freq_hwnd = CreateWindow("SCROLLBAR", // class
"", // title
WS_CHILD | WS_VISIBLE,
80,100, // x,y
160, // width
16, // height
hwnd, // handle to parent
NULL, // handle to menu
hinstance,// instance
NULL); // creation parms
// create the stereo panning control scroller
pan_hwnd = CreateWindow("SCROLLBAR", // class
"", // title
WS_CHILD | WS_VISIBLE,
80,160, // x,y
160, // width
16, // height
hwnd, // handle to parent
NULL, // handle to menu
hinstance,// instance
NULL); // creation parms
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -