Menu

Use of libraries

2002-11-09
2012-09-26
  • Nobody/Anonymous

    I have wrote a windows program to play a number of sounds. I have wrote the appropriate resourse file. When compiled ,the errors reported are undefined reference to PlaySound. I realise that a library must be included. But which one and how do I include it in the project. The program code is below. Any help would be appreciated

    // PROG6_3.CPP - basic sound

    // INCLUDES ///////////////////////////////////////////////
    #define WIN32_LEAN_AND_MEAN 

    #include <windows.h> 
    #include <windowsx.h>
    #include <mmsystem.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include "PROG6_3.H" // include menu header

    // DEFINES ////////////////////////////////////////////////

    // defines for windows
    #define WINDOW_CLASS_NAME "WINCLASS1"
    #define WINDOW_WIDTH  320
    #define WINDOW_HEIGHT 200

    // GLOBALS ////////////////////////////////////////////////
    HWND main_window_handle = NULL; // save the window handle
    char buffer[80];                // used to print text

    // FUNCTIONS //////////////////////////////////////////////
    LRESULT CALLBACK WindowProc(HWND hwnd,
                                UINT msg,
                                WPARAM wparam,
                                LPARAM lparam)
    {
    // this is the main message handler of the system
    PAINTSTRUCT    ps;           // used in WM_PAINT
    HDC            hdc;       // handle to a device context

    // what is the message
    switch(msg)
        {   
        case WM_CREATE:
            {
            // do initialization stuff here
            return(0);
            } break;

        // process menu messages
        case WM_COMMAND:
             {
             // what menu item?
             switch(wparam)
                   {
                   case ID_SMENU_FILE_EXIT:
                        {
                        // terminate application
                        PostMessage(hwnd,WM_DESTROY,0,0);
                        } break;
                   case ID_SMENU_PLAY_LASER:
                        {
                        PlaySound("LASER.WAV",NULL,SND_FILENAME | SND_ASYNC);
                        } break;
                   case ID_SMENU_PLAY_EXPL:
                        {
                        PlaySound("EXPL.WAV",NULL,SND_FILENAME | SND_ASYNC);
                        } break;
                   case ID_SMENU_PLAY_GROWL:
                        {
                        PlaySound("GROWL.WAV",NULL,SND_FILENAME | SND_ASYNC);
                        } break;
                   case ID_SMENU_PLAY_DOOR:
                        {
                        PlaySound("DOOR.WAV",NULL,SND_FILENAME | SND_ASYNC);
                        } break;
              
                   default: break;
                   } // end switch
      
             // inform windows we handled message
             return(0);
             } break;

        case WM_PAINT:
             {
             // start painting
             hdc = BeginPaint(hwnd,&ps);

             // end painting
             EndPaint(hwnd,&ps);
             return(0);
            } break;

        case WM_DESTROY:
            {
            // kill the application           
            PostQuitMessage(0);
            return(0);
            } break;

        default:break;

        } // end switch

    // process any messages that we didn't take care of
    return (DefWindowProc(hwnd, msg, wparam, lparam));

    } // end WinProc

    // WINMAIN ////////////////////////////////////////////////
    int WINAPI WinMain(    HINSTANCE hinstance,
                        HINSTANCE hprevinstance,
                        LPSTR lpcmdline,
                        int ncmdshow)
    {

    WNDCLASS winclass;    // this will hold the class we create
    HWND     hwnd;        // generic window handle
    MSG         msg;        // generic message
    HDC      hdc;       // generic dc
    PAINTSTRUCT ps;     // generic paintstruct

    // first fill in the window class stucture
    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(NULL, IDI_APPLICATION);
    winclass.hCursor        = LoadCursor(NULL, IDC_ARROW);
    winclass.hbrBackground    = (HBRUSH)GetStockObject(BLACK_BRUSH);
    winclass.lpszMenuName    = NULL;
    winclass.lpszClassName    = WINDOW_CLASS_NAME;

    // register the window class
    if (!RegisterClass(&winclass))
        return(0);

    // create the window
    if (!(hwnd = CreateWindow(WINDOW_CLASS_NAME, // class
                              "Playsound Demo",     // title
                              WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                               0,0,       // x,y
                              WINDOW_WIDTH,  // width
                              WINDOW_HEIGHT, // height
                              NULL,       // handle to parent
                              NULL,       // handle to menu
                              hinstance,// instance
                              NULL)))    // creation parms
    return(0);

    // save the window handle in a global
    main_window_handle = hwnd;

    // load the menu in and attach it (method 3)
    SetMenu(hwnd,LoadMenu(hinstance, "SMENU"));

    // enter main event loop
    while(1)
        {
        if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
            {
            // test if this is a quit
            if (msg.message == WM_QUIT)
               break;
       
            // translate any accelerator keys
            TranslateMessage(&msg);

            // send the message to the window proc
            DispatchMessage(&msg);
            } // end if
       
        // main game processing goes here

        } // end while

    // return to Windows like this
    return(msg.wParam);

    } // end WinMain

    ///////////////////////////////////////////////////////////

    Cheers
    Andy K

     
    • Nobody/Anonymous

      libwinmm.a

       
    • Nobody/Anonymous

      How Do i include this library in my project though

       
    • Nobody/Anonymous

      Hi there!
      I guess -lwinmm should do the trick... Go to project options and enter "-lwinmm" as a linker option.
      Hope this helped..

       

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.