From: David Webber on
"Jack" <jl(a)knight.com> wrote in message
news:#KLjyCdFLHA.5500(a)TK2MSFTNGP05.phx.gbl...

> Here is the entire module, please take a look, thanks
> it still does not compile with identifiers not found (PlaySound and
> SND_FILENAME).Strange......

Have you linked to the multimedia library, Winmm.lib, as Scott said?

This library is not linked by default, you have to do it explicitly.

Dave
--
David Webber
Mozart Music Software
http://www.mozart.co.uk
For discussion and support see
http://www.mozart.co.uk/mozartists/mailinglist.htm



From: Giovanni Dicanio on
On 27/06/2010 10:13, Jack wrote:

> Here is the entire module, please take a look, thanks
> it still does not compile with identifiers not found (PlaySound and
> SND_FILENAME).Strange......
>
> //////////////////////
>
> // MFCSimple01Dlg.cpp : implementation file
> //
>
>
> #include "stdafx.h"
> #include <Windows.h>

Do not #include <Windows.h> as above.
Just edit "stdafx.h" and add in it:

#include "Mmsystem.h"

Then rebuild; it should compile.

If it does not link, add Winmm.lib using the IDE as suggested above by
Scott (or use #pragma comment(lib, "Winmm.lib") in some source file).

Giovanni

From: Joseph M. Newcomer on
See below...
On Sun, 27 Jun 2010 16:13:50 +0800, Jack <jl(a)knight.com> wrote:

>
>> Hi,
>> I want to play a wave file when I click on a button
>> #include <MMSystem.h>
>> ...
>>
>> int CDialog::OnBtnClick(...)
>> {
>> PlaySound("123.wav", NULL, SND_FILENAME);
>>
>> }
>>
>>
>> But PlaySound and SND_FILENAME identifiers are not found. Any ideas?
>> Thanks
>> Jack
>
>Here is the entire module, please take a look, thanks
>it still does not compile with identifiers not found (PlaySound and
>SND_FILENAME).Strange......
>
>//////////////////////
>
>// MFCSimple01Dlg.cpp : implementation file
>//
>
>
>#include "stdafx.h"
>#include <Windows.h>
****
This is wrong, and serves no useful purpose. Get rid of the above line, it does nothing.
****
>#include "MyGrid.h"
>#include "MFCSimple01.h"
>#include "MFCSimple01Dlg.h"
>
>
>#ifdef _DEBUG
>#define new DEBUG_NEW
>#endif
>
>
>// CAboutDlg dialog used for App About
>
>class CAboutDlg : public CDialog
>{
>public:
> CAboutDlg();
>
>// Dialog Data
> enum { IDD = IDD_ABOUTBOX };
>
> protected:
> virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
>
>// Implementation
>protected:
> DECLARE_MESSAGE_MAP()
>};
>
>CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
>{
>
>}
>
>void CAboutDlg::DoDataExchange(CDataExchange* pDX)
>{
> CDialog::DoDataExchange(pDX);
>}
>
>BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
>END_MESSAGE_MAP()
>
>
>// CMFCSimple01Dlg dialog
>
>
>
>
>CMFCSimple01Dlg::CMFCSimple01Dlg(CWnd* pParent /*=NULL*/)
> : CDialog(CMFCSimple01Dlg::IDD, pParent)
>{
>// m_nCount = 0;
>// m_nCols = 0;
>
> m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
>}
>
>void CMFCSimple01Dlg::DoDataExchange(CDataExchange* pDX)
>{
> CDialog::DoDataExchange(pDX);
>
>}
>
>BEGIN_MESSAGE_MAP(CMFCSimple01Dlg, CDialog)
> ON_WM_SYSCOMMAND()
> ON_WM_PAINT()
> ON_WM_QUERYDRAGICON()
> //}}AFX_MSG_MAP
> ON_BN_CLICKED(IDC_SAYHI, &CMFCSimple01Dlg::OnBnClickedSayhi)
> ON_WM_CREATE()
>END_MESSAGE_MAP()
>
>
>// CMFCSimple01Dlg message handlers
>
>BOOL CMFCSimple01Dlg::OnInitDialog()
>{
> CDialog::OnInitDialog();
>
> // Add "About..." menu item to system menu.
>
> // IDM_ABOUTBOX must be in the system command range.
> ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
> ASSERT(IDM_ABOUTBOX < 0xF000);
>
> CMenu* pSysMenu = GetSystemMenu(FALSE);
> if (pSysMenu != NULL)
> {
> BOOL bNameValid;
> CString strAboutMenu;
> bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
> ASSERT(bNameValid);
> if (!strAboutMenu.IsEmpty())
> {
> pSysMenu->AppendMenu(MF_SEPARATOR);
> pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
> }
> }
>
> // Set the icon for this dialog. The framework does this automatically
> // when the application's main window is not a dialog
> SetIcon(m_hIcon, TRUE); // Set big icon
> SetIcon(m_hIcon, FALSE); // Set small icon
>
> // TODO: Add extra initialization here
>
> return TRUE; // return TRUE unless you set the focus to a control
>}
>
>void CMFCSimple01Dlg::OnSysCommand(UINT nID, LPARAM lParam)
>{
> if ((nID & 0xFFF0) == IDM_ABOUTBOX)
> {
> CAboutDlg dlgAbout;
> dlgAbout.DoModal();
> }
> else
> {
> CDialog::OnSysCommand(nID, lParam);
> }
>}
>
>// If you add a minimize button to your dialog, you will need the code below
>// to draw the icon. For MFC applications using the document/view model,
>// this is automatically done for you by the framework.
>
>void CMFCSimple01Dlg::OnPaint()
>{
> if (IsIconic())
> {
> CPaintDC dc(this); // device context for painting
>
> SendMessage(WM_ICONERASEBKGND,
>reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
>
> // Center icon in client rectangle
> int cxIcon = GetSystemMetrics(SM_CXICON);
> int cyIcon = GetSystemMetrics(SM_CYICON);
> CRect rect;
> GetClientRect(&rect);
> int x = (rect.Width() - cxIcon + 1) / 2;
> int y = (rect.Height() - cyIcon + 1) / 2;
>
> // Draw the icon
> dc.DrawIcon(x, y, m_hIcon);
> }
> else
> {
> CDialog::OnPaint();
> }
>}
***
The above function, and its message map entry, can be deleted. The framework insists on
putting them in, just in case you ran this under Windows 4.0 (too bad the framework has
not caught up with modern operating systems)
****
>
>// The system calls this function to obtain the cursor to display while
>the user drags
>// the minimized window.
>HCURSOR CMFCSimple01Dlg::OnQueryDragIcon()
>{
> return static_cast<HCURSOR>(m_hIcon);
>}
****
ditto
****
>
>
>void CMFCSimple01Dlg::OnBnClickedSayhi()
>{
> GetDlgItem(IDC_HI)->SetWindowText("Hi!");
>
>
>
>
> CUGCell cell;
> cell.SetText("Hello");
> m_Grid.SetCell(0,0,&cell);
> InvalidateRect(NULL, FALSE);
> PlaySound("123.wav", NULL, SND_FILENAME);
****
As pointed out, this should be _T("123.wav"), and you would be better off making it a
resource.

Check to see that the symbols are included; there might be an #ifdef or #ifndef in
mmsystem.h, or where mmsystem.h is included. You would need to either define that symbol,
make sure it has the right value (it might be for some antique OS), or make sure the
symbol is *not* defined.

I'm leaving for the airport in 10 minutes, don't have time to check it out.
joe

****
>
>
>
> // TODO: Add your control notification handler code here
>}
>BEGIN_EVENTSINK_MAP(CMFCSimple01Dlg, CDialog)
>// ON_EVENT(CMFCSimple01Dlg, IDC_MSFLEXGRID1, DISPID_KEYPRESS,
>CMFCSimple01Dlg::KeyPressMsflexgrid1, VTS_PI2)
>END_EVENTSINK_MAP()
>
>
>int CMFCSimple01Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
>{
>
>
> if (CDialog::OnCreate(lpCreateStruct) == -1)
> return -1;
>
> m_Grid.CreateGrid(WS_CHILD|WS_VISIBLE, CRect(20,100,450,260), this,
>1234567);
>
>
>
> // TODO: Add your specialized creation code here
>
> return 0;
>}
>///////////////////////////////////////////
Joseph M. Newcomer [MVP]
email: newcomer(a)flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm
From: Jack on
Compiles just fine now... Thanks for everybody's effort
Have a nice day. And continue to support your favourite team in the
world cup.