(转载请注明出处)
这节就来一个简单的自定义特效作为概念的入门。
首先需要头文件
#include <d2d1effectauthor.h>
#include <d2d1effecthelpers.h>
为了实现一个自定义的D2D特效,需要继承 ID2D1EffectImpl并实现其接口。
好了,这里因为仅仅是介绍一下概念,所以这次的自定义特效就定为下阴影吧,微软也是这么干的。
实现就用现成的,因为特效的输入也能是特效。
Transform: 暂时称为"转变"吧,一个转变表示对图像进行一次操作
Transform Graph: 暂时称为"转变逻辑图"吧 就是将各个转变组织起来的顺序,因为特效是单输出多输入的,
所以内部应该是树
之前一节我们知道利用一个GUID即可创建一个特效,所以之前我们应该注册特效:
使用ID2D1Factory1::RegisterEffectFromString进行特效注册
参数1: 需要注册的自定义GUID
参数2: 一个XML字符串,用来形容本效果
参数3: 绑定的控制变量数组
参数4: 数组长度
参数5: 创建对象对调函数的指针,建议是私有化的静态成员方法
生成GUID的工具VS Express for Windows Desktop自带了。
工具-创建GUID
即可创建一个GUID。使用DEFINE_GUID的话,建议尽可能的推迟"initguid.h"文件的包含地点,否则会链接失败
一个XML的例子如下:
// 第一行不能有\n不知道是不是bug
const WCHAR* pszXml = LR"xml(<?xml version = "1.0" ?>
<Effect>
<!--系统属性 请注意 name不支持汉字-->
<Property name = "DisplayName" type = "string" value = "下阴影效果" />
<Property name = "Author" type = "string" value