



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘要:本文主要介绍了对 Windows Media Player控件的使用方法,并在此基础上完成个性化媒体播放程序的设计实现。关键字:ActiveX控件;多媒体;窗体半透明;热键引言多媒体播放软件现在几乎成为每一台家用计算机的装机必备软件,比较流行的有RealOne Player、Windows Media Player以及国产软件金山影霸等等,通过这些软件能够播放RM、RMVB、MP3、MPEG、DAT等多种格式的多媒体文件。虽然这些商业软件在功能上已经做的相当完备,但由于其产品开发是面向 大多数普通消费者的,正所谓众口难调,这类软件很难做到符合每一个消费者的口味。而作为一名程序员,完全可以
2、利用自身的技术优势来对其进行改造,以设计岀为自己量身订做的媒体播放软件,改造后的软件 在使用时将更符合自己的使用习惯。本文即以Windows Media Player 9.0为例讲述如何将其改造为个性化的媒体播放软件。对 Windows Media Player控件的基本控制在安装了 Windows Media Player 9.0 后,一个 Windows Media Player ActiveX 控件也同时被安装到 系统并完成注册。该控件为开发人员提供了Windows Media Player 9.0 具备的绝大部分功能,能够通过该控件比较轻松的实现对 Windows Media Play
3、er 9.0 的二次开发。为使用该控件,首先要将其添加到工程。点击“Project下“Add to Project弹岀的“Components andControls 子菜单,并从弹出对话框中进入 “ Registered ActiveX Controls 目录查找并添加 Windows Media Player控件到工程。这时以 CWMP开头的17个类将被添加到工程。在资源视图中将控件拖动到用来播放 多媒体的对话框上并通过ClassWizard将控件与CWMPPlayer4类对象建立关联。CWMPPlayer4类提供了与Windows Media Player 控件进行交互的基本方法,而且部
4、分成员函数还能够进一步获取得到其他相 关类对象的实例。其中,SetUrl ()和close ()方法将能够打开和关闭指定的媒体文件。在打开文件之后, 能够通过控件上的自带按钮控制媒体的播放、暂停、停止以及对音量的控制等。如果需要在程序中控制媒 体的播放,可使用 GetControls ()函数返回CWMPControls类对象,并进一步调用该对象的play ()、stop ()、pause ()、fastForward ()、fastReverse ()等方法来完成播放、停止、暂停、快进、快退 等相应动作;如果需要在程序中对控件属性进行设置和更改,可在GetSettings ()方法返回一个C
5、WMPSettings类的对象后通过其成员函数来完成相应的设置,例如,下面这段代码将把播放音量设置到 最大:m_Setting = m_WMPPIayer.GetSettings();m_Setting.SetVolume(100);目前只是在窗口模式下播放媒体,大部分媒体播放软件都提供有全屏播放功能,Windows Media Player也不例外,只需以 TRUE为参数调用CWMPPlayer4类成员函数 SetFullScreen ()即可,在全屏模式下 可以通过点击鼠标左键或是从右键弹出菜单退回到窗口播放模式。通过对CWMPPlayer4、CWMPSettings和CWMPContro
6、ls 等几个类的使用可以实现 Windows Media Player 的大部分常规功能,如果需要做进一 步的控制,可以在用下面这些函数返回相关类对象后调用相关成员函数来加以实现:GetCurrentMedia()返回 CWMPMedia 类对象GetMediaCollection()返回 CWMPMediaCollection 类对象GetPlaylistCollection()返回 CWMPPlaylistCollection 类对象GetNetwork()返回 CWMPNetwork 类对象GetCurrentPlaylist()返回 CWMPPlaylist 类对象GetCdromCo
7、llection()返回 CWMPCdromCollection 类对象GetClosedCaption()返回 CWMPCIosedCaption 类对象GetError()返回 CWMPError 类对象GetDvd() 返回CWMPDVD 类对象GetPlayerApplication()返回 CWMPPlayerApplication 类对象热键隐藏与呼出前面介绍的各种常规功能在Windows Media Player中都已经具备,为了使设计的程序在使用方式上更适合自己,可以根据自己的需求添加一些Windows Media Player 原本并不具备的个性化功能。例如,本程序下面将要添
8、加的热键迅速隐藏、呼出功能和可调半透明播放功能都是Windows Media Player 所不具备的,而且就笔者这段时间的试用,感觉这两种功能都还是相当实用的。当然,这里要添加的既然是个性化”功能,那么就应当视读者的个人喜好而决定到底要添加什么功能。笔者此处介绍的目的仅在于抛砖引 玉。无论是金山影霸还是 RealOne Player、Windows Media Player 等主流媒体播放软件都没有提供彻底隐藏的功能,通常只能简单的最小化至多不过缩小成任务区中的一个小图标,这样其实根本达不到隐藏的效果,如果暂时离开计算机,他人可以很容易打开当前正在执行的媒体播放程序。这里将要实现的目标是:程
9、序主窗体的隐藏、在任务栏上的隐藏、在Alt+Tab键在程序间切换时的隐藏。这样,程序在实施隐藏后他人将意识不到程序的执行,可以达到非常好的隐身效果。由于隐藏后没有任何窗口供用户交互之用,因 此需要添加热键以在程序隐藏后能够将其从后台呼岀。首先要在程序中注册一个热键,无论该程序在前台还是后台运行,只要用户按下这个热键,程序将立 即执行在前、后台间的切换。下面这段代码在程序初始运行时执行,通过对RegisterHotKey ()的调用登记用于程序隐藏的热键Ctrl + P (或Ctrl + p )和用于程序呼出的热键Ctrl + Shift + A (或Ctrl + Shift + a )/登记热
10、键HWND hWnd = GetSafeHwnd();RegisterHotKey(hWnd, 1001, MOD_CONTROL | MOD_SHIFT, 'A');RegisterHotKey(hWnd, 1002, MOD_CONTROL | MOD_SHIFT, 'a');RegisterHotKey(hWnd, 1003, MOD_CONTROL, 'P');RegisterHotKey(hWnd, 1004, MOD_CONTROL, 'p');其中,1001、1002等参数是这些热键对应的ID。在程序捕获到热键消息
11、WM_HOTKEY 后将通过这些ID来确认按下的是哪个键。ClassWizard并没有对消息WM_HOTKEY进行封装,需要手工添加对该消 息的映射及处理。消息处理函数的wParam参数包含有按键的ID,下面是这部分实现代码:switch(wParam) case 1001:case 1002:/呼岀程序HWND hWnd = GetSafeHwnd();LONG lStyle = :GetWindowLong(m_hWnd, GWL_STYLE);lStyle &=WS_POPUP;:SetWindowLong(m_hWnd, GWL_STYLE, lStyle);:ShowWind
12、ow(m_hWnd, SW_SHOW);CWnd:SetForegroundWindow();m_Control.play(); / 继续break;case 1003:case 1004:/隐藏程序/隐藏程序HWND hWnd = GetSafeHwnd();LONG lStyle = :GetWindowLong(m_hWnd, GWL_STYLE);lStyle |= WS_POPUP;:SetWindowLong(m_hWnd, GWL_STYLE, lStyle);:ShowWindow(m_hWnd, SW_HIDE);m_Control.pause(); / 暂停break;在进
13、行窗体隐藏处理时,首先通过GetWindowLong ()得到当前窗口风格,在此基础上追加WS_POPUP风格并由SetWindowLong ()设置,修改后的窗体将具备工具条一样的风格,即不会在任务 栏显示窗体,在用 Alt+Tab切换窗体时也不会出现。最后再以SW_HIDE调用ShowWindow ()函数隐藏程序主窗口即达到彻底隐藏的目的。窗体呼出过程正与之相反:在GetWindowLong ()函数得到当前窗口风格后,从中剔除 WS_POPUP风格并由SetWindowLong ()设置,恢复程序原有的风格,最后再以SW_SHOW 调用ShowWindow ()函数显示程序主窗体。最后
14、由CWnd类成员函数SetForegroundWindow() 将呼岀的程序显示到前台。需要注意的是,在程序退岀前一定要将先前注册的热键注销,由UnregisterHotKey ()函数完成:HWND hWnd = GetSafeHwnd();UnregisterHotKey(hWnd, 1001);UnregisterHotKey(hWnd, 1002);窗体半透明效果实现窗体半透明这一功能实际是为了满足一心二用”的目的而特别添加的。笔者通常在播放媒体文件时阅读电子图书,将播放软件设置为最前后总是占据不小的屏幕面积并遮挡了不少文字,使阅读变的非常不便。因此才有了将播放软件界面设置为半透明这一
15、想法。传统的Windows应用程序想实现半透明效果,一般来说需要处理自己的窗口的WM_Paint消息窗口,比较麻烦。在 Windows 2000以上版本的操作系统中提供有一个新的API函数SetLayeredWindowAttributes (),它能很方便的将窗体设置为半透明效果,其函数声明如下:BOOL SetLayeredWindowAttributes(HWND hwnd, / handle to the layered windowCOLORREF crKey, / specifies the color keyBYTE bAlpha, / value for the blend f
16、unctionDWORD dwFlags / action);其中dwFlags有LWA_ALPHA 和LWA_COLORKEY 两种设置,如果LWA_ALPHA 被设置的话,通过bAlpha决定透明度;如果 LWA_COLORKEY 被设置的话,则指定被透明掉的颜色为crKey,其他颜色则正常显示。为了能够使用该函数,还必须在之前添加预定义语句:#define WS_EX_LAYERED 0x00080000在用 GetModuleHandle ()装载 USER32.DLL 模块并调用 GetProcAddress ()得到函数SetLayeredWindowAttributes ()在
17、User32.dll 中的指针后就可以通过SetLayeredWindowAttributes ()函数将窗体设置为半透明了:/全局变量typedef BOOL (WINAPI *lpfn) (HWND hWnd, COLORREF cr, BYTE bAlpha, DWORD dwFlags);lpfn g_pSetLayeredWindowAttributes;/ 获取函数 SetLayeredWindowAttributes 在 User32.dll 中的指针 HMODULE hUser32 = GetModuleHandle(_T(USER32.DLL); g_pSetLayeredW
18、indowAttributes = (lpfn)GetProcAddress(hUser32, SetLayeredWindowAttributes);if (g_pSetLayeredWindowAttributes = NULL):PostQuitMessage(O);/半透明HWND hWnd = GetSafeHwnd();LONG lWindowLong = GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED;:SetWindowLong(hWnd, GWL_EXSTYLE, lWindowLong); g_pSetLayeredWindowAttributes(hWnd, 0, (BYTE)m_sldAlpha.GetPos(), 2);:RedrawWindow(hWnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);为了方便控制窗体的透明程度,可添加滑动条控件对其进行控制。经过这样的处理,就可以在播放媒 体时不受打扰地继续阅读被
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 土方租赁合同协议
- 报纸媒体推广合作合同5篇
- 售后服务合同范文(17篇)
- 2025公司广告制作合同(17篇)
- 新贸易合同(18篇)
- 全款房屋买卖合同
- 孕妇产品代理合同书(20篇)
- 有关租赁合同范文锦集(20篇)
- 购销合同书集合(2025版)
- 软件采购合同书(2025版)
- 天然石材更换方案
- 腹腔镜下子宫肌瘤剔除术护理查房
- 严防管制刀具 对自己和他人负责-校园安全教育主题班会课件
- 09J202-1 坡屋面建筑构造(一)-1
- 扁平足的症状与矫正方法
- 青春健康知识100题
- 员工考勤培训课件
- 危机处理与应急管理
- 丰田C-HR汽车说明书
- 国开电大操作系统-Linux系统使用-实验报告
- 黑臭水体监测投标方案(技术方案)
评论
0/150
提交评论