SOUI中SRealWnd的使用
这里做一个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 ¶m=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 ¶m=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的使用相关推荐
- 第三十四篇:在SOUI中使用异步通知
概述 异步通知是客户端开发中常见的需求,比如在一个网络处理线程中要通知UI线程更新等等. 通常在Windows编程中,为了方便,我们一般会向UI线程的窗口句柄Post/Send一个窗口消息从而达到将非 ...
- mfc oninitdialog 中的hwnd == null_在SOUI中使用动态多语言切换
动态语言切换是很多国际化产品的需求,SOUI之前的版本支持静态多语言翻译,通过在程序启动时设置好语言翻译模块,在程序中打开的UI都会自动调用该翻译模块进行文字翻译,但是不支持运行进语言切换. 最近几个 ...
- 在SOUI中使用线性布局
SOUI 2.5.1.1开始支持线性布局(LinearLayout). 要在SOUI布局中使用线性布局, 需要在布局容器窗口里指定布局类型为vbox | hbox, (vbox为垂直线性布局, hbo ...
- 第二十三篇:在SOUI中使用LUA脚本开发界面
像写网页一样做客户端界面可能是很多客户端开发的理想. 做好一个可以实现和用户交互的动态网页应该包含两个部分:使用html做网页的布局,使用脚本如vbscript,javascript做用户交互的逻辑. ...
- 拓展SOUI中SImRichEdit控件的视频OLE控件(VideoOle)
视频定位控件数据可分为两部分: 可见部分:播放按钮.加载按钮.视频第一帧图片.视频时长 不可见部分:视频URL 以下为VideoOle控件头文件部分: extern "C" con ...
- soui中apng 图像解码器解码图片后像素格式研究
soui是一个非常牛逼的界面库,里面对图片透明有着很好的支持,这也是我喜欢soui的一个重要原因.soui中不仅可以设置主窗口半透明,而且还可以设置soui子窗口半透明,两者的设置都非常的简单.只需要 ...
- SOUI中ListCtrl的自绘
一些知识的补充: /* 2018-12-14 14:32:42 单项选择设置背景色 ListCtrl */ 通过重写ListCtrl加入部分属性 详细代码参照ListCtrlex 核心思想: 通过记录 ...
- SOUI中屏蔽右键菜单
目前SOUI里只有文本控件有右键菜单.但是一般来说可能都不需要它显示.即使要显示可能也需要美化一下之类的.下面就介绍如何处理它. 第一步:在事件处理加上处理所有控件的右键事件. EVENT_MAP_B ...
- 第三十一篇:SOUI布局之相对于特定兄弟窗口
SOUI中通过pos的标志如:[, {, }, ],这4个标志可以相对于前一个及后一个兄弟窗口,但是有时候希望相对于不是前后窗口的兄弟窗口,比如一个通过一个中心窗口同时定义它的上下左右4个窗口,这个时 ...
最新文章
- CVD-ALD前驱体材料
- Java 9因模块化进程缓慢而欲推迟发布
- 添加和删除行的能力table(能够编辑的表的内容)
- java迁移文件下的文件_Laravel迁移 - 一次性多次迁移(文件)
- hash_hmac函数使用不当造成的安全问题
- JSON字符串转为指定实体类对象
- mysql 自增模式 auto,mysql(AUTO_INCREMENT)自增ID的起始值修改与设置
- linuxHacks中记载的一些小技巧
- SAP Spartacus OccCmsComponentAdapter的findComponentsByIds方法
- unity2018关联不到vs_现实VS真爱:远嫁的幸福和悲哀
- Java三层结构的概念_Java中的mvc和三层结构究竟是什么关系
- 【Python-3.5】Pygal模拟骰子点数,分析结果可视化
- 操作元素之修改元素属性
- 鸿蒙系统微信红包,鸿蒙道红包版
- 学以致用------韩顺平老师说(如果不能学以致用,那就是白费。等于没学。贪多嚼不烂。)---无内容...
- 语言百马百担求马匹数_C语言经典编程题(下)
- 计算机交并符号,数学并集符号
- 微信小程序源码获取(附工具的下载)
- 微星显卡拷机测试软件,显卡稳定性测试必备 微星Kombustor工具
- 平面、柱面、球面投影
热门文章
- android调用百度地图实现地理围栏
- android歌词跟随手势滑动,Android实现跟随手指拖动并自动贴边的View样式(实例demo)...
- java技术--服务注册中心
- python中readlines_python文件读取 readlines()方法之坑
- webpack-HMR-热更新
- centos 下载 dpkg
- OpenCore(OC)引导开机声音与图形界面设置
- 一个计算机专业学生几年的编程经验汇总(好文要转)
- 《AUTOSAR谱系分解(ETAS工具链)》之Ecus
- NHibernate冷知识一则——自动修补空属性的缺省值