windows編程:資源和播放聲音

要播放聲音,要附加項: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
    }
}
相關文章
相關標籤/搜索