这里做一个VLC的例子(在SOUI中使用VLC来播放一下本地文件和流)

Step1 使用向导建立一个工程,将需要包含的VLC文件包含进去
Step2 SOUI 界面的一些设置
Step3 编写代码 实现对应的功能
Step4 查看效果

思考:怎么减小VLC的体积 减小plugins的体积?

  • Step1 使用向导建立工程 建立XML文件

主窗口

<SOUI name="mainWindow" title="@string/title" bigIcon="ICON_LOGO:32" smallIcon="ICON_LOGO:16" width="800" height="600" margin="5,5,5,5" resizable="0" wndType="appMain" appWnd="1" translucent="0"><root skin="skin_1_jpg" cache="1"><caption pos="0,0,-0,30" show="1" font="adding:0"><text pos="5,5" colorText="#ffffffff" font="face:宋体,size:20">VLC demo</text><imgbtn name="btn_close" skin="_skin.sys.btn.close" pos="-45,0" tip="close" animate="1" /></caption><window pos="5,[2,-5,-5"><text pos="26,16,@-1,@24" colorText="#ffffff">播放路径:</text><edit pos="[10,{,-100,@24" colorBkgnd="#FFFFFF" cueText="" colorText="#000000" name="edit_playurl" colorBkgnd="RGBA(0,0,0,0)" margin="1,1,1,1" colorBorder="#F9E3F8" /><button pos="[5,{,@60,@24" colorText="#FFFFFF" skin="skin_1_jpg" name="btn_play">播 放</button><window pos="26,[10,@730,@500"><realwnd pos="10,10,-10,-10" name="wnd_play" wndclass="SRealWnd" id="" wndname="playwnd" margin="1,1,1,1" colorBorder="#F9E3F8" /></window></window></root>
</SOUI>

子窗口

<?xml version="1.0"?>
<SOUI name="window" title="布局" bigIcon="ICON_LOGO:32" smallIcon="ICON_LOGO:16" width="400" height="300" margin="1,5,5,5" wndType="8" toolWindow="1"><root cache="1"><window pos="0,0,-0,-0" colorText="#ffffff" skin="skin_2_jpg" /></root>
</SOUI>
  • Step2 界面的设置

可以参照mfc.demo这个例子 
这里直接抄过来 改一下对应的类

#pragma once#include <unknown/obj-ref-impl.hpp>namespace SOUI
{class CSouiRealWndHandler :public TObjRefImpl2<IRealWndHandler,CSouiRealWndHandler>{public:CSouiRealWndHandler(void);~CSouiRealWndHandler(void);/*** SRealWnd::OnRealWndCreate* @brief    创建真窗口* @param    SRealWnd * pRealWnd --  窗口指针* @return   HWND -- 创建出来的真窗口句柄* Describe  */    virtual HWND OnRealWndCreate(SRealWnd *pRealWnd);/*** SRealWnd::OnRealWndDestroy* @brief    销毁窗口* @param    SRealWnd *pRealWnd -- 窗口指针** Describe  销毁窗口*/virtual void OnRealWndDestroy(SRealWnd *pRealWnd);/*** SRealWnd::OnRealWndInit* @brief    初始化窗口* @param    SRealWnd *pRealWnd -- 窗口指针** Describe  初始化窗口*/virtual BOOL OnRealWndInit(SRealWnd *pRealWnd);/*** SRealWnd::OnRealWndSize* @brief    调整窗口大小* @param    SRealWnd *pRealWnd -- 窗口指针* @return   BOOL -- TRUE:用户管理窗口的移动;FALSE:交由SOUI自己管理。* Describe  调整窗口大小, 从pRealWnd中获得窗口位置。*/virtual BOOL OnRealWndSize(SRealWnd *pRealWnd);};}
#include "StdAfx.h"
#include "SouiRealWndHandler.h"
#include "SPlayDlg.h"namespace SOUI
{CSouiRealWndHandler::CSouiRealWndHandler(void){}CSouiRealWndHandler::~CSouiRealWndHandler(void){}HWND CSouiRealWndHandler::OnRealWndCreate( SRealWnd *pRealWnd ){const SRealWndParam &param=pRealWnd->GetRealWndParam();if(param.m_strClassName==_T("SRealWnd")){SPlayDlg *pWnd = new SPlayDlg;//mfc.demo中的例子 pbtn->Create(param.m_strWindowName,WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,::CRect(0,0,0,0),CWnd::FromHandle(pRealWnd->GetContainer()->GetHostHwnd()),pRealWnd->GetID());pWnd->Create(pRealWnd->GetContainer()->GetHostHwnd(), WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, 0);pRealWnd->SetData(pWnd);//返回成功创建后的窗口句柄return pWnd->m_hWnd;}else{return 0;}}void CSouiRealWndHandler::OnRealWndDestroy( SRealWnd *pRealWnd ){const SRealWndParam &param=pRealWnd->GetRealWndParam();if(param.m_strClassName==_T("SRealWnd")){//销毁真窗口,释放窗口占用的内存SPlayDlg * pWnd = (SPlayDlg*) pRealWnd->GetData();if(pWnd){pWnd->DestroyWindow();delete pWnd;}}}//不处理,返回FALSEBOOL CSouiRealWndHandler::OnRealWndSize( SRealWnd *pRealWnd ){return FALSE;}//不处理,返回FALSEBOOL CSouiRealWndHandler::OnRealWndInit( SRealWnd *pRealWnd ){return FALSE;}
}

Step3 处理播放的逻辑
关于vlc怎么包含对应的文件 文末给出github上整个工程地址(这个后续增加)

void CMainDlg::OnPlay()
{//SMessageBox(NULL, L"点击了播放", L"提示", MB_OK);ReleaseVlc();//处理播放的逻辑SRealWnd* pWnd = (SRealWnd*)FindChildByName(L"wnd_play");SASSERT(pWnd);SStringT strPath = L"";SEdit* pEdit = FindChildByName2<SEdit>(L"edit_playurl");strPath = pEdit->GetWindowTextW();//对路径进行一个编码的转换 转换成UTF8来进行调用wchar_t* wchar = strPath.GetBuffer(strPath.GetLength());strPath.ReleaseBuffer();size_t len = wcslen(wchar) + 1;size_t converted = 0;char* format = (char*)malloc(len * sizeof(char));wcstombs_s(&converted, format, len, wchar, _TRUNCATE);//根据strPath判断播放的类型 如果是本地则使用本地的播放方法 区别 m_media 的创建方法int type = strPath.Find(L"http");m_media = strPath.Find(L"http") == -1 ? libvlc_media_new_path(m_inst, format) : libvlc_media_new_location(m_inst, format);if (!m_media){SMessageBox(NULL, L"输入文件名有误,请重新输入!\n正确输入例如:F:\\1.jpg", L"提示", MB_OK);return;}m_player = libvlc_media_player_new_from_media(m_media);libvlc_media_release(m_media);libvlc_media_player_set_hwnd(m_player, (void*)pWnd->GetRealHwnd());int ret = libvlc_media_player_play(m_player);if (0 != ret){SMessageBox(NULL,L"播放文件失败",L"提示",MB_OK);}free(format);
}void CMainDlg::ReleaseVlc()
{if (m_player != nullptr){libvlc_media_player_stop(m_player);libvlc_media_player_release(m_player);}m_player = nullptr;}

Step4 效果图

SOUI中SRealWnd的使用相关推荐

  1. 第三十四篇:在SOUI中使用异步通知

    概述 异步通知是客户端开发中常见的需求,比如在一个网络处理线程中要通知UI线程更新等等. 通常在Windows编程中,为了方便,我们一般会向UI线程的窗口句柄Post/Send一个窗口消息从而达到将非 ...

  2. mfc oninitdialog 中的hwnd == null_在SOUI中使用动态多语言切换

    动态语言切换是很多国际化产品的需求,SOUI之前的版本支持静态多语言翻译,通过在程序启动时设置好语言翻译模块,在程序中打开的UI都会自动调用该翻译模块进行文字翻译,但是不支持运行进语言切换. 最近几个 ...

  3. 在SOUI中使用线性布局

    SOUI 2.5.1.1开始支持线性布局(LinearLayout). 要在SOUI布局中使用线性布局, 需要在布局容器窗口里指定布局类型为vbox | hbox, (vbox为垂直线性布局, hbo ...

  4. 第二十三篇:在SOUI中使用LUA脚本开发界面

    像写网页一样做客户端界面可能是很多客户端开发的理想. 做好一个可以实现和用户交互的动态网页应该包含两个部分:使用html做网页的布局,使用脚本如vbscript,javascript做用户交互的逻辑. ...

  5. 拓展SOUI中SImRichEdit控件的视频OLE控件(VideoOle)

    视频定位控件数据可分为两部分: 可见部分:播放按钮.加载按钮.视频第一帧图片.视频时长 不可见部分:视频URL 以下为VideoOle控件头文件部分: extern "C" con ...

  6. soui中apng 图像解码器解码图片后像素格式研究

    soui是一个非常牛逼的界面库,里面对图片透明有着很好的支持,这也是我喜欢soui的一个重要原因.soui中不仅可以设置主窗口半透明,而且还可以设置soui子窗口半透明,两者的设置都非常的简单.只需要 ...

  7. SOUI中ListCtrl的自绘

    一些知识的补充: /* 2018-12-14 14:32:42 单项选择设置背景色 ListCtrl */ 通过重写ListCtrl加入部分属性 详细代码参照ListCtrlex 核心思想: 通过记录 ...

  8. SOUI中屏蔽右键菜单

    目前SOUI里只有文本控件有右键菜单.但是一般来说可能都不需要它显示.即使要显示可能也需要美化一下之类的.下面就介绍如何处理它. 第一步:在事件处理加上处理所有控件的右键事件. EVENT_MAP_B ...

  9. 第三十一篇:SOUI布局之相对于特定兄弟窗口

    SOUI中通过pos的标志如:[, {, }, ],这4个标志可以相对于前一个及后一个兄弟窗口,但是有时候希望相对于不是前后窗口的兄弟窗口,比如一个通过一个中心窗口同时定义它的上下左右4个窗口,这个时 ...

最新文章

  1. CVD-ALD前驱体材料
  2. Java 9因模块化进程缓慢而欲推迟发布
  3. 添加和删除行的能力table(能够编辑的表的内容)
  4. java迁移文件下的文件_Laravel迁移 - 一次性多次迁移(文件)
  5. hash_hmac函数使用不当造成的安全问题
  6. JSON字符串转为指定实体类对象
  7. mysql 自增模式 auto,mysql(AUTO_INCREMENT)自增ID的起始值修改与设置
  8. linuxHacks中记载的一些小技巧
  9. SAP Spartacus OccCmsComponentAdapter的findComponentsByIds方法
  10. unity2018关联不到vs_现实VS真爱:远嫁的幸福和悲哀
  11. Java三层结构的概念_Java中的mvc和三层结构究竟是什么关系
  12. 【Python-3.5】Pygal模拟骰子点数,分析结果可视化
  13. 操作元素之修改元素属性
  14. 鸿蒙系统微信红包,鸿蒙道红包版
  15. 学以致用------韩顺平老师说(如果不能学以致用,那就是白费。等于没学。贪多嚼不烂。)---无内容...
  16. 语言百马百担求马匹数_C语言经典编程题(下)
  17. 计算机交并符号,数学并集符号
  18. 微信小程序源码获取(附工具的下载)
  19. 微星显卡拷机测试软件,显卡稳定性测试必备 微星Kombustor工具
  20. 平面、柱面、球面投影

热门文章

  1. android调用百度地图实现地理围栏
  2. android歌词跟随手势滑动,Android实现跟随手指拖动并自动贴边的View样式(实例demo)...
  3. java技术--服务注册中心
  4. python中readlines_python文件读取 readlines()方法之坑
  5. webpack-HMR-热更新
  6. centos 下载 dpkg
  7. OpenCore(OC)引导开机声音与图形界面设置
  8. 一个计算机专业学生几年的编程经验汇总(好文要转)
  9. 《AUTOSAR谱系分解(ETAS工具链)》之Ecus
  10. NHibernate冷知识一则——自动修补空属性的缺省值