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

哦饿噢鳄

哦饿噢鳄

2016-01-29 12:06

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

让CButtonST 类支持鼠标掠过时发声
作者:Alon

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)

下载本文示例源代码

VC知识库在线杂志 第十七期介绍了一个功能强大的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}elseCancelHover();
好了现在我们的CButtonST 类就改造完成了!现在的CButtonST支持了以下功能:
1. 简单的发出ding的声音
2. 可以播放我们加入工程中的WAVE 资源

SetPlaySound 使用方法:
SetPlaySound有两个参数BOOL bPlaySound和LPCTSTR sID。第一个参数默认为false 也就是按钮默认鼠标掠过时不发声。第二个参数默认为NULL。

将第一个参数设成TRUE,不使用第二个参数时,鼠标掠过按钮发出Ding 的声音
将第一个参数设成TRUE,第二个参数设成WAVE的ID时,鼠标掠过按钮播放声

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/) 其他说明:
以上只有当按钮的SetFlat 属性为TRUE 时有效

让我们测试一下

测试一:当鼠标掠过按钮时,按钮发出ding的声音:

1. 在对话框中加入一个Button 控件,修改其属性:
ID:  IDC_DINGCaption: Ding
2. 给按钮添加相关联的成员变量:
CButtonSTm_btnDing;
说明:
添加方法:可以直接在对话框类中添加,也可以用ClassWizard,在Member Variables给按钮添加一个CButton 的变量,然后再找到相关处,将CButton 改为CButtonST

3. 在对话框类的 OnInitDialog() 中添加如下代码:
m_btnDing.SetPlaySound(true);
现在编译后就可以看到结果了,当鼠标掠过按钮时,会发出Ding
展开更多 50%)
分享

猜你喜欢

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

C语言教程 C语言函数
让CButtonST 类支持鼠标掠过时发声

鼠标划过时整行变色

Web开发
鼠标划过时整行变色

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

CButtonST类公共接口函数

C语言教程 C语言函数
CButtonST类公共接口函数

让Delphi的DBGrid支持鼠标轮

Delphi
让Delphi的DBGrid支持鼠标轮

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

让VB应用程序支持鼠标滚轮

编程语言 网络编程
让VB应用程序支持鼠标滚轮

在你的程序中如何使用CButtonST类

C语言教程 C语言函数
在你的程序中如何使用CButtonST类

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Visual Basic.NET中访问数据的方法

Visual Basic.NET中访问数据的方法

串口通讯及其在VB平台下的实现

串口通讯及其在VB平台下的实现
下拉加载更多内容 ↓