Waveを鳴らそう
■リソースにWaveファイルを登録
ソリューションエクスプローラーのリソースファイルで右クリックでリソースを追加しようとします。
ここでインポートを選択しWaveファイルを指定してください。
読み込んだWaveリソースのプロパティーで、IDが IDR_WAVE1 なってますがここを
■プログラム
Main.cpp
#include <windows.h> #include "resource.h" LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); #define PROC_NAME L"ProcSample10" HINSTANCE hInst; //---------------------------------------------------------------- int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPreInst, LPWSTR lpszCmdLine, int nCmdShow ) { HWND hwnd; MSG msg; WNDCLASS myProg; hInst = hInstance; if (!hPreInst) { myProg.style = CS_HREDRAW | CS_VREDRAW; myProg.lpfnWndProc = WndProc; myProg.cbClsExtra = 0; myProg.cbWndExtra = 0; myProg.hInstance = hInstance; myProg.hIcon = NULL; myProg.hCursor = NULL; myProg.hbrBackground = (HBRUSH)COLOR_WINDOW; myProg.lpszMenuName = NULL; myProg.lpszClassName = PROC_NAME; if (!RegisterClass( &myProg )){ return FALSE; } } hwnd = CreateWindow( PROC_NAME, L"Sample10", WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow( hwnd, nCmdShow ); UpdateWindow( hwnd ); do{ if(PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE )) { TranslateMessage( &msg ); DispatchMessage( &msg ); } } while(msg.message != WM_QUIT); return (int)( msg.wParam ); } //---------------------------------------------------------------- LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch (msg) { case WM_CREATE: PlaySound( L"IDR_WAVE1", hInst, SND_RESOURCE | SND_ASYNC ); break; case WM_DESTROY: PlaySound(NULL,NULL,0); PostQuitMessage( 0 ); break; default: return(DefWindowProc( hwnd, msg, wParam, lParam )); } return (0L); }
■音を再生
PlaySound( L"IDR_WAVE1", hInst, SND_RESOURCE | SND_ASYNC );
これだと一回なって終了します。
PlaySound( L"IDR_WAVE1", hInst, SND_RESOURCE | SND_ASYNC | SND_LOOP );
こうするとループで何回もなります。
■最後、音を最後止めてください
PlaySound(NULL,NULL,0);