让CButtonST 类支持鼠标掠过时发声

介绍了一个功能强大的CButton派生类CButtonST,但在使用时我觉得这个类有一点小小的功能“缺陷”。我想大家都有这样的经验,有的软件当鼠标划过按钮时,会发出声音。我对CButtonnST进行了一点改造,使它有了此功能。

好了,现在就Follow me,Step by step do it。

首先,建立一个基于对话框的工程 test,然后把原BCMenu.cpp, BCMenu.h, BtnST.cpp, BtnST.h 四个文件加入到工程中。

接下来我们开始改造CButtonST 类。

1.打开CButtonST类的头文件BtnST.h 在它的开始部分加入对多媒体头文件及库文件的引用: #include <mmsystem.h>
#pragma comment(lib,"Winmm.lib")

2.向CButtonST类中添加两个成员变量和两个成员函数:

private:
      CString SoundID;
      BOOL m_bPlaySound;
public:
      void PlaySound();
      void SetPlaySound(BOOL bPlaySound,LPCTSTR sID=NULL);

3. 变量的初始化:

向CButtonST类的构造函数中加入代码:

m_bPlaySound=false;
SoundID="";

4.PlaySound(),SetPlaySound 函数的代码如下:

void CButtonST::PlaySound()
{
  if(!m_bPlaySound)
    return;
  if(SoundID=="")
  {
    MessageBeep(-1);
    return;
  }
else
{
  CString sID="IDR_WAVE1";
  HINSTANCE h=AfxGetInstanceHandle();
  HRSRC hr=FindResource(h,sID,"WAVE");
  HGLOBAL hg=LoadResource(h,hr);
  LPSTR lp=(LPSTR)LockResource(hg);
  ////sndPlaySound(lp,SND_MEMORY|SND_SYNC);
  sndPlaySound(lp,SND_MEMORY|SND_ASYNC);
  FreeResource(hg);
  }
}
void CButtonST::SetPlaySound(BOOL bPlaySound, LPCTSTR sID)
{
  m_bPlaySound=bPlaySound;
  SoundID=sID;
}

5.在CButtonST的OnMouseMove函数的最后一个if语句的嵌套中加入一句PlaySound()

if (wndUnderMouse && wndUnderMouse->m_hWnd == m_hWnd && wndActive)
{
  if (!m_bMouseOnButton)
  {
    m_bMouseOnButton = TRUE;
    Invalidate();
    csTME.cbSize = sizeof(csTME);
    csTME.dwFlags = TME_LEAVE;
    csTME.hwndTrack = m_hWnd;
    ::_TrackMouseEvent(&csTME);
    PlaySound();  //此句为我们添加的
  } // if
}
else
  CancelHover();

时间: 2024-11-01 04:49:50

让CButtonST 类支持鼠标掠过时发声的相关文章

CButtonST类公共接口函数

以下是CButtonST类的所有公共成员函数(函数名按音序排列先后): CButtonST::DrawBorder DWORD DrawBorder(BOOL bDrawBorder = TRUE, BOOL bRepaint = TRUE) 注释: 因为CButtonST的默认显示风格是平面按钮.调用此函数用来显示按钮边框. 参数: bDrawBorder: 值为TRUE则显示按钮边框. bRepaint: 值为TRUE则马上重绘按钮. 返回值: BTNST_OK: 函数执行完毕. CButt

让Delphi的DBGrid支持鼠标轮

现在的大多数的鼠标都有鼠标轮,比如,当我们浏览网页时,鼠标轮上下移动,网页就自动上下滚动.鼠标轮的确给我们的操作带来很多方便,但是,在Delphi的大多数控件中都只支持 MouseDown,MouseUp,MouseMove等事件,而不直接支持MouseWheel事件,我们在帮助客户设计一个查看程序时就碰到这样的问题.这个查看程序的数据是放在一个DBGrid中的,数据比较多,超出整个屏幕,如果用鼠标轮上下移动,则DBGrid的光标只在可见范围内移动,超出屏幕的数据必须用键盘或右侧的滚动条,给用户

PHP 下载远程文件类(支持断点续传)

PHP 下载远程文件类,支持断点续传下载,代码内含有具体的调用说明.程序主要是使用 HTTP 协议下载文件,HTTP1.1协议必须指定文档结束后关闭链接,否则读取文档时无法使用feof判断结束,可以有两种使用方法,具体请下载查看源码. <?php /** * 下载远程文件类支持断点续传 */ class HttpDownload { private $m_url = ""; private $m_urlpath = ""; private $m_scheme

bootstrap里怎么将鼠标悬浮时显示不同内容呢?平时用都是点击切换,悬浮怎么实现啊?

问题描述 bootstrap里怎么将鼠标悬浮时显示不同内容呢?平时用都是点击切换,悬浮怎么实现啊? bootstrap里怎么将鼠标悬浮时显示不同内容呢?平时用都是点击切换,悬浮怎么实现啊???? 解决方案 鼠标悬浮切换效果可以用CSS3来实现,不局限于Bootstrap框架,所有的html都可以.这是随便找的一个在线演示,你打开看看对应的css就行了,就一个css类的事情.http://m.baidu.com/from=1012852y/bd_page_type=1/ssid=0/uid=0/p

JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解_javascript技巧

本文实例讲述了JS实现弹出浮动窗口.分享给大家供大家参考.具体如下: 这里介绍的JS弹出浮动窗口,支持鼠标拖动和关闭,点击链接文字后弹出层窗口,也称作是弹出式对话框吧. 关于一些参数说明: bodycontent:要在窗口中显示的内容 title:窗口的标题 removeable:窗口是否能拖动 注意:内容窗体的高度是height-30px,请计算好要显示的内容高度和宽度. 注:在火狐或chrome下效果最佳,IE8下可能有些小问题. 点击此处查看运行效果: http://demo.jb51.n

JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)_javascript技巧

JavaScript获取鼠标移动时的坐标(兼容:IE8.谷歌.Firefox.Opera ),测试通过 直接复制成html文件,即可运行. 为方便大家测试特准备了一份在线演示 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns=&quo

有关基类指针调用类的虚函数时所遇到的问题

问题描述 有关基类指针调用类的虚函数时所遇到的问题 下列输出中其中一个第2处为什么无法输出相应字符串?并且当类中的输出字符串改为输出int 类型age时又为什么可以? 问题1:问题2: 解决方案 忽视了作用域

如何让你的VB6 IDE支持鼠标滚轮(过程)

过程 如何让你的VB6 IDE支持鼠标滚轮(过程) 本来一直在用VC,工作需要做一个数据库的工具,所以又捡起VB(用VB操作数据库还是很方便,比VC容易多了)注意到VB6 IDE不支持滚轮,正好看到http://blog.csdn.net/acsu/的Blog有解决方案,决定使用官方解决方法(放心一点:-))把操作过程抄成中文,方便大家看(其实就是翻译的Microsoft的东西)微软提供了两个方法,我只翻译了其中一个. Windows 2000 Sp4 . Visual Basic 6.0 下测

css实现鼠标悬停时滑出层提示的方法

 本文实例讲述了css实现鼠标悬停时滑出层提示的方法.分享给大家供大家参考.具体分析如下: 这是一个简单的鼠标悬停提示特效,类似于alt标签,不过这一种是用纯CSS实现,扩展性好,而且在提示的层里可以加入图片或其它布局,这个要根据你的需要了.   代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-tran