精华内容
下载资源
问答
  • nodejs-fft-windowing是一个模块,它将应用于数据数组,使其准备进行。 很好地介绍了为什么开窗功能很有用。 安装 如果已安装 ,请运行: npm install fft-windowing 用法 是一个很好的通用窗口。 您可以这样使用...
  • YZ Windowing System-开源

    2021-08-04 09:19:26
    一个相当轻量级的图形/窗口库。 目前 libyz 要么通过 linux 中的内核模块运行,要么在 MacOS 工具箱之上运行。 编写 libyz 以在其他窗口库(例如 MS-Windows)或 Gno 内部运行会很简单
  • 详细分析FFT和加窗的用处。详细分析FFT和加窗的用处。Understanding FFTs and Windowing
  • FAILED: SemanticException Failed to breakup Windowing invocations into Groups. At least 1 group must only depend on input columns. Also check for circular dependencies. 我的代码如下(这里举个例子,...

    今天使用Hive时候,由于自己的大意,使得代码报错,报错如下:

    FAILED: SemanticException Failed to breakup Windowing invocations into Groups. 
    At least 1 group must only depend on input columns. 
    Also check for circular dependencies.
    

    我的代码如下(这里举个例子,没有用源代码):

    select
    	id,
    	settle_month,
    	rate,
    	rank() over(partition by settle_day order by rate desc) as flag
    from
    	tableTest
    where
    	....
    

    就是上面这段代码,报错了,刚开始粗略的检查了一下代码,然后没发现问题,就去百度了,结果百度了十来分钟都没找到合适的解决方法,就当无语的时候,发现原来是因为我窗口函数里面partition by后面的字段写错了,应该是settle_month,而我写成了settle_day,改了之后就好了。

    希望可以帮到你,码字不易,喜欢请点赞!!!

    展开全文
  • 然而目前业界并没有对windowing作出标准的定义和分类,不同计算框架提供的windowing方法各有不同,同一术语在不同框架的含义也不一致,这给流式计算造成了不必要的学习成本。因此本文试图从工作积累出发并结合个人...

    原文链接:

    http://www.whitewood.me/2018/03/21/%E6%B5%81%E5%BC%8F%E8%AE%A1%E7%AE%97%E7%9A%84windowing/

    整理:大数据肌肉猿(BigData-BigMuscle)

    作为对流式数据流进行stateful统计的基础,window函数是各流式计算框架必不可少的特性。然而目前业界并没有对windowing作出标准的定义和分类,不同计算框架提供的windowing方法各有不同,同一术语在不同框架的含义也不一致,这给流式计算造成了不必要的学习成本。因此本文试图从工作积累出发并结合个人理解,总结出较为全面的windowing概念以及常见策略。

    windowing概念

    因为实时数据流是永不停歇的,我们无法获取所有的数据并产出一个最终的结果。更重要的是很多情况下我们更关心的是最近的状态,而不是从实时数据流启动至今的统计数据。所以我们将数据流切分为一个个片段,即计算窗口,比如最近5分钟或最近100条消息,然后在每个窗口的基础上进行统计,这种计算方式就是windowing。总而言之,windowing是将无边界的实时数据流划分为计算窗口的统计手段。通常window函数会配合groupby函数一起使用,即作用于grouped stream上。

    windowing策略

    Windowing策略从对象指标上分为3种,即基于时间(time window),基于计数(count window)以及基于会话(session window),其中基于时间和基于的windowing又可以分为滚动窗口(tumbling window)和滑动窗口(sliding window)。其中与时间相关的windowing,计算间隔(step)与统计窗口(window)的关系如下:

    window分类(count-based和time-based相似)

    时间窗口

    时间窗口顾名思义是根据时间来划分窗口,然而这里的时间是有所讲究的,总体来讲可以分为以下三种:

    • 事件时间(event time):消息所代表事件的业务时间,依赖于数据本身

    • 消化时间(ingestion time):消息到达计算引擎的时间

    • 处理时间(processing time):消息被实际处理的时间

    根据业务需求不同用户可以灵活采用时间口径。事件时间最为有用但处理最为复杂,因为消息有可能乱序到达甚至迟到,所以我们不能保证在合理的时间窗口内收集到所有的事件。处理时间容易处理一些,因为消息窗口起始结束时间都由服务端控制,但对业务的价值比较小。

    滚动时间窗口

    滚动窗口是最为简单的windowing策略,实际上离线计算从某种程度上就属于滚动窗口。滚动窗口的特点是计算间隔与统计窗口相等,任意两次计算的数据没有重叠部分(non-overlapping),因此每次计算只需要考虑前一次计算间隔对应的数据,不需要维持跨计算间隔的数据或状态。

    滑动时间窗口

    滑动窗口的概念借鉴自TCP,一般统计窗口大于计算间隔,因此连续的两次计算间有重叠(overlapping),一条记录会出现在ceil(统计窗口/计算间隔)个统计窗口里。从图上来看就像统计窗口随着数据流滑动,每次滑动的步长就是计算间隔。实时计算中很大部分指标都应用了滑动窗口,例如监控中常见的qps/tps或者搜索引擎近24小时的热搜关键词。实际上滚动窗口也是滑动窗口的一个特例。

    计数窗口

    滚动计数窗口与滑动计数机制类似于上文两种窗口,区别仅在于用于划分边界的指标不是时间而是当前未处理的记录数。计数窗口不如时间窗口直观,但更适合数据量较小或在时间上分布不均匀的数据流。比如广告系统可能一天会展示10000次某个广告,不过时间并不固定而是通过用户画像判断是否应该展示,这时最近1000次展示的购买率则比最近1小时的购买率更有意义。

    会话窗口

    会话窗口是比较特殊的一类windowing策略,它基于时间间隔来划分窗口。会话窗口没有固定的大小或起始结束时间,而是动态地打开和关闭窗口。当收到消息时判断当前是否有会话,若有则并入当前会话,否则新建一个会话,一个会话超过一定时长没有新的消息则会关闭。其中值得注意的地方是由于会话的判断基于时间,这里也涉及到上文所说的三种时间的区别。如果基于处理时间,那么消息一定有序的,但如果基于事件时间和消化时间,消息可能是乱序的,这样可能遇到已经关闭的窗口被重新打开,甚至和下一个窗口合并的情况,具体决定于处理迟到记录的策略。

    总结

    尽管不同计算引擎的提供的window API有所差异,但其背后的策略都是相似的。在享受window函数带来的便捷的同时,更重要的是考虑如何持续化和恢复计算状态,会不会带来数据丢失或数据重复的潜在问题。

     

    展开全文
  • 1.Windowing functions LEAD(col,n,DEFAULT)   统计 窗口内分组排序后每组 往下第n行某列的值。col为列名,n为往下第n行(可选,默认为1),DEFAULT为默认值(当往下第n行为NULL时候,取默认值,如不指定,则...

    窗口函数是最后执行,仅在order by之前。

    创建表用于测试

    USE sid;
    
    CREATE TABLE buy_record(
    id INT COMMENT'购买记录id',
    user_name STRING COMMENT'用户名',
    buy_date STRING COMMENT'购买日期',
    goods_id INT COMMENT'商品id',
    price DOUBLE COMMENT'商品价格'
    )COMMENT '商品购买记录表' 
    STORED AS PARQUET;
    
    CREATE TABLE user_access_log(
        user_name STRING COMMENT'用户名',
        time STRING COMMENT'访问时间',
        url STRING COMMENT'访问URL'
    )COMMENT '用户访问URL日志' 
    STORED AS PARQUET;

    插入测试数据

    INSERT INTO TABLE buy_record
      VALUES (1, 'sid', '20180701',5,128), 
    (2, 'sid', '20180701',4,20), 
    (3, 'sid', '20180701',5,128), 
    (4, 'sid', '20180721',5,128), 
    (5, 'sid', '20180721',3,40), 
    (6, 'zhangsan', '20180701',5,128), 
    (7, 'zhangsan', '20180701',4,20), 
    (8, 'zhangsan', '20180721',3,40), 
    (9, 'lisi', '20180711',5,128), 
    (10, 'lisi', '20180711',4,20);
    
    INSERT INTO TABLE user_access_log
    VALUES ('sid', '2018-07-01 01:10:00','URL1'), 
    ('sid', '2018-07-01 01:15:00','URL2'), 
    ('sid', '2018-07-01 01:12:00','URL3'), 
    ('sid', '2018-07-21 01:13:00','URL4'), 
    ('sid', '2018-07-21 01:18:00','URL5'), 
    ('zhangsan', '2018-07-01 01:20:00','URL1'), 
    ('zhangsan', '2018-07-01 01:25:00','URL2'), 
    ('zhangsan', '2018-07-21 01:22:00','URL3'), 
    ('lisi', '2018-07-11 01:10:00','URL1'), 
    ('lisi', '2018-07-11 01:10:40','URL2');
    select * from buy_record;
    
    1	sid	20180701	5	128.0
    2	sid	20180701	4	20.0
    3	sid	20180701	5	128.0
    4	sid	20180721	5	128.0
    5	sid	20180721	3	40.0
    6	zhangsan	20180701	5	128.0
    7	zhangsan	20180701	4	20.0
    8	zhangsan	20180721	3	40.0
    9	lisi	20180711	5	128.0
    10	lisi	20180711	4	20.0
    
    
    select * from user_access_log;
    
    sid	2018-07-01 01:10:00	URL1
    sid	2018-07-01 01:15:00	URL2
    sid	2018-07-01 01:12:00	URL3
    sid	2018-07-21 01:13:00	URL4
    sid	2018-07-21 01:18:00	URL5
    zhangsan	2018-07-01 01:20:00	URL1
    zhangsan	2018-07-01 01:25:00	URL2
    zhangsan	2018-07-21 01:22:00	URL3
    lisi	2018-07-11 01:10:00	URL1
    lisi	2018-07-11 01:10:40	URL2
    

    1.Windowing functions

    LEAD(col,n,DEFAULT)

     统计窗口内分组排序后每组往下第n行某列的值。col为列名,n为往下第n行(可选,默认为1),DEFAULT为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL)

    需求:用户访问日志表,统计每个用户访问每个URL停留时间

    select user_name,
           time stime,
           lead(time) over(partition by user_name order by time) etime,
           UNIX_TIMESTAMP(lead(time) over(partition by user_name order by time),'yyyy-MM-dd HH:mm:ss')- UNIX_TIMESTAMP(time,'yyyy-MM-dd HH:mm:ss') period,
           url 
      from user_access_log;
    

    stime,是开始访问URL的时间,etime是访问下一个url的时间。etime用over开窗口,窗口内以用户名分组按时间拍升序,所以lead(time) 就是该用户访问下一个URL的时间。

    lisi	2018-07-11 01:10:00	2018-07-11 01:10:40	40	URL1
    lisi	2018-07-11 01:10:40	NULL	NULL	URL2
    sid	2018-07-01 01:10:00	2018-07-01 01:12:00	120	URL1
    sid	2018-07-01 01:12:00	2018-07-01 01:15:00	180	URL3
    sid	2018-07-01 01:15:00	2018-07-21 01:13:00	1727880	URL2
    sid	2018-07-21 01:13:00	2018-07-21 01:18:00	300	URL4
    sid	2018-07-21 01:18:00	NULL	NULL	URL5
    zhangsan	2018-07-01 01:20:00	2018-07-01 01:25:00	300	URL1
    zhangsan	2018-07-01 01:25:00	2018-07-21 01:22:00	1727820	URL2
    zhangsan	2018-07-21 01:22:00	NULL	NULL	URL3
    

    LAG(col,n,DEFAULT)

    用于统计窗口内分组排序后每组当前记录往上第n行某列的值,col为列名,n为往上第n行(可选,默认为1),DEFAULT为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)

    select user_name,
           time time,
           LAG(time) over(partition by user_name order by time) last1_time,
           LAG(time,2) over(partition by user_name order by time) last2_time
      from user_access_log;

    结果

    lisi	2018-07-11 01:10:00	NULL	NULL
    lisi	2018-07-11 01:10:40	2018-07-11 01:10:00	NULL
    sid	2018-07-01 01:10:00	NULL	NULL
    sid	2018-07-01 01:12:00	2018-07-01 01:10:00	NULL
    sid	2018-07-01 01:15:00	2018-07-01 01:12:00	2018-07-01 01:10:00
    sid	2018-07-21 01:13:00	2018-07-01 01:15:00	2018-07-01 01:12:00
    sid	2018-07-21 01:18:00	2018-07-21 01:13:00	2018-07-01 01:15:00
    zhangsan	2018-07-01 01:20:00	NULL	NULL
    zhangsan	2018-07-01 01:25:00	2018-07-01 01:20:00	NULL
    zhangsan	2018-07-21 01:22:00	2018-07-01 01:25:00	2018-07-01 01:20:00
    

    FIRST_VALUE

    用于统计窗口内分组排序后每组排第一的行某列的值

    LAST_VALUE

    用于统计窗口内分组排序后每组截止到当前行排最后的行某列的值

    select user_name,
           time time,
           first_value(time) over(partition by user_name order by time) firsttime,
           last_value(time) over(partition by user_name order by time) last_time
      from user_access_log;

    结果

    名字                    访问时间                          fisrt_value                   last_value
    lisi                2018-07-11 01:10:00        2018-07-11 01:10:00    2018-07-11 01:10:00
    lisi                2018-07-11 01:10:40        2018-07-11 01:10:00    2018-07-11 01:10:40
    sid                2018-07-01 01:10:00        2018-07-01 01:10:00    2018-07-01 01:10:00
    sid                2018-07-01 01:12:00        2018-07-01 01:10:00    2018-07-01 01:12:00
    sid                2018-07-01 01:15:00        2018-07-01 01:10:00    2018-07-01 01:15:00
    sid                2018-07-21 01:13:00        2018-07-01 01:10:00    2018-07-21 01:13:00
    sid                2018-07-21 01:18:00        2018-07-01 01:10:00    2018-07-21 01:18:00
    zhangsan     2018-07-01 01:20:00        2018-07-01 01:20:00    2018-07-01 01:20:00
    zhangsan     2018-07-01 01:25:00        2018-07-01 01:20:00    2018-07-01 01:25:00
    zhangsan     2018-07-21 01:22:00        2018-07-01 01:20:00    2018-07-21 01:22:00

    2.The OVER clause

    OVER with a PARTITION BY见上面的几个例子,这个功能和group by很像,但是不会按by后面的字段去重。

    OVER with PARTITION BY and ORDER BY 分组内排序。

    3.Windowing 子句

    (ROWS | RANGE) BETWEEN (UNBOUNDED | [num]) PRECEDING AND ([num] PRECEDING | CURRENT ROW | (UNBOUNDED | [num]) FOLLOWING)
    (ROWS | RANGE) BETWEEN CURRENT ROW AND (CURRENT ROW | (UNBOUNDED | [num]) FOLLOWING)
    (ROWS | RANGE) BETWEEN [num] FOLLOWING AND (UNBOUNDED | [num]) FOLLOWING

    如果只使用partition by子句,未指定order by的话,我们的聚合是分组内的聚合。
    使用了order by子句,未使用window子句的情况下,默认聚合是从起点到当前行。

    当同一个select查询中存在多个窗口函数时,他们相互之间是没有影响的.每个窗口函数应用自己的规则。 
     PRECEDING:往前 
     FOLLOWING:往后 
     CURRENT ROW:当前行 
     UNBOUNDED:起点

    UNBOUNDED PRECEDING 表示从前面的起点

    UNBOUNDED FOLLOWING:表示到后面的终点

    select id,user_name,buy_date,price,
    sum(price) over() as sample1,--所有行相加
    sum(price) over(partition by user_name) as sample2,--按name分组,组内数据相加
    sum(price) over(partition by user_name order by buy_date) as sample3,--按name分组,组内数据累加
    sum(price) over(partition by user_name order by buy_date rows between UNBOUNDED PRECEDING and current row )  as sample4 ,--和sample3一样,由起点到当前行的聚合
    sum(price) over(partition by user_name order by buy_date rows between 1 PRECEDING   and current row) as sample5, --当前行和前面一行做聚合
    sum(price) over(partition by user_name order by buy_date rows between 1 PRECEDING   AND 1 FOLLOWING  ) as sample6,--当前行和前边一行及后面一行
    sum(price) over(partition by user_name order by buy_date rows between current row and UNBOUNDED FOLLOWING ) as sample7 --当前行及后面所有行
    from buy_record;

    id    name          buy_date       s1         s2         s3         s4         s5         s6          s7          s8

    10    lisi              20180711    20.0      780.0    148.0    148.0    20.0      20.0      148.0    148.0
    9      lisi              20180711    128.0    780.0    148.0    148.0    148.0    148.0    148.0    128.0
    3      sid             20180701    128.0     780.0    444.0    276.0    128.0    128.0    148.0    444.0
    2      sid             20180701     20.0      780.0    444.0    276.0    148.0    148.0    276.0    316.0
    1      sid             20180701    128.0     780.0    444.0    276.0    276.0    148.0    188.0    296.0
    5      sid             20180721     40.0      780.0    444.0    444.0    316.0    168.0    296.0    168.0
    4      sid             20180721     128.0    780.0    444.0    444.0    444.0    168.0    168.0    128.0
    7    zhangsan    20180701     20.0      780.0    188.0    148.0    20.0       20.0     148.0    188.0
    6    zhangsan    20180701     128.0    780.0    188.0    148.0    148.0    148.0    188.0    168.0
    8    zhangsan    20180721     40.0      780.0    188.0    188.0    188.0    168.0    168.0    40.0

    对比lag lead first_value last_value函数,这些只是取前后几行的列值,而window子查询可以对前后几行做聚合。

    4.Analytics functions

    ROW_NUMBER()从1开始,按照顺序,生成分组内记录的序列,row_number()的值不会存在重复,当排序的值相同时,按照表中记录的顺序进行排列 

    RANK() 生成数据项在分组中的排名,排名相等会在名次中留下空位 
    DENSE_RANK() 生成数据项在分组中的排名,排名相等会在名次中不会留下空位

    SELECT 
    user_name,
    buy_date,
    price,
    RANK() OVER(PARTITION BY user_name ORDER BY price DESC) AS rn1,
    DENSE_RANK() OVER(PARTITION BY user_name ORDER BY price DESC) AS rn2,
    PERCENT_RANK() OVER(PARTITION BY user_name ORDER BY price DESC) AS rn3,
    ROW_NUMBER() OVER(PARTITION BY user_name ORDER BY price DESC) AS rn4 
    FROM buy_record;

    name            buy_date    price     rn1 rn2  rn3    rn4

    lisi                20180711     128.0    1    1    0.0     1
    lisi                20180711     20.0      2    2    1.0      2
    sid               20180721     128.0    1    1    0.0      1
    sid               20180701     128.0    1    1    0.0      2
    sid               20180701     128.0    1    1    0.0      3
    sid               20180721     40.0      4    2    0.75    4
    sid               20180701     20.0      5    3    1.0      5
    zhangsan    20180701     128.0    1    1    0.0      1
    zhangsan    20180721     40.0      2    2    0.5      2
    zhangsan    20180701     20.0      3    3    1.0      3

    NTILE

    把分组内数据切片,比如ntile(3)分组内数据切成3片。

    NTILE不支持ROWS BETWEEN, 
    比如 NTILE(2) OVER(PARTITION BY cookieid ORDER BY createtime ROWS BETWEEN 3 PRECEDING AND CURRENT ROW)

    如果切片不均匀,默认增加第一个切片的分布。

    select id,user_name,buy_date,price,
           ntile(3) over() as sample1 , --全局数据切片
           ntile(3) over(partition by user_name), -- 按照user_name进行分组,在分组内将数据切成3份
           ntile(3) over(order by price),--全局按照price升序排列,数据切成3份
           ntile(3) over(partition by user_name order by price) --按照name分组,在分组内按照cost升序排列,数据切成3份
    from buy_record;

    10    lisi               20180711    20.0      1    2    1    1
    9      lisi               20180711    128.0    1    1    3    2
    2      sid               20180701    20.0      3    1    1    1
    5      sid               20180721    40.0      2    3    2    1
    1      sid               20180701    128.0    3    1    3    2
    3      sid               20180701    128.0    3    2    3    2
    4      sid               20180721    128.0    2    2    2    3
    7      zhangsan    20180701    20.0      1    2    1    1
    8      zhangsan    20180721    40.0      1    3    1    2
    6      zhangsan    20180701    128.0    2    1    2    3

    展开全文
  • DFT的matlab源代码windowing_DFT 一些脚本来解释DFT的频谱泄漏和加窗功能
  • 因为用到了开窗函数,然后SQL语句有遇到问题,导致hive报错:SemanticException Failed to breakup windowing invocations into Groups At least l group must only depend on input columns. ** 我遇到的情况是因为...

    **
    因为用到了开窗函数,然后SQL语句有遇到问题,导致hive报错:SemanticException Failed to breakup windowing invocations into Groups
    At least l group must only depend on input columns.
    **
    我遇到的情况是因为少写了一个from关键字。

    展开全文
  • 医学图像预处理(三)——windowing(ct对比增强)

    万次阅读 多人点赞 2019-03-07 17:06:25
    Windowing, also known as grey-level mapping, contrast stretching, histogram modification or contrast enhancement is the process in which the CT image greyscale component of an image is manipulated via...
  • windowing-test-源码

    2021-06-13 12:15:22
    加窗测试 此自述文件概述了在此 Ember 应用程序上进行协作的详细信息。 这个应用程序的简短介绍可以很容易地转到这里。 先决条件 您将需要在您的计算机上正确安装以下东西。 (带有 NPM) 安装 ...
  • A cooperative model for Ca++ efflux windowing from cell membranes exposed to electromagnetic radiation Bioelectromagnetics 21:455^464 (2000) ACooperative Model for Ca�� Efflux Windowing From Cell...
  • [react] 说说你对windowing的了解 展示长列表 如果你的应用会渲染大量的列表数据,我们建议使用一种称为‘windowing’的技术,这种技术下在任何给定的时间内只会渲染一小部分数据列表,并可以减少列表项的重复渲染...
  • Oracle的分析函数,对我们进行统计有很大的帮助,可以避免一些子查询等操作,在统计中,我们对开窗函数的接触较少,下面主要...http://www.oracle-base.com/articles/misc/analytic-functions.php#windowing_clause...
  • HIve 分析和窗口函数 WindowingAndAnalytics 常见的GROUP BY 和 DISTRIBUTE BY 等语句并不能支持诸如分组排名、滑动平均值等计算,原因是 GROUP BY 语句只能为每个分组的数据返回一条记录,而非每条数据一行。但是...
  • QWL是一种简单而完整的语言,用于快速构建配置样式程序的GUI,与Linux内核的xconfig一样。
  • * 用windowing * * */ // val rankSpec = Window.partitionBy("age").orderBy(df("salary").desc) /* * 要用dense_rank() 要引入sql.functions._ * */ val sararyRank = df.withColumn("rank",dense_rank()...
  • WABawt是一个Java抽象窗口工具箱库,用于servlet的使用。 WABawt在服务器屏幕上不显示任何窗口,它生成html输出,该输出在html页面内部绘制窗口和控件。
  • PyWIRLD开始作为远程ppp拨号程序。 它将能够从单个客户端管理多台计算机,监视和控制网络接口,并具有可通过动态加载的插件使用的所有功能。
  • C ++中用户友好的面向Win32的对象API。 基于容器的系统。 包括插座。 打算成为可移植的API。
  • OpenGL面向对象的窗口环境为开发OpenGL项目提供了C ++ OO基础,并为您提供了所有常用的小部件(按钮等)和窗口框架。 有利于跨平台开发。
  • visible light communication (VLC) system using orthogonal frequency division multiplexing (OFDM) modulation and an adaptive Nyquist windowing of the OFDM signal in the receiver. Based on this ...
  • CG-windowing query

    2019-03-14 08:41:35
    More Geometric Data Structures-windowing query (更多几何数据结构:截窗) 文章目录More Geometric Data Structures-windowing query10.1 Interval Trees(区间树)Lemma 10.1Data structure of interval ...
  • Eiffel窗口系统是一个小的Eiffel库,提供基于SDL的窗口系统(以及将来可能的其他前端)。
  • Oracle分析函数 OVER(PARTITION ORDER WINDOWING)(二)—— 类聚合函数用法
  • Windowing Functions In Hive

    2017-12-14 16:42:20
    感谢分享原文:https://acadgild.com/blog/windowing-functions-in-hive/...Windowing allows you to create a window on a set of data further allowing aggregation surrounding that data. Windowing in Hive is i
  • 按照纬度:分为时间窗口和计数窗口 1.时间窗口TimeWindow:比如要计算最近1个小时之内的数据,这就需要时间窗口 2.计数窗口CountWindow:比如要计算最近50个数据,这就需要计数窗口 按照类型:滚动窗口和滑动窗口...
  • kuroiUI(日语为“ darkUI”)是基于C ++类的库,用于将基于Windows窗体的控件(例如,窗口,按钮,复选框等)添加到基于SDL的项目中。 它旨在交叉编译到SDL支持的大多数OS(请参见www.libsdl.org)。
  • 封装 Win32 API 编程元素的类库。 该库提供了一组 C++ 类来减少编写本机 Windows 应用程序所需的代码量,无需对核心 Win32 API 进行抽象,也无需任何
  • 完全使用CSS和JavaScript编写的Web WT完全可插拔和可自定义的开源多文档接口桌面系统。 它轻巧且具有组件性,已与Web MT结合在一起,并已被Think Online Web Desktop for HTML取代。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,138
精华内容 4,055
关键字:

windowing

友情链接: phpenv2.1.rar