windowsplayer:Windows Media Player界面的实现



摘要
本文介绍了如何使用SYGUI界面库来为添加类似Windows Media Player界面定制功能使具有各种区别风格界面

关键词
Windows Media Play界面 界面定制功能 SYGUI界面库


、介绍
SYGUI是个基于功能扩展MFC界面库我在以前文章中介绍了如何使用该界面库来实现VC界面在本文中将向大家介绍利用SYGUI4.0所提供新功能来实现类似Windows Media Player界面定制功能这里所指界面定制功能是指在不修改代码情况下允许为设计各种具有区别外观风格界面例如本文所附例子包含了如下图所示 3种区别界面 3种界面可通过界面上外观选择按钮进行动态切换:


例子运行时 3种界面

当然通过界面定制还可以为例子设计更多界面

SYGUI4.0是通过将界面设计和功能实现分离方式来实现界面定制因此在开发具有界面定制功能时包含以下两个过程:
1.软件Software开发人员为添加界面定制功能
2.界面设计人员为设计各种界面其中界面设计人员既可以是开发人员也可以是最终用户

2、为添加界面定制功能
由于SYGUI4.0隐藏了实现界面定制功能几乎全部细节因此开发人员为添加界面定制功能非常简单:只需要确定输出界面对象并创建个不规则窗体模板文件
SYGUI4.0中允许输出界面对象包括:
1.窗口 可以为任意类型窗口如组合框、列表框等
2.SYItem对象 SYGUI库提供非窗口类Control控件如SYGUI进度条、滚动条等
3.命令 中实现命令般和定制界面窗口中按钮相对应
4.菜单资源 可被用于菜单条或按钮下拉菜单
5.文本对象 可被用于在界面上显示文本
6.状态对象 可被作为界面设计时可选控制变量

下面结合例子实际代码来介绍在中怎样输出各种界面对象:

CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { (CFrameWnd::OnCreate(lpCreateStruct) -1) -1;
//MFC生成其它代码 ...... ......
//创建各种界面对象 m_seek.SetID(ID_SLIDER_SEEK); ...... ...... m_wndPlayList.Create(WS_CHILD|WS_VISIBLE|LBS_NOINTEGRALHEIGHT,CRect(0,0,0,0),this,0); m_wndPlayList.SetFont(g_pFontMgr->GetFont(FONT_MENU)); m_wndPlayList.SetBkColor(RGB(0,0,0)); m_wndPlayList.AddString("测试.wam"); //输出窗口对象 g_pNRWMgr->ExportWnd(1,&m_wndPlayList,_T("WND_PLAYLIST")); g_pNRWMgr->ExportWnd(2,&m_cbPlayList,_T("COMBOBOX_PLAYLIST")); //输出SYITEM对象 g_pNRWMgr->ExportItem(0,&m_seek,_T("SLIDER_SEEK")); ...... ...... g_pNRWMgr->ExportItem(23,&m_playIcon,_T("PLAY_ICON")); //输出命令 g_pNRWMgr->ExportCommand(ID_PLAY,_T("ID_PLAY")); ...... ...... g_pNRWMgr->ExportCommand(ID_THEME,_T("ID_THEME")); //输出文本 g_pNRWMgr->ExportText(PLAY_TIME_TEXT,_T("PLAY_TIME_TEXT")); g_pNRWMgr->ExportText(PLAY_INFO_TEXT,_T("PLAY_INFO_TEXT")); g_pNRWMgr->ExportText(MEDIA_INFO_TEXT,_T("MEDIA_INFO_TEXT")); g_pNRWMgr->ExportText(SPEAKER_NAME,_T("SPEAKER_NAME")); g_pNRWMgr->ExportText(EQPRESET_NAME,_T("EQPRESET_NAME")); //输出菜单资源 g_pNRWMgr->ExportMenu(IDR_MAINFRAME,_T("IDR_MAINFRMAE")); //输出状态 g_pNRWMgr->ExportState(PLAY_STATE,_T("PLAY_STATE"),0,255); //创建不规则窗体模版在模板文件创建后应删除或注释掉下面语句 //g_pNRWMgr->CreateTemplate(_T("d:\\test.tpl")); //设置文本和状态值 g_pNRWMgr->SetText(EQPRESET_NAME,_eq_pre_name[m_nEQPre]); g_pNRWMgr->SetText(SPEAKER_NAME,_speaker_name[m_nSpeaker]); g_pNRWMgr->SetText(MEDIA_INFO_TEXT,_T("歌曲:测试 艺术家:未知 唱片集:测试 ")); (m_wndPlayList.GetCount > 0) g_pNRWMgr->SetText(PLAY_INFO_TEXT,_T("准备就绪")); g_pNRWMgr->SetText(PLAY_INFO_TEXT,_T("")); g_pNRWMgr->SetState(PLAY_STATE,0); //恢复布局 CString strLayout = g_strPath + _T("\\Layout\\WMPlayer.lyt"); g_pThemeMgr->LoadLayout(strLayout); //加载外观风格文件 CString strTheme; g_pThemeMgr->GetLastThemeFile(strTheme); (!strTheme.IsEmpty) g_pThemeMgr->LoadTheme(strTheme); 0; }



上面代码中
g_pNRWMgr是SYGUI库化时自动创建全局变量用于管理不规则窗体
g_pThemeMgr是SYGUI库化时自动创建全局变量用于管理外观风格文件

从上面代码中我们可以看到输出界面对象是非常简单只需要相应界面对象输出就可以了所有输出最后个参数为输出对象别名由开发人员决定界面设计人员在设计界面时是通过该别名来选取对应界面对象
ExportWnd输出窗口对象其中第个参数是输出对象序号由开发人员分配但必须保持唯第 2个参数指向窗口对象
ExportItem输出窗口对象其中第个参数是输出对象序号由开发人员分配但必须保持唯第 2个参数指向SYItem对象
ExportCommand输出个命令其中第个参数为命令ID
ExportMenu输出菜单资源其中第个参数为菜单资源ID
ExportText输出文本对象其中第个参数为文本对象ID由开发人员分配但必须保持唯在输出文本对象同时也将创建该文本对象中必须SetText来设置/修改文本对象所表示串值
ExportState输出状态对象其中第个参数为状态对象ID由开发人员分配但必须保持唯在输出状态对象同时也将创建该状态对象中必须SetState来设置/修改状态对象状态值状态值范围为:0 - 255

在所有界面输出对象确定后开发人员就可以通过CreateTemplate来创建不规则窗体模板例如在最后界面对象输出语句后加入
g_pNRWMgr->CreateTemplate(_T("d:\\MyTemplate.tpl"));
然后编译运行将生成名为 MyTemplate.tpl 不规则窗体模板文件模板文件创建后应当在中注释或删除上面模板创建语句

当开发人员在确定了所有输出界面对象并创建不规则窗体模板文件后就可以专注于功能实现而不必关心最终界面实现了最终界面是由界面设计人员来确定开发人员只需要在LoadTheme加载界面设计人员提供各种外观风格文件就可以使具有区别界面例如下面代码就加载了例子中所带Gold界面:
g_pThemeMgr->LoadTheme(_T("Theme\\MediaPlayer_Glod.ss"));

3、界面设计
在不规则窗体模板生成后界面设计人员就可以为设计各种风格界面了为了便于理解首先介绍两个基本概念:
1.不规则窗体 具有界面定制功能界面由个或多个不规则窗体组成不规则窗体个数由界面设计人员根据实际界面需要来确定
2.层 每个不规则窗体包含个或多个层每个层可以有区别形状和位置上面层将覆盖下面层(相交区域部分)不规则窗体中所有层形状合并在起构成不规则窗体实际形状层具有打开/关闭两种状态区别状态层可以有区别位置但形状保持不变在层上可以放置各种界面对象包括输出界面对象和SYGUI内置界面对象(如层控制按钮、不规则窗体关闭按钮等)

界面设计人员应按以下步骤来设计界面:
1.确定界面不规则窗体个数
2.确定每个不规则窗体层数和层形状及位置
3.将各种界面对象加入到层合适位置
4.将设计完成界面保存到外观风格文件中

SYGUI4.0提供了个可视化(所见即所得)不规则窗体设计工具来帮助界面设计人员设计界面该工具被集成在SYGUI外观风格设计器中下面结合例子所带Gold界面来介绍如何使用外观风格设计器来定制界面
首先下载例子源代码然后解压,运行Designer子目录下Designer.ex(外观设计工具)并在该工具中打开Theme子目录下MediaPlayer_Gold.ss文件


在左侧不规则窗体面板中树形控制中选择[不规则窗体]节点中[NRW0]子节点然后单击鼠标右键在弹出菜单中选择[编辑]将出现不规则窗体设计工具界面如下图:

图 2 不规则窗体设计工具界面

从上面界面中我们可以看到Gold界面仅包含个不规则窗体该窗体包含6个层

限于篇幅下面只能简单介绍下界面设计过程:
1.导入不规则窗体模板
选择不规则窗体面板-->不规窗体模板节点,然后单击鼠标右键并在弹出菜单中选择[导入模板]将出现文件选择对话框在选择合适模板文件后点击[打开]按钮导入模板
2.创建不规则窗体
选择不规则窗体面板-->不规窗体节点然后单击鼠标右键并在弹出菜单中选择[插入]将出现创建不规则窗体对话框在该对话框中填入合适参数然后选择[确定]按钮注意:对话框中大小参数也将作为界面设计工作区大小
3.设计不规则窗体
在不规则窗体面板中选择需要设计不规则窗体节点然后单击鼠标右键并在弹出菜单中选择[编辑]将进入不规则窗体设计界面
4.创建层
在工具条中选择[创建层按钮]将出现创建层对话框在该对话框中填入合适参数并选择[确定]按钮创建个新新创建层将处于编辑状态
5.添加界面对象
在工具条中选择[添加界面对象]按钮然后在按钮下拉菜单中选择需要添加界面对象类型将出现对象属性对话框在对话框中填入合适参数然后选择[确定]按钮完成界面对象添加新添加界面对象总是被加入到当前处于编辑状态层中通过拖动拉伸可将该对象放入到层合适位置

Tags:  windowsplayer10 windowsplayer windowsplayer11 windowsplayer

延伸阅读

最新评论

发表评论