helper EventGadget { typedef UINT (CALLBACK * EventHandler)(void * pvData, EventMsg * pmsg); }; helper Visual { struct VisualCI : public DUser::Gadget::ConstructInfo { Visual * pgvParent; }; inline HRESULT IsVisible(BOOL * pfVisible, UINT nFlags) { return IsParentChainStyle(GS_VISIBLE, pfVisible, nFlags); } inline HRESULT IsEnabled(BOOL * pfEnabled, UINT nFlags) { return IsParentChainStyle(GS_ENABLED, pfEnabled, nFlags); } }; helper Flow { enum ETime { tBegin = 0, tEnd }; struct FlowCI : public DUser::Gadget::ConstructInfo { DWORD cbSize; Visual * pgvSubject; }; }; helper AlphaVertexFlow { static PRID GetPRID() { return DUserGetAlphaVertexPRID(); } struct AlphaKeyFrame : DUser::KeyFrame { BYTE bAlpha; }; }; helper RectFlow { static PRID GetPRID() { return DUserGetRectPRID(); } struct RectKeyFrame : DUser::KeyFrame { UINT nChangeFlags; RECT rcPxl; }; }; helper RotateFlow { enum EDirection { dMin = 0, dShort = 0, // Shortest arc dLong = 1, // Longer arc dCW = 2, // Clock-wise dCCW = 3, // Counter clock-wise dMax = 3, }; static PRID GetPRID() { return DUserGetRotatePRID(); } struct RotateKeyFrame : DUser::KeyFrame { float flRotation; EDirection nDir; }; }; helper ScaleFlow { static PRID GetPRID() { return DUserGetScalePRID(); } struct ScaleKeyFrame : DUser::KeyFrame { UINT nChangeFlags; float flScale; }; }; helper LightFlow { static PRID GetPRID() { return DUserGetLightPRID(); } struct LightKeyFrame : DUser::KeyFrame { UINT id; float x; float y; float z; float xDirection; float yDirection; float zDirection; float outerCone; float innerCone; float attenuationA0; float attenuationA1; float attenuationA2; int flags; }; }; helper Sequence { struct AnimationInfo { DWORD cbSize; }; BEGIN_STRUCT(CompleteEvent, EventMsg) BOOL fNormal; // Sequenced finished normally END_STRUCT(CompleteEvent) DEFINE_EVENT(evComplete, "E90A6ABB-E4CF-4988-87EA-6D1EEDCD0097"); };