home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: WPS_PM
/
WPS_PM.zip
/
npssp181.zip
/
npswpswa.doc
< prev
next >
Wrap
Text File
|
1995-11-02
|
12KB
|
294 lines
NPS WPS Enhancer versión 1.81 Manual para Animación de Ventanas
[ Nota del traductor: muchas de las palabras referidas a llamadas al API ]
[ de OS/2 se mantienen en inglés. También los valores TRUE y FALSE, ya que ]
[ los valores en inglés son los usados al programar en cualquier lenguaje. ]
[ "Number of AfterImages" fue traducido finalmente, y luego de una larga ]
[ experimentación con otras descripciones, como "repetición de cuadros" que ]
[ aunque no es exacto, define lo que el autor llama "afterimages", es decir, ]
[ un número de cuadros que se repiten sólo al comienzo de la animación para ]
[ dar sensación de profundidad y movimiento. Prueben setear este valor a 1 ]
[ y verán a que me refiero. ]
[Resumen]
NPS WPS Enhancer carga las DLLs descriptas en NPSWPS.LST para las animaciones
de ventanas. De esta manera, los programadores que escriban sus propias DLLs,
pueden agregar sus animaciones al programa. Este documento muestra como crear
sus propias animaciones.
[Definiciones de función y estructura]
Por favor lea el archivo NPSWPSWA.H primero. Este archivo coontiene las
definiciones necesarias para crear animaciones de ventanas. Las funciones de
animación de ventanas deben ser declaradas de la siguiente forma:
BOOL EXPENTRY windowAnimation(struct AnimationData *pAnimationData);
"AnimationData" es la estructura usada para las funciones de animación de
ventanas. Esta estructura contiene las variables listadas a continuación.
HPS hps;
El espacio de presentación de la pantalla completa.
HWND hwnd;
El handle de ventana de aquella ventana que se está abriendo. Si la
función de animación es llamada para una ventana que se cierra, el valor
de esta variable es seteado a NULLHANDLE.
A la ventana que se está abriendo se le prohíbe ser arrastrada usando
la API WinLockWindowUpdate.
RECTL rectWindow;
Los datos del rectángulo que indica la posición y el tamaño de la ventana
en las coordenadas de pantalla.
POINTL ptCenter;
La posición del centro de la ventana. Este dato se calcula así:
ptCenter.x = (rectWindow.xLeft + rectWindow.xRight) / 2,
ptCenter.y = (rectWindow.yBottom + rectWindow.yTop) / 2.
POINTL ptRelRightTop;
La posición de la esquina superior derecha de la ventana en las coordenadas
de la ventana.
ptRelRightTop.x = rectWindow.xRight - ptCenter.x,
ptRelRightTop.y = rectWindow.yTop - ptCenter.y.
BOOL fOpen;
TRUE si la función de animación es llamada para una ventana que se abre,
FALSE para una ventana que se cierra.
enum AnimationCallType animCallType;
Para qué se llama a la función de animación. Esta variable es seteada a
"AnimationInitialize" para inicializar la función para una animación de
apertura o cierre. "Animationdraw" para dibujar la animación, "AnimationErase"
para borrar la animación, y "AnimationTerminate" para terminar la animación.
LONG lStep;
El paso actual de la animación. Este valor va desde 1 hasta cTotalSteps
(ver más abajo).
LONG cTotalSteps;
Los pasos totales de cada tipo de animación. El usuario puede cambiar este
valor mediante la ventana de configuración de animaciones.
LONG cAfterimages;
El número de cuadros repetidos. El usuario puede cambiar este valor con
el cuaderno de valores.
LONG lParameter;
El parámetro para cada función de animación. Este valor indica el ángulo de
rotación para "Spin Frame", y el divisor de cuadro para "Scatter / Gather
Frames". El usuario puede también cambiar este valor.
LONG lVersion;
El número de versión del NPS WPS Enhancer. Este valor se calcula de la
siguiente manera:
lVersion = MajorVersion x 1000 + MinorVersion x 10 + Revision
Por ejemplo, NPS WPS Enhancer versión 1.81 setea este valor en 1810, y la
versión 2.71a seteara este valor en 2711, etc.
Esta variable sólo está disponible en el NPS WPS Enhancer versión 1.81 o
posterior.
RECTL rectScreen;
Los datos del rectángulo que indica el tamaño de la pantalla completa.
Los valores rectScreen.xLeft y rectScreen.yBottom son siempre puestos a
cero. Esta variable está disponible desde la versión 1.81.
LONG alReserved[27];
No la use. Está reservada para futuras versiones.
CHAR achBuffer[4000];
El area de memoria libre para la animación. Puede guardar los datos
necesarios para dibujar una animación de ventana.
[Cómo llamar a las funciones de animación]
La función para dibujar la animación es elegida aleatoreamente cada vez
que una ventana es abierta o cerrada, de la lista de funciones de animación
habilitadas.
Cuando NPS WPS Enhancer intercepta el mensaje que dice que una ventana está
siendo abierta o cerrada, el programa toma el HPS de la pantalla y setea su
color a CLR_WHITE, su modo de foreground mix a FM_MIX.
Luego de setear AnimationData, se llama a la función de animación con el
tipo de llamada (animCallType) de AnimationInitialize. La función de
animación tiene que inicializarse para la animación de esta ventana, y retornar
el valor BOOL.
La función guarda los datos de la animación en achBuffer si es necesario.
Si el resultado es FALSE, NPS WPS Enhancer tratará de inicializar otra
función de animación. Si falla al inicializar tres veces seguidas, la animación
de ventana no funcionará para nada para esta ventana. Si el resultado es
TRUE, la animación comienza.
La función de animación es llamada dos veces para cada paso; una vez para
dibujar la animación, otra vez para borrarla. El puntero a AnimationData
apunta a los mismos datos usados en la llamada de inicialización.
Al abrir una ventana, el valor de paso (lStep) se incrementa desde 1 hasta
el número total de pasos (cTotalSteps). Al cerrar una ventana, el valor del
paso va disminuyendo, desde el número total de pasos hasta 1.
La llamada a la función para borrar la animación es demorada de acuerdo al
valor especificado para el número de cuadros repetidos.
Por ejemplo, los parámetros para las animaciones de apertura se muestran a
continuación donde el número de pasos o cuadros es seteado en 100, y el
número de cuadros repetidos en 1.
Orderç Paso/Cuadro Tipo de llamada (animCallType)
1 1 draw (cuadros repetidos: 1)
2 1 erase
3 2 draw
4 2 erase
5 3 draw
6 3 erase
7 4 draw
8 4 erase
...
197 99 draw
198 99 erase
199 100 draw
200 100 erase (cuadros repetidos: 0)
Si el número de cuadros repetidos es seteado en 3 en este caso, los
parámetros son seteados así:
Orderç Paso/Cuadro Tipo de llamada
1 1 draw (Cuadros repetidos: 1)
2 2 draw (Cuadros repetidos: 2)
3 3 draw (Cuadros repetidos: 3)
4 1 erase
5 4 draw
6 2 erase
7 5 draw
8 3 erase
...
193 98 draw
194 96 erase
195 99 draw
196 97 erase
197 100 draw
198 98 erase (Cuadros repetidos: 2)
199 99 erase (Cuadros repetidos: 1)
200 100 erase (Cuadros repetidos: 0)
Los parámetros para las animaciones de cierre se muestran a continuación
donde el total de pasos es 100, y el número de cuadros repetidos es 1.
Orderç Paso/Cuadro Tipo de llamada
1 100 draw (Cuadros repetidos: 1)
2 100 erase
3 99 draw
4 99 erase
5 98 draw
6 98 erase
7 97 draw
8 97 erase
...
197 2 draw
198 2 erase
199 1 draw
200 1 erase (cuadros repetidos: 0)
Si el número de cuadros repetidos es seteado en 3 es este caso los
parámetros son seteados así:
Orderç Paso/Cuadro Tipo de llamada
1 100 draw (cuadros repetidos: 1)
2 99 draw (cuadros repetidos: 2)
3 98 draw (cuadros repetidos: 3)
4 100 erase
5 97 draw
6 99 erase
7 96 draw
8 98 erase
...
193 3 draw
194 5 erase
195 2 draw
196 4 erase
197 1 draw
198 3 erase (cuadros repetidos: 2)
199 2 erase (cuadros repetidos: 1)
200 1 erase (cuadros repetidos: 0)
Si piensa que esto es demasiado complicado (¡Y yo creo que sí!), sólo
ignore si se está abriendo o cerrando, dibujando o borrando, y el número
de repetición de cuadros. En vez de eso, sólo dibuje lo mismo la cantidad
de veces que indique el número de pasos. Como la función de animación es
llamada siempre dos veces durante el mismo paso, y el modo de mezcla es seteado
en XOR, esta forma de dibujar garantiza que lo que se dibuja es siempre
borrado. También garantiza que el movimiento de cerrar es exactmante el mismo
(en sentido inverso) que el de apertura. You use este método en todas las
funciones de animación en NPSWPSWA.CPP.
Las funciones de animación deben retornar un valor TRUE si desea continuar
con la animación un paso más. Si regresa FALSE, la animación es abortada
inmediatamente.
Después de dibujar y borrar el efecto de animación, la función de animación
es llamada nuevamente con el tipo de llamada "AnimationTerminate". En esta
llamada de terminación ud. puede reinicializar y borrar recursos si desea.
Esta terminación es siempre llamada si la inicialización termina exitosamente
(Incluso si la animación es abortada).
Yo no use la llamada de terminación en NPSWPSWA.CPP, y esta sólo devuelve
TRUE.
[Como registrar funciones de animación de ventanas]
Primero, las funciones de animación deben ser exportadas en una DLL, no
por sus nombres sino por sus ordenales. Lea NPSWPSWA.DEF como ejemplo.
El formato de NPSWPS.LST se describe a continuación. Los parámetros son
separados por un espacio.
DLL-Name DLL-Ordinal "Animation Name" "Parameter Name" "Displayed Animation Name" "Displayed Parameter Name" Default-Step Default-Parameter Minimum-Parameter Maximum-Parameter
Las líneas que comienzan con ";" son ignoradas. "Animation Name" y
"Parameter Name" deben mantenerse en ingles para manterner la compatibilidad
entre las distintas versiones. Para evitar conflictos en los nombres de
animación, por favor incluya el nombre del autor en el nombre de la animación
si es posible. Por ejemplo, "Spin Frame de Takasugi", etc.
"Displayed Animation Name" y "Displayed Parameter Name" son mostradas al
usuario en la ventana de configuración de animaciones, El usuario puede
modificar estos valores.
Default-Step y Default-Parameter son usados para setear los valores por
omisión la primera vez que se carga la DLL. Una vez cargado, NPS WPS Enhancer
guardará la información de las animaciones en el archivo NPSWPS.INI.
[Otros]
Si tiene alguna pregunta sobre las animaciones de ventanas, por favor
envíeme un mensaje por e-mail [en inglés]. Espero ver sus lindas animaciones.
Shinji 'N.P.S.' Takasugi Team OS/2 Japan
nps1970@ibm.net
JBD03575@niftyserve.or.jp (for Japanese users)
Traducción: Fernando Cassia
Team OS/2
Buenos Aires, Argentina.