工控编程吧
标题:
97上位机VC MFC提示条提示声音与文本
[打印本页]
作者:
qq263946146
时间:
2015-12-18 19:07
标题:
97上位机VC MFC提示条提示声音与文本
(, 下载次数: 2)
上传
点击文件名下载附件
97上位机VC MFC提示条提示声音与文本
功能展示
提示条也就是CToolTipCtrl控件,默认情况下只能够简单的提示文本信息,我们当前例程实现了在提示文本的同时提示声音的功能,效果如图;
要点提示
例程播放声音的功能是通过微软自带的函数sndPlaySound()实现,在使用这个函数,我们工程中得添加它所在头文件及库也就是添加两行代码便可#include<mmsystem.h>#pragma comment(lib,“winmm.lib ”);然后我们现提示条位置发生变化时也就是处理WM_WINDOWPOSCHANGED消息函数时播放声音便可 ;
实现功能
1.新建基于对话框的应用程序
2.从CToolTipCtrl派生一个自定义 类class CSoundToolTip : publicCToolTipCtrl;头文件中包含两行代码#include <mmsystem.h>#pragmacomment(lib,“winmm.lib ”);添加变量WORD m_wWaveResourceID;用于保存声音文件ID,及它的设置函数voidSetPopupSound(WORD wResourceID) { m_wWaveResourceID = wResourceID;}再将此变量在构造函数中初始化为0,m_wWaveResourceID = 0;
3.添加WM_WINDOWPOSCHANGED消息处理函数及声音播放函数
void CSoundToolTip::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos)
{
CToolTipCtrl::OnWindowPosChanged(lpwndpos);
if (lpwndpos->flags & SWP_SHOWWINDOW)//窗口可见时
if (m_wWaveResourceID)//声间文件已设置
PlayResource(m_wWaveResourceID);
}
BOOL CSoundToolTip::PlayResource(WORD wResourceID)
{
// Get the handle to the current instance of the application
HINSTANCE hInstance = AfxGetInstanceHandle();
ASSERT (hInstance != NULL);
// Find the WAVE resource
HRSRC hResInfo = FindResource(hInstance, MAKEINTRESOURCE(wResourceID), _T("WAVE"));
if(hResInfo == NULL)
return FALSE;
复制代码
// Load the WAVE resource
HANDLE hRes = LoadResource(hInstance, hResInfo);
if (hRes == NULL)
return FALSE;
// Lock the WAVE resource and play it
LPSTR lpRes = (LPSTR) LockResource(hRes);
if(lpRes==NULL)
return FALSE;
if (sndPlaySound(lpRes, SND_MEMORY | SND_ASYNC) == NULL)
return FALSE;
// Free the WAVE resource and return success or failure.
FreeResource(hRes);
return TRUE;
}
复制代码
4.最后是自定义类的使用:在主对话框资源添加几控件用于提示效果测试,如我们例程添加有IDC_EDIT1,IDC_WAVE1IDC_WAVE2,IDC_SLIDER1;再添加 变量 CSoundToolTip m_ToolTip;在OnInitDialog()中初始化 m_ToolTip.Create(this);//创建 m_ToolTip.SetPopupSound(IDR_TOOLTIP_SOUND1);//设置声音 m_ToolTip.AddTool(GetDlgItem(IDC_WAVE1),"");//添加有提示文本的控件
m_ToolTip.AddTool(GetDlgItem(IDC_WAVE2),""); m_ToolTip.AddTool(GetDlgItem(IDC_EDIT1), "");m_ToolTip.AddTool(GetDlgItem(IDC_SLIDER1), "");
在PreTranslateMessage()函数中调用RelayEvent()函数及添加提示文本
if(pMsg->message== WM_MOUSEMOVE)
{
m_ToolTip.RelayEvent(pMsg);//处理鼠标相关消息
m_ToolTip.UpdateTipText("文本框提示文本测试",GetDlgItem(IDC_EDIT1));
m_ToolTip.UpdateTipText("按钮提示文本测试",GetDlgItem(IDC_WAVE1));
m_ToolTip.UpdateTipText("按钮提示文本测试",GetDlgItem(IDC_WAVE2));
m_ToolTip.UpdateTipText("滑块提示文本测试",GetDlgItem(IDC_SLIDER1));
}
我们来演示下功能实现的整个过程
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4