要播放聲音,要附加項:winmm.lib,而後包含頭文件:#include <mmsystem.h>windows
播放聲音用PlaySound函數,只能播放midi和wav波形文件。ssh
#define WIN32_LEAN_AND_MEAN #include <windows.h> #include <windowsx.h> #include <mmsystem.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #include "MenuSoundRes.h" #define WINDOW_CLASS_NAME "WINCLASS1" //全局變量 HWND main_window_handle = NULL; HINSTANCE hInstance_App = NULL; //窗口處理函數 LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPram) { PAINTSTRUCT ps; HDC hdc; RECT rect; switch (msg) { case WM_CREATE: { return 0; }break; case WM_COMMAND: { switch (LOWORD(wParam)) { case MENU_FILE_ID_EXIT: { PostQuitMessage(0); }break; case MENU_HELP_ABOUT: { MessageBox(hwnd, "歡迎使用聲音演示程序", "聲音", MB_OK | MB_ICONEXCLAMATION); }break; case MENU_PLAY_ID_BEAM: { PlaySound(MAKEINTRESOURCE(SOUND_ID_BEAM), hInstance_App, SND_RESOURCE | SND_ASYNC); }break; case MENU_PLAY_ID_TELEPORT: { PlaySound(MAKEINTRESOURCE(SOUND_ID_TELEPORT), hInstance_App, SND_RESOURCE | SND_ASYNC); }break; default: break; } }break; case WM_PAINT: { hdc = GetDC(hwnd); ReleaseDC(hwnd, hdc); GetClientRect(hwnd, &rect); ValidateRect(hwnd, &rect); return 0; }break; case WM_CLOSE: { if (IDYES != MessageBox(hwnd, "確實要退出應用程序?", "退出", MB_YESNO | MB_ICONEXCLAMATION)) { return 0; } }break; case WM_SIZE: { }break; case WM_DESTROY: { PostQuitMessage(0); return 0; }break; default:break; } return DefWindowProc(hwnd, msg, wParam, lPram); } void GameMain() { return; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //定義窗口類 WNDCLASSEX winClass; HWND hWnd; MSG msg; //填充窗口類的各成員 winClass.cbSize = sizeof(WNDCLASSEX); 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(hInstance, MAKEINTRESOURCE(ICON_MENUSOUND)); winClass.hCursor = LoadCursor(hInstance, MAKEINTRESOURCE(CURSOR_CROSSSHAIR)); winClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); winClass.lpszMenuName = NULL; winClass.lpszClassName = WINDOW_CLASS_NAME; //窗口類名 winClass.hIconSm = LoadIcon(NULL, MAKEINTRESOURCE(ICON_MENUSOUND)); //保存實例句柄到全局變量 hInstance_App = hInstance; //註冊窗口類 if (!RegisterClassEx(&winClass)) { return 0; } //建立窗口類的一個成員 if (!(hWnd = CreateWindowEx(NULL, WINDOW_CLASS_NAME, "hello world", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 200, 200, 640, 480, NULL, NULL, hInstance, NULL))) { return 0; } HMENU hMenuhandle = LoadMenu(hInstance, "SoundMenu"); SetMenu(hWnd, hMenuhandle); //保存窗體句柄到全局變量中 main_window_handle = hWnd; //獲得設備上下文 HDC hdc = GetDC(hWnd); //消息循環 while (TRUE) { if (PeekMessage(&msg, hWnd, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) { break; } TranslateMessage(&msg); DispatchMessage(&msg); } //SetTextColor(hdc, RGB(rand() % 256, rand() % 256, rand() % 256)); //SetBkColor(hdc, RGB(0,0,0)); //SetBkMode(hdc, TRANSPARENT); //TextOut(hdc, rand() % 640, rand() % 480, "hello", strlen("hello")); //GameMain(); //Sleep(10); } ReleaseDC(hWnd,hdc); return msg.wParam; }
資源頭文件函數
//聲音資源 #define SOUND_ID_BEAM 1 #define SOUND_ID_TELEPORT 2 //光標資源和圖標資源 #define ICON_MENUSOUND 100 #define CURSOR_CROSSSHAIR 200 //菜單資源 #define MENU_FILE_ID_EXIT 1000 #define MENU_PLAY_ID_BEAM 2000 #define MENU_PLAY_ID_TELEPORT 2001 #define MENU_HELP_ABOUT 3000 //字符串資源 #define ID_STRING_FILE 10000 #define ID_STRING_PLAY 20000 #define ID_STRING_EXIT 30000
.RC文件:ui
#include "MenuSoundRes.h" ICON_MENUSOUND ICON t3dx.ico CURSOR_CROSSSHAIR CURSOR crosshair.cur SOUND_ID_BEAM WAVE beam.wav SOUND_ID_TELEPORT WAVE TELEPORT.WAV //字符串資源,沒有名字,一個資源文件中只能有一個字符串資源。 STRINGTABLE { ID_STRING_FILE,"文件" ID_STRING_PLAY,"播放" ID_STRING_EXIT,"退出" } //菜單資源 SoundMenu MENU DISCARDABLE { POPUP "File" { MENUITEM "E&xit" MENU_FILE_ID_EXIT } POPUP "&PlaySound" { MENUITEM "BEAM" MENU_PLAY_ID_BEAM MENUITEM "TELEPORT" MENU_PLAY_ID_TELEPORT } POPUP "Help" { MENUITEM "About" MENU_HELP_ABOUT } }