duilib作为播放器的ui嵌入到mfc中使用

0、前言

之前看到某位大牛的仿迅雷播放器的教程,他有三个系列的文章:duilib入门简明教程(20讲)、duilib(进阶教程17讲)、仿迅雷播放器教程(15讲)

但是可惜的是,前面的两个系列都挺好,利于入门,但是最后的一个却不行了,完全没有解释,需要在了解前面两个教程的前提下,才能读懂最后一个源码的意思

当我在使用最后一个教程源码的时候,出现了一些小问题,比如我在嵌入mfc中使用(真正使用是在ActiveX中)测试的时候,问题出来了:

问题的所在----上面的窗口大小其实是已经按照我设定的大小变化了的,但我只是拉开一下窗口,就恢复成原来的大小了(xml中设置的mininfo),而且可以看到这个窗口根本是拖不到正方形的。

1、原因分析

1、这是因为在xml对整个窗口的大小给固定了,只要我们做一下处理,便可以解决这个问题;

2、有一点很不错的是,在VerticalLayout中的这几个控件使用的是绝对布局,也就是只要我们给这个VerticalLayout一个足够的宽度,他自己就能保持各个按钮之间的距离。唯一不足的地方时,没有给VerticalLayout设置浮动,假如不设置,那他的位置不会保持居中。

3、着手修改

现在我们来做一些修改,让这个窗口按照我们的逻辑来执行:

1、首先播放器的窗口大小,不是根据在xml里边的大小来设置,而应该是通过程序去控制

2、无论我们的大小怎样改变,播放器的按钮都是处在窗口的正中间(当然除了看不到之外)

===================================================================

首先,去掉xml(XMP.xml)中的

<Window size="968,600" sizebox="4,4,4,4" caption="0,0,0,-1" mininfo="600,400">

修改成

<Window sizebox="4,4,4,4" caption="0,0,0,-1">

因为想要中间带有控件的窗体可以浮动,所以对HorizontalLayout要做一下设置:

<HorizontalLayout height="390" float="false">

但我们想HorizontalLayout里面的控件还是进行的绝对定位,所以,我们不去修改控件的float和pos

当然在使用duilib的时候,窗口创建时候,使用:

g_dui_frame_wnd = new CDuiFrameWnd(_T("XMP.xml"));
	g_dui_frame_wnd->Create(g_hwnd, _T("DUIWnd"), UI_WNDSTYLE_CHILD, 0, 0, 0, 0, 0);
	g_dui_frame_wnd->ShowWindow(1);

在mfc窗口的OnSize事件中我们需要设定想要的大小:

hwnd = g_dui_frame_wnd->GetHWND();
		::MoveWindow(hwnd, 0, 0, 400, 400, false);

不过这样之后,你就会发现,你没回拉动mfc的窗口,都会变回400*400,所以你打算不是每次都变回去,那么需要设置一个bool进行判断(只在初始化的时候处理)

4、最终结果

经过修改之后,看看目前是不是已经解决了上面的问题了:

时间: 2024-08-05 02:52:39

duilib作为播放器的ui嵌入到mfc中使用的相关文章

cv::namedWindow, GLFWwindow以及其他程序嵌入到MFC中的教程

cv::namedWindow, GLFWwindow以及其他程序嵌入到MFC中的教程 MFC虽然很老, 不美观, 不跨平台, 但是在Windows系统中, 利用MFC做功能验证的界面, 还是很快很方便的. 因为它老, 所以有很多解决方案可以利用, 因为它是MS提供的界面库, 所以在Windows上很容易实现, 并且和Windows系统结合很紧密. 比如说, 窗口消息等, 在MFC中是很方便实现的. 基于上面的种种原因, 利用MFC作为功能验证的一个"壳" 是很好的工具. 当然, 难免

ckplayer,超酷网页播放器,用于集成在网站中的播放器

自己在工作中做了一个教学网站,点击左边课程,右边播放视频,经过源代码分析,用的就是这个播放器 网址:http://www.ckplayer.com/ 具体使用播放器网站上说的比较明白 div id="flashcontent"></div> <div id="video" style="position:relative;z-index: 100;width:600px;height:400px;"><div 

我的音乐播放器(1)ui界面

我的音乐播放器的UI 布局文件:很简单就是一个ListView展示歌曲的列表, 中间进度条显示歌曲的播放进度,和通过拖动来改变 播放的进度. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_p

c#开发的媒体播放器

在Microsoft Visual C# .NET 中使用 DirectShow 控件,来开发一个媒体播放器.按照本文介绍的操作步骤,您可以创建一个简单 Visual C# 应用程序,用来播放数字音频和视频. 介绍 Microsoft Visual C# 是世界上最流行的编程语言,利用 Visual C# 的最新版本 Visual C# .NET,您能够快速.有效地开发基于 Windows 窗体的应用程序,还可以为嵌入了 Microsoft Windows Media? Player 9 Ser

每天看一片代码系列(三):codepen上一个音乐播放器的实现

今天我们看的是一个使用纯HTML+CSS+JS实现音乐播放器的例子,效果还是很赞的: codePen地址 HTML部分 首先我们要思考一下,一个播放器主要包含哪些元素.首先要有播放的进度信息,还有播放/暂停或者上一首下一首等必要的按钮,同时还要显示一些当前播放的音乐名称等信息.播放多首歌曲时,要显示播放列表...因此,从语义上可以构造出基本的HTML结构: // 背景区块,用于显示当前播放音乐的图片 <div class='background' id='background'></di

基于我们3组的网易云APP制作,找的APlayer H5音乐播放器

APlayer是一个非常漂亮的HTML5音频播放器,UI参考自网易云音乐外链播放器.它将audio标签封装,并结合CSS制作出漂亮的播放器UI,它支持设置歌名.歌手和歌词,可以设置是否自动播放,支持缩略图,支持播放进度以及设置播放源. HTML 首先是要加载播放器样式文件,这个播放器的样式酷似网易云音乐播放器.接着载入APlayer.js文件.然后在body中加入播放器div#player1,用于显示播放.<link rel="stylesheet" href="APl

swift 音乐播放器项目-《lxy的杰伦情歌》开发实战演练

最近准备将项目转化为OC与swift混合开发,试着写一个swift音乐播放器的demo,体会到了swift相对OC的优势所在,废话不多说,先上效果图: ps:身为杰伦的铁粉,demo的主题必须跟杰伦有关,哈哈!而且自我感觉我有转型UI的天赋,有木有? 一.导入OC文件 创建好swift项目之后,导入OC工具类文件,Xcode会自动生成桥接文件 打开这个文件,在开头导入OC工具类的头文件,就可以调用OC工具类了 // // Use this file to import your target's

网上比较常用的播放器设置

我们在网页上看到的播放器无外乎WMP/RealOne/Macromedia Flash Player,其他的无非是面板不同,或者添加了其他控件,对于计算机上安装的一些播放器也都是编码和解码器的整合,其最核心的编码和解码技术是相同的. 例如:网络上最流行的windows media流(asf,wma,wmv格式...),Real流(rm,rmvb...),还有MPEG系列编码格式(MP4/MP3格式...)  Windows Media Video 是微软推出的一种流媒体格式,它是在“同门”的AS

网页在线播放器 &#183;&#183;&#183;&#183;

1.avi格式 <object id="video" width="400" height="200" border="0" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"> <param name="ShowDisplay" value="0"> <param name=&quo