代码改变世界

PlaySound播放音乐

2012-07-31 14:04  java线程例子  阅读(594)  评论(0编辑  收藏  举报

今天测试了一下windows32的PlaySound函数,路径没错,运行也不报错,但是却听不到歌曲的声音,运行的时候听到一声“咚”。加个循环的话就发出“咚咚咚”的响声,求帮忙,其中wav文件是由mp3文件修改后缀而成的,无论是绝对路径还是相对路径,都没有听到音乐的效果,还有一定,PlaySound()写的路径正确与否都不会报错,求帮忙?(论坛已求助,无人问津)代码如下:

#include<windows.h>
#pragma   comment(lib,"winmm.lib")
#include <mmsystem.h>

LRESULT CALLBACK WindowProc1(
  HWND hwnd,      // handle to window
  UINT Msg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);


int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
  )
{
    static TCHAR szAppName[]=TEXT("HelloWin");
    HWND hwnd;
    MSG msg;
    WNDCLASS wndclass;

    wndclass.cbClsExtra=0;
    wndclass.cbWndExtra=0;
    wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
    wndclass.hIcon=LoadIcon(NULL,IDI_ERROR);
    wndclass.hInstance=hInstance;
    wndclass.lpfnWndProc= WindowProc1;
    wndclass.lpszClassName=szAppName;
    wndclass.lpszMenuName=NULL;
    wndclass.style=CS_HREDRAW|CS_VREDRAW;

    if(!RegisterClass(&wndclass)){
        MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);
        return 0;
    }

    hwnd=CreateWindow(
  szAppName,  // registered class name
  TEXT("This is Hello Program"), // window name
  WS_OVERLAPPEDWINDOW,        // window style
  CW_USEDEFAULT,               // horizontal position of window
  CW_USEDEFAULT,               // vertical position of window
  CW_USEDEFAULT,           // window width
  CW_USEDEFAULT,          // window height
  NULL,     // handle to parent or owner window
  NULL,        // menu handle or child identifier
   hInstance,  // handle to application instance
  NULL      // window-creation data
);
    ShowWindow(hwnd,nCmdShow);
    UpdateWindow(hwnd);

    while(GetMessage(&msg,NULL,0,0)){
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;

}

LRESULT CALLBACK WindowProc1(
  HWND hwnd,      // handle to window
  UINT Msg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
)
{
    HDC hdc;
    PAINTSTRUCT ps;
    RECT rect;
    

    switch(Msg){
        case WM_CREATE:
            PlaySound(TEXT("tingge.wav"),NULL,SND_FILENAME|SND_ASYNC);
            

            return 0;
        case WM_PAINT:
            hdc=BeginPaint(hwnd,&ps);
            GetClientRect(hwnd,&rect);
            DrawText(hdc,TEXT("Hello,Window98!"),-1,&rect,DT_CENTER|DT_SINGLELINE|DT_VCENTER);
            EndPaint(hwnd,&ps);
            
            return 0;
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;

    }
    return DefWindowProc(hwnd,Msg,wParam,lParam);
}

留下你的脚印。。。#include<windowsx.h>

此问题完美解决了,wav格式不能直接由mp3格式修改后缀而得,用格式工厂或千千静听可以转成wav(wave)格式,这样就可以解决了。

下面这个函数也可以播放声音的,系统声音

case WM_CREATE:
		//MessageBeep(MB_ICONEXCLAMATION);
		//MessageBeep(MB_ICONASTERISK);
		//MessageBeep(MB_ICONHAND);
		//MessageBeep(MB_ICONQUESTION);
		//MessageBeep(MB_OK);
		return 0;