#include // winmm.lib をリンクする #pragma comment(lib,"winmm") LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { static MCI_OPEN_PARMS mop; MCI_PLAY_PARMS mpp; MCI_SET_PARMS msp; MCI_STATUS_PARMS status; static DWORD track; static DWORD track_sum; HDC hdc; PAINTSTRUCT ps; char str[32]; switch(uMsg){ case WM_CREATE: //オープン mop.lpstrDeviceType="CDAudio"; mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_TYPE,(DWORD)&mop); //時間フォーマットの変更 msp.dwTimeFormat=MCI_FORMAT_TMSF; mciSendCommand(mop.wDeviceID,MCI_SET,MCI_SET_TIME_FORMAT,(DWORD)&msp); //トラック数の取得 status.dwItem=MCI_STATUS_NUMBER_OF_TRACKS; mciSendCommand(mop.wDeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&status); track_sum=status.dwReturn; return 0; case WM_LBUTTONDOWN: track++; mpp.dwFrom=MCI_MAKE_TMSF(track,0,0,0); mpp.dwTo=MCI_MAKE_TMSF(track+1,0,0,0); //再生 if(mpp.dwFrom>=1 && mpp.dwTo<=track_sum){ mciSendCommand(mop.wDeviceID,MCI_PLAY,MCI_FROM | MCI_TO,(DWORD)&mpp); }else if(mpp.dwFrom == track_sum){ mciSendCommand(mop.wDeviceID,MCI_PLAY,MCI_FROM,(DWORD)&mpp); }else{ mciSendCommand(mop.wDeviceID,MCI_STOP,0,0); track=0; } InvalidateRect(hWnd,NULL,TRUE); return 0; case WM_PAINT: hdc=BeginPaint(hWnd,&ps); wsprintf(str,"再生中のトラック = %d",track); TextOut(hdc,0,0,str,lstrlen(str)); wsprintf(str,"( 0 番のトラックは存在しません)"); TextOut(hdc,0,20,str,lstrlen(str)); EndPaint(hWnd,&ps); return 0; case WM_DESTROY: //停止 CDはクローズしても停止しない! mciSendCommand(mop.wDeviceID,MCI_STOP,0,0); //クローズ 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コマンドによるCD再生", 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; }