statictransition.c
来自「Brew 下一个字自动滚动的实例」· C语言 代码 · 共 70 行
C
70 行
#include "AEETransition.h"
#include "StaticTransition.h"
#include "Transition.h"
#include "AEEWProperties.h"
#include "AEEStaticWidget.h"
#include "wutil.h"
typedef struct
{
Transition base;
AECHAR *txt;
uint16 start;
uint16 len;
} StaticTransition;
#define DECLARE_STATICTRANSITION StaticTransition *me = (StaticTransition *)po
static void StaticTransition_Step(StaticTransition *me)
{
int val = me->len * me->base.elapsedTime / me->base.totalTime;
if ( (val - 1) > me->start) {
me->start = val - 1;
}
if (me->start >= me->len) {
me->start = 0;
}
IWIDGET_SetText(me->base.piWidget, &me->txt[me->start], FALSE);
}
void StaticTransition_Start(ITransition *po, TransitionDesc *pDesc, long msecs, PFNNOTIFY pfnDone, void *pfnCxt)
{
DECLARE_STATICTRANSITION;
StaticTransitionDesc *pd = (StaticTransitionDesc *)pDesc;
me->txt = pd->txt;
me->start = 0;
me->len = WSTRLEN(me->txt);
Transition_Start(po, pDesc, msecs, pfnDone, pfnCxt);
}
void StaticTransition_Ctor(StaticTransition *me, AEEVTBL(ITransition) *pvt, AEECLSID clsid, IShell *piShell, IModule *piModule)
{
Transition_Ctor(&me->base, pvt, clsid, piShell, piModule);
pvt->Start = StaticTransition_Start;
me->base.pfnStep = (PFNNOTIFY)StaticTransition_Step;
}
int StaticTransition_New(ITransition **ppo, IShell *piShell, IModule *piModule)
{
StaticTransition *me = MALLOCREC_VTBL(StaticTransition, ITransition);
if (!me) {
return ENOMEMORY;
}
*ppo = (ITransition *)me;
StaticTransition_Ctor(me, GETVTBL(me, ITransition), AEECLSID_FADER, piShell, piModule);
return SUCCESS;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?