频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

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

来源: 作者: 出处:巧巧读书 2007-10-09 进入讨论组
下一页 1 2 

源码下载

  介绍了一个功能强大的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();
好了现在我们的CButtonST 类就改造完成了!现在的CButtonST支持了以下功能:

进入讨论组讨论。
下一页 1 2 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章