分离SOUI中的skia_render给duilib用。

不知道何时有这个一个开源的UI库,叫soui。一直加在群里面,比较少说话。这不项目时间太忙吧,苦逼的as3终于写完了,看起来娱乐和游戏直播都是正常的了,就等上线了,也就没我啥事了,这不,今天还在加班,说好的只加两个月的周六的哦,不过来这两个月,反反复复的事情太多了,习惯了。。

这段时间都在上班,没时间看soui,上星期天在家看了一下,发现它分离得还是比较的彻底,于是打将将soui中的skia-render剥出来给duilib用。

可能我本来用c++的高级的东西不多,这个库里面太多模板和高级c++的东西。一看就让人不想看下去了。我想大家看了ACE的代码也会有同感吧。当年就是实在看不下去了。所以才没深入了解ACE的实现。而duilib就好多了,小巧得很,代码量小,结构非常清晰,扩展起来非常方便。

说了这么多,那么最终还是剥出来了,然后用win32 api写了一个例子。等有需要再合并到duilib中吧,相信关键的东西都有了,有了这,应该有比我不懒的朋友合并到duilib中吧,哈哈.

例子在这里,包括skia-render,skia-gdi,image-decoder,以及win32 api使用它例子的所有源码。我去掉了skia-render里面的预编绎,这些高级的东西,我不怎么喜欢用。。。

因为考虑到win32 api写的话比较简洁清晰,所以使用了win32 api

时间: 2024-11-21 05:59:44

分离SOUI中的skia_render给duilib用。的相关文章

第五篇:在SOUI中使用XML布局窗口

窗口布局的概念 每一个UI都是由大量的界面元素构成的,在Windows编程,这些界面元素的最小单位通常称之为控件. 布局就是这些控件在主界面上的大小及相对位置. 传统的布局一般使用一个4个绝对坐标来定义一个控件在主窗口的位置.对于窗口是固定大小的界面来说,这种方式是最简单有效的. 然而问题在于在Windows系统上编程,基本上很少有程序的窗口是固定大小的,用户希望它的窗口能够随时调整大小.调整大小后界面里的控件还能够按照一定的规则进行重排. 我自己最讨厌的就是在WM_SIZE里重排控件位置. 随

第二十五篇:在SOUI中做事件分发处理

不同的SOUI控件可以产生不同的事件.SOUI系统中提供了两种事件处理方式:事件订阅 + 事件处理映射表(参见第八篇:SOUI中控件事件的响应) 事件订阅由于直接将事件及事件处理函数连接,不存在事件分发的问题,这里主要介绍使用事件映射表时的事件分发. 在回答这个问题前,首先了解一下什么是事件分发. 在大型项目中,程序逻辑可能非常复杂,如果将所有UI中控件的事件处理集中在一个消息/事件映射表里,代码的可维护性会变得非常差.解决这个问题常见的方法就是将事件进行分类(如根据来源分类),不同类别的事件采

12周(分离正整数中个位数)

/* *copyright(c) 2014,烟台大学计算机学院 *All rights reserved. *文件名称:分离正整数中个位数 *作者:王忠 *完成日期:2014.11.10 *版本号:v1.0 * *问题描述:输入1234,输出4 3 2 1 *输入描述:输入一串数字 *程序输出:分离这组数 #include <iostream> using namespace std; int separate (int); int main() { int m,n; cin>>m

第十五篇:在SOUI中消息通讯

SOUI是一套基于Win32 SDK的窗口开发的一套DirectUI框架.在SOUI中除了有真窗口使用窗口消息通讯机制外,还有SOUI控件之间的通讯,及控件的事件处理等. 1.真窗口消息通讯 因此可以使用::SendMessage这个API来与宿主窗口通讯.在任意一个地方只要获取到了SOUI的宿主窗口句柄就可以向该窗口发消息. 发消息以后可以在主界面的真窗口的消息映射表中响应各种自定义消息(如下): #define WM_MYMSG (WM_USER+100) LRESULT OnMyMsg(U

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

概述 异步通知是客户端开发中常见的需求,比如在一个网络处理线程中要通知UI线程更新等等. 通常在Windows编程中,为了方便,我们一般会向UI线程的窗口句柄Post/Send一个窗口消息从而达到将非UI线程的事件切换到UI线程处理的目的. 在SOUI引入通知中心以前要在SOUI中处理非UI线程事件我也推荐用上面的方法. 使用窗口消息至少有以下两个不足: 1.需要在线程中持有一个窗口句柄. 2.发出的消息只能在该窗口句柄的消息处理函数里处理. SNotifyCenter 最新的SOUI引入了一个

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

像写网页一样做客户端界面可能是很多客户端开发的理想. 做好一个可以实现和用户交互的动态网页应该包含两个部分:使用html做网页的布局,使用脚本如vbscript,javascript做用户交互的逻辑.当需求变化时,只需要在服务端把相关代码调整一下,用户即可看到新的内容(界面). 传统的客户端程序开发流程和网页开发可能完全不同. 首先是界面的布局,在老式的界面布局过程中,程序员先在界面上放好各种控件,然后需要自己通过相应的代码来维护界面在不同状态下控件的显示状态及位置.当界面中元素很多时,单纯布局

第十八篇:在SOUI中实现PreTranslateMessage

在MFC中,通常可以通过重载CWnd::PreTranslateMessage这样一个虚函数来实现对一些窗口消息的预处理.多用于tooltip的显示控制. 在SOUI中也实现了类似的机制. 要在SOUI中实现PreTranslateMessage,我们首先需要实现一个接口: struct IMessageFilter { virtual BOOL PreTranslateMessage(MSG* pMsg) = 0; }; 可以看出,实现这个接口和在MFC中重载PreTranslateMessa

第十四篇:在SOUI中使用定时器

前言 定时器是win32编程中常用的制作动画效果的手段.在Win32编程中,可以使用::SetTimer来创建定时器,定时器消息会被会发到调用SetTimer时指定的HWND. 在SOUI中一般来说只有一个宿主窗口有HWND,所有的SWindow都属于一个宿主窗口,如此一来直接使用::SetTimer创建的定时器就难以直接分发到SWindow对象了. 在SOUI的控件中使用定时器 为了能够方便的在SWindow中使用定时器,在SOUI系统中,我们通过将定时器ID(共32位)按位进行分解: cla

第二十二篇:在SOUI中使用代码向窗口中插入子窗口

使用SOUI开发客户端UI程序,通常也推荐使用XML代码来创建窗口,这样创建的窗口使用方便,当窗口大小改变时,内部的子窗口也更容易协同变化. 但是最近不断有网友咨询如何使用代码来创建SOUI子窗口,特此在这里统一解答. 要回答这个问题,首先要了解SOUI窗口创建及布局的流程. 先从swnd.cpp里抄一段创建子窗口的代码: 1 BOOL SWindow::CreateChildren(pugi::xml_node xmlNode) 2 { 3 TestMainThread(); 4 for (p