#include // winmm.lib をリンクする #pragma comment(lib,"winmm") #define BUFFERSIZE 256 LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { static MCI_OPEN_PARMS mop; MCI_SEEK_PARMS seek; static DWORD ms=0; MCIERROR mciErr; TCHAR str[BUFFERSIZE]; switch(uMsg){ case WM_CREATE: //オープン mop.dwCallback=(DWORD)hWnd; mop.lpstrDeviceType="WaveAudio"; mop.lpstrElementName="Windows XP Startup.wav"; mciSendCommand(NULL,MCI_OPEN, MCI_NOTIFY | MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,(DWORD)&mop); return 0; case MM_MCINOTIFY: //再生 mciErr=mciSendCommand((MCIDEVICEID)lParam,MCI_PLAY,0,0); if(mciErr){ mciGetErrorString(mciErr,str,BUFFERSIZE); MessageBox(hWnd,str,"PLAY",MB_OK); } return 0; case WM_LBUTTONDOWN: //シーク(後退) seek.dwCallback=(DWORD)hWnd; seek.dwTo=(ms-=500); //ミリ秒単位 mciErr=mciSendCommand(mop.wDeviceID,MCI_SEEK,MCI_NOTIFY | MCI_TO,(DWORD)&seek); if(mciErr){ mciGetErrorString(mciErr,str,BUFFERSIZE); MessageBox(hWnd,str,"後退",MB_OK); } return 0; case WM_RBUTTONDOWN: //シーク(前進) seek.dwCallback=(DWORD)hWnd; seek.dwTo=2000;//(ms+=500); //ミリ秒単位 mciErr=mciSendCommand(mop.wDeviceID,MCI_SEEK,MCI_NOTIFY | MCI_TO,(DWORD)&seek); if(mciErr){ mciGetErrorString(mciErr,str,BUFFERSIZE); MessageBox(hWnd,str,"前進",MB_OK); } return 0; case WM_DESTROY: //クローズ mciSendCommand(mop.wDeviceID,MCI_CLOSE,0,0); PostQuitMessage(0); return 0; } return DefWindowProc(hWnd,uMsg,wParam,lParam); } int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,int nCmdShow) { WNDCLASS wc; MSG msg; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WindowProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = __FILE__; if(!RegisterClass(&wc)) return 0; HWND hWnd=CreateWindow( __FILE__,"MCI_SEEKとMCIエラー文字列", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,hInstance,NULL); if(hWnd==NULL) return 0; BOOL bRet; while((bRet=GetMessage(&msg,NULL,0,0))!=0){ if(bRet==-1) break; DispatchMessage(&msg); } return (int)msg.wParam; }