Document

Anuncio
Unidad Iztapalapa
kea de cmcentrwiáu Insttmmtaciái WWcr Eintrónica
k r o r r o Barranco Vidimir
E /-
Matri cula: 89324572
Reporte de Seminario de Proyecto I1
Asesor:
Mtro. Jim4nez Cruz .Toel /
Y
.
'
Octubre de 1994
1
//
21 Rqr-ión
orientdm a ob-
-
Woqw qw t a m las =jaws
las c d m c m
ideas
& la prograrcibi estrittvada y
y pod.rosos cmceptoe.
descoqmr f w i l a t e m problema en m s*tor>
permite
c m 10 qw se
& puta reluimwlu.
la c u l r se t r h e n en midd.. autocontenidi. l
l
h objotos.
Todos los lenguajes de progrsrción orientados a objetos ticosas en
coiiún,
tres
los 0bf.ta. el paliarfirm y l a heremia.
21.1 objetos
Son entidades lógicas qw conti-
dato0
r m código qw
mnipuia a
estos datos. bntro & m objeto, parte de este código o datos pwdon
ser privados del objeto e inmcesibles f a r & el. U d a m d o de código
7 d.tos & esta f a r se d.nalna encapsuiaciái. lh objeto no es m s qw
m u variable
-
de t i p o Minido pur e1
se croa i q l i c i t u r n t o m
Usnvio. Cuando se Mine m
&joto,
tipo de dato.
21.2 P a l i a f i m
Ei palimfim permite utiliur m & o
para varios propbritos
relaciaiados. pero ligerunte diferentes. sii fin es peratir e1 uso &
m mibre para especificar m u clase & acción -ai.
S. ej.ccit.
parte .spcfica & l a clase gmmral d.pndierdo del tipo de dato c m
q-
re
esta tratando, U lenguaje CW soporta el polimrfim en ti-
de capilación y de ejecución.
3
uy
el
2.1.3 R . r n i a
Esel
proceso d a n t e el
cual
m objeto prd. adquirir
propidadas d. otro. Soporta e1 praoso de clasificaciQ
jrarqtda. W l a s clrrificacimc,
cdidades qw hvon uüco a un abjpto
salo se mcositan definir
de
I
Nclas.
¿e
las
drntro dr su claw. La hrencia es
e1 r c u i i s a qw hace pocible qw m 0bj.tO
-0
y el
las
sea m
n s gnural.
.
4
ej.410
rpclfico
Z b a r r o i l o &l
proyuto
Para llevar a cabo el proyuto s. utilizaron los rigui.nkr
.rchi.oo
21 k c h i w 6 uuliuda
los gu so a p l i c a n a continuación
Ei archivw &aficor.cpP CZ1.l)
ya qw incluye
os l a c a k u principal
d código f u n k principl de sot&
&l
proyuto,
el so encrrntra l a
fmción W ñ t i i a O, l a c u d os l a fmción principal cuudo so program on
CW para Wiindon ( d o g a a
la fmción d n O on i i h i h DB3.
5
s. @do qw al iniciar w i r c t r e l a nntaí mridudr
re ejecuta la aplicribn
re devuelva e1 est40 a Windair
al inicio con
up
H cierre UI
u c h i m qw
R
abrib
*iri.hle glohl llamada k c h i m
l o d o r t o w u o t r a e n s l l i s t d o d o 1 c6digo fprnk dol
B&ficoa.Qp anexo, en l a fracibn Winkin O
se localiza en l a
uchivo
part.
f i n l do didio archin*
Ais1
t.ibi)R
en el
c6digo do1 p r a g r u a p u u a las
clases
dgld.at.C:
3.1.1.1
Clase Baficar g, r k
H propaciatan
principles qw saa utilizados para poder redizar
21.1.2 clase Applcrl bk r
Ilrredm l a s cracterlsticas & otra 11-
up
clase qw
loa d.ta y c6dlgo
UI
gráfica
wir up
TApplicatim. prr os
do Cbjntliadorir. SEI f i n principai do A p p k m ~01 c r w
windair.
6
uy
aplicrib
up
c l w
aplicuibn en
3.1.1.3 Clase Applindan Esta hereda do otra c l a w llamla Tlindol.
~ s u f i i u l i d d r la do M i n i r
mii
f m i a m s d o r o s p w s t a a -jr
utilizades en
=9W, q w u utiliza para indicar a
o
tecla,
E.
Aqül
Minen las
t.lr c m
FinnQa,
hi pulUd0 um
Nndoms pu se
para indicar qw se hi pulsado e1
w -E.-
bDtái izquierdo dol rat6n, d r e otra
En el
dam.
Ir.
rima
c6digo do B.&fica.cR,
01 r r t o
t.
do
la
in(orDciái.
El archim Iknsraf.RC C3.1.2).
k t r s o s C k r R I p p ) qlm
d
o
r
m
archim E. realizó e1
ni
raQ
Borlami
qw
B&ficos.cpp. Wliu al archivo
E.
realizó utilizando e1 T a l l r
C++ para N-.
utiliza e1
ni e1
I(ini6taf.K
cmtuitmqlmrqw.#nknl.isdiformikzopciams
&
-I
IuüChüU., etc.
Iknsraf.RC
Cm .Et.
códim
do1
archivo
qw E. Minon lis
dol
SI código se a t r a
d,c m son
ni
e1
archiw
mn*
El archim k b 1 o . M (3.1.3 solo os ma archivo do &finicibn.
01 quo
t.
do
on
introdwon lis c a r w t r I s t i c i s do c m E. quíoro qw utilize
la r.cmsos dol sirtom la aplicación Widows qw u r t a cr.M(J0. Esta
r.ctrsossan1aforronqwserii.far.n
kiilb do l a pila y do1
e
CRWP)
la d a h y e1 código. oi
qlm H
a en 01 archivo kbl&Mmn*
uti1irU.a y otros: c m
SO
El archivo EQp CS1.Q
utiliza a otro lludo E I p R qw es
Qnd. E
.
d d i i r la c l a w RiwhntOxt ccontext & Dilkrj0.l y las f r n i m r pu
padiora utilizar r t a . ui cOnt.xt0 & Dibulo as
my ail p u a dibuju on
pmtdia r u b . circdos. dim y pallgonos,
C.M.
se utilizo para pintar rutas. c m l o qw
entre otra.
S.
m
u
,las
h aste
qrificas.
La clast? Rintcaitext hroda & Ds*ic.cmtoxt y su cúdigo o. u t r a on
loc archinr E c p p y E H p p
uyxoc.
El archivo Báficos.R] tS1.b) es el archivo d. prolncto pu L. utiliza
p u a ligar a toda la archivos ircomrioc para cmtruir
-
V i m . pu niestecasofdBJicor.Exe.
*ificoc.Rj
la aplicribn
Su m t r a en el
archim
9
, .,
,
I
,
,
. ,,,
,
,
,.~,.,,..._._ ,_-.,
..,
-..-",.".
,....
Bibliografl.
10
..,...< ,,._," ,~,
,...
_,. -
..",._., ~.
,~,,. ,
,
..
,...I
!/
~
.,.,.
.,,..,..
-,,-
..... ~ * , - - ~ . . * " ~ , ~ & ~ - " . . - , ..... .. ,"
...,"
"~
,.. , ,, ., , , .~, . ._,,..._
....
I
,,_.. .,
~
,
..
,
Proqrama [Graf icos.C O O ~
linclude Cow1.h:
: i nc lude < str i ng.h :
!include <strstream.h>
:include Cmenugraf .
h
:
iinclude "pc.hpp"
iinclude <stdlib.h>
iinclude <string. h )
include <windows.h>
.include <iomanio.h>
include <iostream.h>
:include < fstream. h >
-
include <io.h >
include Cconio.h>
i
Programa
de ObjectWindow's
El siguiente programa tiene la capacida de graficar sehales
ioeldtricas adquiridas mediante una tarjeta analrgica digital y guardadas
n un archivos de texto
/
f/***++*******+***+*H4++*~+************ff
ypedef stt-uct registro
r
1
If
double mVolts;
double Y;
Registro;
/ I
Valor en mVolts
Coordenada en Y
ypedef struct nodo
<
Registro Reg;
struct nodo *Ant;
struct nodo +Si¶;
1
ff
Informaci'n
/ I Anterior.
If
Siguiente
NODO;
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
x
VARTABLFS GLOBALES
*,'
...........................................................................
har NomArch[SOl = " j o j icrcz.mir";
/ I Abrir archivo d e datos
fstream Archivo (NomArch);
ong Posicion=O;
.**+X*X+**+**~l*+***~****************~*********+**+++~****************~**f
lass Grafica
double Minirno, Maxirno, Media;
public:
/ f ConstPuctor. Pone Plinimo, Maxima y Media.
Graf ica (void);
r,niA
LlavMin
frlniikle
Vi
*
rafica :: Grafica (void)
ouble M í n i m o = 1,OelO; Maximo = --1.01?10;
hat- str i ng T S 0 I , .#Fin;
strstream text (string, sizeof istrin(3) ) ;
double Y = 0 . 0 , Suma = 0 . 0 ;
f / Registro que almacenar
Registro Reg;
datos
Archivo > > string;
if (,string)
c
Y = strtod (string, &Fin);
/ / Obtener m ximo y m.nimo
MaxMin ( Y ) ;
f f Obti-ner primer. elemento.
Suma += Y;
1
else
return;
f/
Archivo vac.0.
int Cont = I ;
Archivo > > string;
while i!Archivo.eof 0 )
c
Y = strtod (string, &Fin);
/ / Obtener m ximo y m-nirno
MaxMin ( Y ) ;
Cuma += Y ;
/ / Obtener. total
++Cont;
Archivo > > string;
1
Media = Suma/Cont;
//
oid Grafica :: MaxMin (double
Y1
PONER LA Media en la clase
( Y f tlinimo)
Minimo = Y ;
if ( Y .> Maximo)
Maximo = Y;
if
nt Grafica :: CoordY (double
Y,
const int EjeY, Const int NivelY)
ouble Yactual = Y - Minimo;
Yactual / = (Maximo-Minimo);
Yactual X= EjeY;
Yactual += NivelY;
return i(int)Yactual);
1lD0
W r a f ica :: CreaNodo (Registro Reg)
'Onio
?CAP = new
NODO;
Rp->Reg = I W ~ ,
ap->kr>t. = P . P - > C I E > =:
NULL;
return Api
.$.$3**~~*?C*~?C**?C*~~~Fa*?C,********~**~~******~********************,***~*~/
Y
UAPTABLES OLOBALES 1ContinJa)
.It.*?C*,,*,*+***r.~~.**?C*,***,?C*,******~*?C******?C***********~*****,********/
raf ica Procesa;
har si.301 = " " 8
nt
/ I
Global porque ser
usado por otras funciones.
y=i;
X"1)
...............................................................................
Definici'n d e una aplicaci'n. Reserva espacio para una aplicaci'n.
Nombíre)Aplicíacion) hereda publicamente de TApplication.
lass AppName: public TApplication
/ I
TApplication es una clase d e
' / Objectwindows. Crea una aplicaci'n en windows.
ubl ic:
I /
Funcion constructora en linea NombAplic O , Pasa par metros al
/ / constt%uctor de la clase base TApplication nadam s.
LPSTR y HANDLE son tipos de datos definidos en OkjectWindows y
//
/ / que son muy comunes en la p,rogramacirn en windows. LPSTR es un
/ / apuntador far (lejano) a una cadena y HANDLE es un valor de 16
/ I bits que sirve para identificar una ventana.
/
I
AppName (LPSTR App-Name, HINCTANCE/*HANDLE+/ Thislnstance, HINSTANCE/*HANDLE*I
LPSTR Args, int VidModo) : TApplicatiDn (App-Name,
ThisInstance, Prevlnstance, Rrgs, VidMode) O ;
Funci'n virtual. Ya esta d'efinida en TAppliction y se redefine
en NombAplic. Crea e inicaliza la ventana de aplicai'n.
virtual void InitMainWindow Oi
//
//
,
Definici'n de una ventana.
Vent(ana)Apliciacirn) hereda publicamente de TWindow.
lass AppWindow : public TWindow
/
I
ubl ic:
Funcirn constructora. Pasa par metros al constructor de
TWindow y ejecuta la funci'n AssiqnMenu O asignando MTMENU.
AppWindow (PTWindowsObject WType, LPSTR WTitle) : / I Funci'n en linea.
TWindow (WType, WTitle) C AssignMenu 1"MIMENU")I 1
I /
Param,tros:
Tipo'Jientana), TituloVientana) se utilizar n para la
/ / ventana que ser
creada. Si TipoV=O se crear una ventana est ndar.
/I
//
/I
/ I
/ I
I /
Funci'n de respuesta a los mensajes del teclado.
Procesa mensajes d e tipo WM-CHAR. BDrlaTid recomienda t a m b i d
a,adir el mensaje WM-FIRST para asequrar que el c'digo sea v lido
si alguna vez cambian las macros.
virtual void WmChar (RTMessage Msq) = CWM-FIRST
//
/ I
//
//
,,
t
WM-CHAR35
Funci'n Paint O , d e procesamiento a mensajes tipo WM-PAINT.
Se redefine eri esta clase para que la funcirn WmPairit O de TWindow
la llame (ya que ah. esta definida) a f i n de procesar mensajes WM-PAIPJT
mas facilmente.
L<"l.l,
__
_ _ A _
_ , _ _, ^
n _ _ , , : _ . _ l _ . . .- -
i< . _ _ l _ l i _ . i . .
m-:..*
I >
..- -..-
Funciones de respuesta a los mensajes del rat'ri
I /
/ / Responde al tot'n
izquierdo del r;itrn
virtual \,ni4 WMLButtonDown (RTHessaqe Msu) = LIJM-FIRST
t
WM-LBUTTUNDOUN3;
/ / Responde al bot'n dereecho del riat'n
virtual void WMRButtonDown (RTMessaqe Msy) = CWM-FIRST
t
WM-RBUTTOt4DOWNl;
Funciones de respuesta al men2 MIllEFJU
//
%virtual void IDMAurnentar IRTMessaqe Ilsg) = C CM-FIRST + IDM-AUMENTA I ;
virtual void IDMCiqGrafica (RTMessaqe Msy) = C CM-FIRST + iDM-SIGGRAF I;
virtual void IDMRastrear (RTHessage Ilsg) = C CM-FIRST + IDM-RASTREA 1 ;
*
virtual void InMFlechaIzq (RTMessage Msq) = C CM-FIRST 4 IDM-FLECHTZB
virtual void IDMFlechaDer (RTMessage Msq) = 1 CM-FIRST + IDM-FLECHDER 3 ;
I;
*/
virtual void IDMSiqCanal (RTMessaqe
I'ISg)
C
CM-FIRST + IDM-SIGCANAL 1 ;
/*
*/
Wsq) = 1
CM-FIRST + IDM-ACERCADE I;
virtual void IDHAcercaDe (RTMessage
=
virtual void JDMTerminar (RTMessage Msq) = C CM-FIRST t IDM-TERMINA 1
C ClDSeWindDW O ; >
/ / Nota: fiqu. i r n detalles adicionales de la ventana.
9
/ Crea e incializa una instancia d e la ventana.
oid AppName :: InitMainWindow 0
/ I
Crea y asigna memoria a Mainwindow, que es un apuntador a la
/ / ventana que se crea. Name es un apuntador a la cadena que
/ / contiene el nombre de la aplicacicn. Ambos par metros son
/ I miembros d e la clase Tñppliacation.
Mainwindow = new AppWindow iNULL,PIame); / / Crear la ventana principal,
/
Procesamiento de mensaje de tipo WM-CHAR
WmChar (RTMessaye Msq)
o i d AppWindow ::
DC DCI
strstream ostr
ostr
x=1;
is,
sizeof i s ) i ;
//
< < (char) Msg.WParam < < ends;
y=1;
InvalidateRect
/*
(HWindow, NULL,
*/
1);
Entrda/Salida basada en arreglos.
//
Construir una cadena.
//
'Jolver a dibujar.
/ I
aintcotntext PC (I-iWindow)
;
ix, yI SI;
FC.TextOut
/:
I
:/
rc =
/ X Yo X/
Volver a vieualizar s .
rci
ECT
Contrxto de dispositivo.
V e r t t a r i a de trabajo
'I'D
PI.rcPaint;
GetWindowRect (HWindow, k r c ) ;
nt heiqht = rc.bottorn - rc.top;
I / Siguiente.
nt wi
1
NODO;.............J.
n t center = w i d t h / 2;
//
ñltura de la ventana Y
//
Centro en direccirn X
nt centerY = height / 2;
//
Centro en direccirn Y
...
onst
onst
onst
onst
int
int
int
int
Eje% =
EjeY =
NivelX
NivelY
(int)iwidth,l3)/16;
/ / 640X13/16 = 520 Pixeles
iint)(heightX5):8;
/ / 480*.5:8
= 300 Pixeles
= Eje%/b;
/ / 83 pixeles
= 4XEjeYIi5;
/ / 80 pixeles
nt line = I ;
PC.3etTextAligniTA-CENTERi:
PC.SetTextColor(RGB(0, O, 255)
);
//
J/
Centrar texto
Texto a z ~ l
har string 18036
m t r s t r e a m textistring, sizeoflstriny) i
i
text t e "Graficador de se,ales bioeldtricas: " < < ends;
PC.CharHeight0, string);
PC.TextOuticenter, line++
*
PC.MoveTo(NivelX, NivelY);
PC.LineToíNivelX, NivelYtEjeY);
PC.LineToiNivelX+EjeX, NivelYtEjeY);
//
EJES
nt k = O;
n t Num = 8;
n t Interv = 32;
strcpy istring,"mVolts");
PC.TextOut iNivelX/Z, NivelYi3/5, stping);
for i ; k<=Num ; k + + )
<
.
PC MoveTo (Plive1Xt i k+E j eX/Num) , Ni ve 1Y+EjeY) ;
FC.LineTo(NivelXt(k+EjeX/Num), 1NivelY+ll/lO)+EjeY);
itoa (kXInterv, string, 1 0 ) ;
FC.TextOut iNivelX+(k+EjeX/Num), (NivelY*b/S)+EjeY, string);
3
n t r c p y istring,"mseg");
PC.TextOut (width-NivelX/Z, EjeY+NivelY*6/5+15, string);
tit DifY = NivelY, j , Long;
nt ndi9=3, dec, signo;
ouble Max = Procesa.DaMaximo O , NumAux;
ouble Diferen = Procesa.DaMaximo 0 - Procesa.DaMinimo
text.seekp
..
(O);
..
//
O;
Poner al inicio del flujo.
text.+!idth ( 8 ) ;
text.precision ( 2 ) ;
har CadAux [ 2 0 1 ;
for (k=@: k<=Num
;kt+)
r
PC. MoveTo (Ni ve 1 X, tlivelY t í k+Ej eY/PJum) ) ;
FC.LinrTo(NivelX+4/S, NivelY+ik+EjeY/Num)):
NumAux = M a x ;
NumAux -= ik#Diferen/Num) ;
strcpy (CadAux, fcvt iNumAux, ndig, Brdec, &signo) ) ;
Lonq=strlen(CadAux);
for (j=Lonq; j>deci j - - )
CadAuxCjl = CadAuxCj-11;
CadAux Cjl = ' . ' ;
CadAux [Longtll = O;
if
(signo)
//
//
Fin de cadena.
Si signo es negativo.
C
Long=strleniCadAux);
for !j=Long; j > O ; j--1
CadAuxij I = CadAux[.j-11;
CadAux [ j l = ' - ' * I
CadAux [Longti] = O;
//
Fir, de cadena.
)
text.seekp (O);
/ / Poner al inico del flujo.
text < < CadAux < < ends;
PC.TextOut (NivelXfZ/S, NivelYt(k+EjeY/Num), string) ;
?
/*
har CadValorC801, *Fin;
Algunas no se uasr n ? * /
nt Cont = 18
ouble Y = 0.0, Suma = 0.0;
egistro Reg:
/ / Registro que almacenar
datos
nt const d x = 2;
nt %O, Y O , Y l ;
nt const NUM = 256;
ouble ListaDat[NUMl;
nt ListaCODrCNUMl;
ifstream Archivo (NomArch);
Archivo.seekg (Posicion, ios::beg);
Cont = O;
%O = NivelX;
A r c h i v o > > CadValor;
:/
//
ABRIR ARCHIVO
Leer dato
(*CadValor i
if
<
ListaDatcContl = Reg.rnVolts = Y = strtod (CadValor, &Fin);
ListaCoorlContl = Re9.Y = YO = Procesa.CoordY ( Y , EjeY, NivelY); / / Coord. f
:I
Ant = Lista = Procesa.CreaNodo (Reg);
?
else
return;
while ( í++Cont) < 256 && (*CadValor)
C
/ / GRAFICAR
I / Leer cadena para Y1
Archivo > > CadValor;
if (*CadValor 1
C
ListaDat[Contl = Req.mVolts =
Y =
strtod (CadValor, &Fin);
PC.MoveTo ( X O , Y O ) ;
PC.LineTa ((:<O += dx), Yi);
YO = Y l ;
//
I /
iX0,YO).
Trazar linea
(X1,Yi)
else
break;
1
if
( ! (%CadValor))
return;
Posicion = Archivo.tellq
Archivo.close 0 ;
0 ;
/?c
YA
//
Determinar posicion actual
/ / CERRAR ARCHIVO
TERMINO EL ARCHIVO.*/
EndPaint (HWindow, &PI);
/
/ Procesamiento del botrn izquierdo del ratrn
oid AppWindow :: WMLButtonDown (RTMessaqe Msq)
nt response;
response = MessaqeBox
/ / Prucesar un cuadro de dialogo.
(HWindow, "Elegir un bot'n", "Bot'n izquierdoY,
MB-ABORTRETRYIGNORE);
switch (response)
C
case IDABORT: MessageBox (HWindow, " u
break ;
case IDRETRY: MessageBox (HWindow,
break ;
case IDIGNORE: MessageBox (HWindow,
"I'
,
,
"I'
"Cancelar", MB-OK);
"Reintentar", ME-OK) ;
,
"Descartar", MB-OK);
f Procesamiento del bot'n
derecho del rat'n
oid AppWindow :: WMRButtonDown (RTMessage Msq)
MessageBox (HWindow, " f A c a s o puls'
I
el Dot'n
derecho?", "Bot'nDerecho",
MB-OKIM
Procesamiento de la selecci'n IDM-Aumentar
:: IDMAumentar (RTMessaqe M s q )
D i d AppWindow
strstream ostr
ECT rc;
(5,
sizeofis));
rc.left = rc.top = O;
rc.right = 200;
rc.bottom = 20;
ostr C C "Aumentar" C < ends;
x = 1;
y = 1;
/*
*/
MessageBox
(HWindow, "--Aumentar--", "Aumentar ha quedado seleccionada", MB-OK
InvalidateRect
(HWindow, &rc/+NULL+/, O / X l X / ) ;
: Procesamiento de la selecci'n IDM-CigGraf
aid AppWindow :: TDMSiqGrafica (RTMessage Msg)
strstream ostr i s , sizeofis));
ostr
<<
"Siguiente 9r fica"
x = 1;
y = 1;
/
MessageEox
<<
ends;
(HWindow, "--SigGrafica-","Siguiente gr fica h a quedado selecci
InvalidateRect (HWindow, tlULL, I ) ;
/ Procesamiento de la selecci'n
IDM-Rastrear
oid AppWindow :: IDMRastrear (RTMessage Msg)
strstream ostr ( 5 ,
sizeof is)) ;
ostr < < "Rastrear" < < ends;
MessageBox (HWindow, " - - R a s t r e a r - - " ,"Rastrear ha quedado seleccionada", MB-OK
aintcontext PC (HWindow);
Contexto de dispositivo. I+! YO
( x , y, s i ; I / Volver a visualizar s.
PC.TextDut
I / Ventana de trabajo
ECT rc;
I-c
/
//
=
Yo
PI.rcPaint;
GetWindowRect(HWindow, 8zr.c);
nt
nt
nt
nt
-
/ I Altura d e la ventana Y
I / Anchura de la ventana X
/ / Centra en direcci'n
X
/ I Centro en direcci'n
Y
height = rc.bottom
rc.top;
width = rc.right - rc.left;
center. = width / 2;
centerY = height ; 2;
onst
anst
onst
anst
int
int
int
int
nt line
/ / 640+13/16 = 520 Pixeles
EjeX = (int)(width+13)/16;
/ / 480+5/8 = 300 Pixeles
EjeY = (int)(height+5)/8;
/ / 8 5 pixeles
NivelX = EjeXf6;
I / 80 pixeles
NivelY = 4+EjeY/lS;
=
1;
PC.SetTextAligníTA-CENTER);
PC.SetTextColor(RGB(0, O, 255)
);
/ / Centrar texto
/ / Texto azAl
har string [BO11
ostrstream textistrinq, sizeofistring) 1;
t e x t < C "Graficador de sexales bioeldtricas: " < < ends;
PC.TextOuttcenter,
linett i+ PC.CharHeight0, string);
FC.MoveTo(NivelX, NivelYi;
PC.L i neTa (Nive lX, Nive 1Y + E je Y );
PC.LineTo(NivelXtEjeX, NivelYtEjeY);
/ / EJES
*/
n t Wum = 81
rr? Inter’)
37:
k:=Num
;k++)
sor ( :
-
.
,
PC MoveTo ( N ivelX + I k+EjeX/Num1
Nide 1Y +Ej e Y );
F C . L i n e T o i N i v e l X + ( k * E j e X I N u m ) , (NivelYtli/lO)+EjeY);
itoa (k+Interv, string, 1 0 ) ;
PC.TextOut
íNivelX+(k+EjeX/Num),INivelY+b/J)+EjeY, string);
1
nt DifY = NivelY, j, Long;
nt ndig-3, dec, signo;
ouble Max = FrDCeSa.DaMaximo O , NumAux;
ouble Diferen = Procesa.DaMaximo O - Procesa.DaMinimo
text.seekp
O;
/ / Poner al inico del flujo.
I ios::showpoint);
(O);
text.setf
(ios::right
text.width ( 8 ) ;
text.precision
(2);
har CadAux C 2 0 3 ;
for Ik=O; k<=Num ;ktt)
PC.MoveToiNivelX,
NivelY+ik+EjeY/Num));
PC.LineTo(NivelX+4/5, NivelYt(k+EjeY/Num));
NumAux = Max;
NumAux -= fk+Diferen/Num);
strcpy (CadAux, fcvt (NumAux, ndig, &dec, &signo)) ;
Long=strlen(CadAux);
for (.$=Long; j>dec; j - - )
CadAuxtjl = CddAux[j-lI;
CadAux í j l =
’.’;
CadAux CLongt11
=
i f (signo)
C
O;
//
//
F i n de cadena.
Si signo es negativo.
LDng=strleniCadAux);
for (j=Long; j > O ; j - - )
CadAux C j 1 = CadAux C j -1 1;
CadAux [ j l = ’ - l . 9
CadAux CLong+13 = O;
/ / Fin de cadena.
?
text.seekp ( 0 ) ;
/ / Poner al inico del flujo.
text < < CadAux < < ends;
PC.TextOut
iNivelX+2/5, ~livelY+(k+EjeY/Num),
string);
/ + Algunas no se uasr n ?
har CadValorCSOl, *Fin;
nt Cont = 11
ouble Y = 0.0,
Suma = 0.0;
egistro Reg;
/ / Registro que almacenar datos
nt const d x = 2;
nt XO, YO, Yi;
nt const NUM = 256;
ouble ListaDatCNUMll
nt ListaCoorCNUMl;
ifstream Archivo (NomArch);
Archivo.seekg (Position, ios::beg);
Cont = 0;
//
ABRIR ARCHI‘JO
*/
..
..,
,
I
,
.,,, , .
,
..
,. ,,
Rvchivo > ? CadValor;
,. <, ..+
//
-.,.~--~"...---..-.-....-
,*
-.. .
I..
, ~..
,,. .
.. .
1.1..
-
,
.
Leer. dato
(+CadValor)
if
ListaDat[Contl = Reg.mVolts = Y = rjtrtod (CadValor, &Fin);
( Y , EjeY, NiveiYi;
ListaCoorIContl = Re9.Y = YO = Proc:esa.CoordY
//
Ant = Lista = Procesa.CreaNod0 (Reg);
/ / CDDrd. f
3
else
return;
while ii + + C o n t ) < 256 && (,CadValor:&
)
C
/ / GRAFICAR
/ / Leer cadena para Y 1
Archivo > > CadValor;
i f (+CadValor)
<
Reg.mVolts = Y :: strtod (CadValor, &Fin);
/ / Corrdenada +.sita en pantalla
ListaCoorIContl = Re9.Y = Y 1 = Procesa.CoordY ( Y , EjeY, NivelY);
ListaDatCContl
PC.MoveTo
PC.LineTo
YO = Y l ;
=
(XO, YO);
+= d x ) , Y l ) ;
//
//
iiX0
iX0,YO). Trazar linea
(X1,Yl)
1
else
break;
1
if
( ! (+CadValor))
return;
Posicion = Archivo.tellg
Archivo.close O;
O;
/+
YA TERMINO EL ARCHIVO.+/
//
Determinar poaicion actual
I / CERRAR ARCHIVO
InvalidateRect (HWindow, NULL, I ) ;
/ Procesamiento de la selecci'n
IDM-SIGCANAL
oid AppWindow :: IDMSigCanal (RTMessage Msg)
strstrearn ostr ( 5 , sizeofis));
ostr <í "Siguiente canal" < < ends;
MessaqeBox (HWindow, "--SigCanal--","Siguiente canal ha quedado seleccionada"
Posicion = O;
/ / Posicinar al
InvalidateRect (HWindow, NULL, 1 ) ;
inicio. USO DE VARIABLES
E l punto de entrada de un programa en windows debe ser en la funci'n
/ W i n M a i n O , la cu 1 tiene propiedades especiales que la diferencian de
f otras funciones de un programa, debe ser compilada como una funci'n
de
/ tipo P4SCAL y adem s debe ser de tipo ifar?.
/
nt PASCAL W i nMain (HINSTANCEf+HANDLE-%/ Th i
S I ns tance, HINSTANCE!*HANDLE+/
/ / WinMain
PrevI
ppName App í"Men>Graf (DbjectWindows)",ThisInstance, PrevInstance, Args, VidM
/ Archivo MenuGraf.rc
.
include "menuqraf h "
IMENU MENU
EGIN
POPUP "&MenJGraf"
BEGlN
MENUITEM *&Aumentar',
IDKAUMENTA
MENUlTEM *&Siquiente qr fica", IDM-SIGGRAF
/+POPUPf/MENUITEM "&Rastrear", IDM-RASTREA
/*
BEGIN
POPUP "&Cursor 1 "
BEOIN
MENLIITEM "&Flecha a la izquierda", IDM-FLECHIZR
MENUITEM "F&lecha a la derecha", IDM-FLECHDER
FNn
__
nnnirn
. -
.
,.... _,"~..,.-.*+"--,-*,
,-..,.
--*
-/
<
r-+
m
-,,.
"c?.<,lr.cnv.
3'
RE3IV
NENUITE# "%Flecha a l a izquierda", IDM-FLECHIZQ
MEFJUXTEM "Fklecha a la derecha", IDM-FLECHDER
END
END
*I
MENLIITEM "Skiquiente canal", IDM-SIGCANAL
/x
.. . ", IDM-ACERCADE
MENUITEM "ARccePca de
+/
,
MENUITEM "&Terminar"
IDM-TERMINA
END
ND
ame Modelo
ESCRIPTION 'Programa modelo de Objectwindows'
XETYPE WINDOWS
DDE PRELOAD MOVEABLE DISCARDABLE
ñTA PRELOAD MOVERBLE MULTIPLE
ERPSIZE 8192
TACKSTZE 8192
I
_
,I"._, *-..- ~..
~-
! firchivo\MenuGraf .h
$ e f i n e lnM-AUMENTA
d e f i n e IDM-SIGGRAF
d e f i n e TDM-RASTREA
1O 0
101
1 o2
+#define IDM-FLECHJ7B
S e f i n e TDM-FLFCHDFR
1O 2
l e f i n e JDM-SIGCANAL
103
W d e f i n e TDM-ACERCADC
104+/
lef ine IDM-TERMINA
105
103*/
Archivos contenidos en G r a f i c o s . P r j J
-af icos.Cpp
?nuGr.af.RC
>de l o . Def
:.cw
2. CPP
include "dc.hpp*
2viceContext::DeviceContextíHWND hwndi
hwindow = hwnd;
hdc = GetDCihwnd);
GetTextMetricsO;
ff
//
save the current window
get a device context
eviceContext::DeviceContextiDeviceContextk
source)
h d c = source.CreateCompatibleDCOi,
h W i ndow = Source. Wi ndow i
) ;
GetTextMetricsO;
eviceContext::DeviceContextíHWNiJ
hwnti, char+ driver,
char* type, char+ port,
char+ data)
:/ save the current window
hwindow = hwnd;
hdc = CreateDCidriver, type, port, data);
GetTextMetricsí) ;
eviceContext::*DeviceContextO
ReleaseDC ihwi ndow, hdc) ;
,'/
ele ease device context
ifndef DCHFF
define DCHFF
include <windows.h>
include <strinq.h>
las5 Devicecontext C
rotec ted :
HWND hwindow;
HDC hdc;
TEXTMETRIC tm;
void GetTextMetricsO;
db1 ic:
DeviceContextiHWND);
DeviceContextiDeviceContext&) ;
DeviceContextiHWND, char+, char+, char+, char.+ = O ) ;
HWND W i n d o w 0 (return hwindowi)
HDC D C O {return hdc;}
void Textouttint, int, chars);
int DrawTextichar+, RECT,,
WORD);
int CharHeightO;
int C h a r W i d t h O ;
DWORD SetTextColor(C0LORREF Color);
DWORD GetTextColorO;
WORD SetTextAliqniint mode);
WORD GetTextAlignO;
DWORD GetTextExtent ichari string, int length);
int GetTextFaceiint length, char+ name);
int SetTextJustificationiint extra, int count);
HANDLE SelectObjectiHANDLE h0bject);
BOOL DeleteObjectíHANDLE hObject);
int SetBkModeiint mode);
int G e t B k M o d e O ;
DWORD SetBkColoriCOLORREF color);
DWORD GetBkColor ( 1 ;
DWORD SetBrushOrq(int x, int y ) ;
DWORD GetBrushOrgO I
BOOL LineTotint x, int y ) ;
DWORD MoveTo(irtt x, irit y ) ;
i n t SetROFZtint model;
int G e t R O P Z O ;
int SetTextCharacterExtraiint extra);
int SetTextCharacterExtraO;
i nt SetPlapMode i
i n t mode) ;
i n t GetMapModeO;
int SetPDlyFillMOdeiint mode);
i n t SetFolyFillModeO;
int SetStretchBltModeiint mode);
i n t GetStretchBltModeO;
BOOL BitBlt(int :<, int y.
_ w L . . ~ ~ ~ - c - ~ r _ E , . u . I ~ " _ ^ I o I - l x I __e
.
"'.i-.;f-=
f. qt h e i.
I
H i K hdcCource,
int :<-siDi*rce, int y-sourc:e,
DWCIRD rop = SRCCOPY) ;
BOOL PatBltíint x , int y ,
int width, i n t height,
DWORD pop = PATCOP'i);
DWORD SetViewportExt (int x , irtt y ) 8
DWORD GetViewportExt O ;
DWORD SetViewportOrgiint x, int y ) ;
DWORD GetViewportOrgO;
DWORD SetWindowExt (int x, int y ) ;
DWORD GetWindowExt ( ) ;
DWORD SetWindowOruiint x , int y ) ;
DWORD CetWindowOrgi 1 ;
' ~ '
''.
. ''.
HDC CreateCompatibleDCO:
BOOL DPtoLP(LPPOXNT, int);
irtt Escape(int. int = O, LPSTR = O, LPSTK =
"DeviceContext O ;
O);
I
?line void DeviceContext::GetTrxtMetr.icsO
::Get TextMet r i c s i
h d c , &tm) ;
?line void DeviceContext
::Textout (Rdc, x,
y,
?line int DeviceContext::DrawText(char?f. string,
RECT, IpRect,
WORD wFormat)
return ::DrawText (hdc, (LPSTR) string,
strlen(string), (LPRECT) IpRect,
wFormat ) ;
?line irit DeviceContext::CharHeightO
return tm.tmHeight + tm.tmExternalLeading;
71
)
i ne i nt Dev icecontext: :CharWidth i
return tm.tmAveCharWidth;
?line DWORD DeviceContext::SetTextCoior(COLORREF
return ::SetTextColorihdc, color);
riline DWORD DeviceContext::GetTextColorO
return ::GetTextColor(hdc);
nline WORD D e v i c e C o n t e x t : : S e t T e x t A l i g n ( i n t
return ::SetTextAlign(Rdc, mode);
mode)
color.)
.,..-
1
,-
I
. . .
nline DWORñ DeviceCDntext::GetTextExt.entíchar*
string,
int length)
return ::GetTextExtentihdc,
string, length);
nline i n t DeviceContext::GetTextFace'iint
leiigth,
char+ name)
return ::GetTextFace(hdc, length, name) i
nline int DeviceContext::SetTextJustification(int
extra,
int count)
return ::SetTextJustification(hdc,
extra, count);
?line HANDLE DeviceContext::BelectOb,jectiHANDLE
return ::SelectObjectíhdc,
hObject)
hObject);
,aline BOOL DeviceContext::DeleteObjectiHANDLE
hObject)
return : :Deleteobject ihObject) 8
9 1i ne
i nt Devicecontext : :SetBkMode í i nt mode)
return ::SetBkModeihdc. mode);
?line i n t DeviceC0ntext::GetBkModeO
return ::GetBkMode(hdc);
?line DWORD DeviceContext::SetBkCoioriCOLORREF
return ::SetBkColor(hdc,
COlOP)
color);
nline DWORD DeviceC0ntext::GetBkColot-O
return ::GetBkColor(hdc);
nline DWORD DeviceContext::SetBrushOrgíint
return ::SetBrushOrg(hdc,
x, int y )
x, y ) ;
nline DWORD DeviceContext::GetBrushOrqO
return : :GetBrushOrg í hdc) i
n l i n e ROOL D e v i c e C o n t e x t : : L i n e T o ( i n t
x,
int y )
return : :MoveToihdc, x, y )
:
nline int DeviceContext::SetROPZiint
return ::SetROPZihdc,
int y )
x,
nline DWORD DeviceContext::MoveToiint
mode)
mode);
nline i n t DeviceContext::GetROPZ()
return ::GetROPZ(hdc);
nline int DeviceContext::SetTextCharacterExtraiint
return ::SetTextCharacterExtraíhdc,
extra)
extra);
nline int DeviceContext::GetTextCharacterExtraO
return : : G e t T e x t C h a r a c t e r E x t r a i h d c ) ;
nline i n t DeviceContext::SetMapModelint
retut-n ::SetMapModeihdc,
mode)
mode);
nline int DeviceContext::GetMapModeO
return ::GetMapMode(hdc);
?line int DeviceContext::SetPolyFillflodeiint
return ::SetPolyFillModelhdc,
mode)
mode):
?line int DeviceContext::GetPolyFillflodeO
return ::GetPolyFillModeihdc);
nline int DeviceContext::SetStretchBltModeiint
return ::SetStretchBltModeihdc, mode);
riline int DeviceContext: :GetStretchBltModeO
return ::GetStretchBltModeihdc);
nline BüOL DeviceC0ntext::BitBltiint
x, irrt y ,
int width, int height,
HDC hdcSource,
i n t x-source, int y-source,
DWORD rop)
mode)
r,liv,e BOOL DE.:/iCE!C:orit.e:(t::PatBlti,/,t
int ,*idth, int height,
DWORD ;Pop)
return ::PatBltihdc,
):,
y,
width,
x.
ifit
y,
height, pop);
,?lineDWORD DeviceCatntext::SetViewpor.tExt(irit x, int
return : :CetViewportExt íhdc, x ,
y)
y!';
ne DWORD Devicecontext: :GetViewportExt O
return ::GetViewportExt(hdc);
ne DWORD D e v i c e C o n t e x t : : S e t V i e w p o i t O r g ( i n t
return ::CetViewportOrgíhdc, x,
x, int
y)
j4;
?line DWORD DeviceContext: GetViewpoitOrgO
return ::GetViewportOrq hdc) ;
?line DWORD Devicecontext: SetWindowExt (int x ,
return ::SetWindowExtíhdc, x,
int y )
y ) ;
?line DWORD DeviceContext::GetWindowExtO
return ::GetWindowExtihdc);
?line DWORD DeviceContext::SetWindowOrg(int
x, irit y )
return ::SetWindowOrqíhdc, x, 7 ) ;
?line DWORD DeviceContext::GetWindowOrgO
return ::GetWindowOrgíhdc)i
?line HDC DeviceContext::CreateCompatibleDCO
return ::CreateCompatibleDC(hdc);
?line BOOL DeviceContext::DPtoLP(LPPOJNT points,
int count)
return ::DPtoLPíhdc, points, count);
nline BOOL DeviceContext::Escapeíint code, int length,
LPSTR in, LPSTR out)
ondi f
.
i nc 1 cid e " pc PI pp "
aintContext::PaintContextiHWND hwnd)
: Devicecontext ihwrid)
BeginPaintihwnd, a p s ) ;
aintcontext: :"Paintcontext O
EndPaint (hwiridow, & P S I :
ifndef PCHPP
iefine PCHPP
include "dc.hpp"
I
ass Paintcontext: public DeViCeCDnteXt
PAINTSTRUCT psi
kblic:
PaintContextiHWND);
BOOL Arciint, int, int, irit, in?., int, int, irk);
BOOL Polyline(LPPOiNT, int);
BOOL Ellipseiint, int, int, intli;
BOOL Pieiint, int, int, int, init, int, int, int);
BOOL Poly9otl(LPPOINT, int) i
BOOL Rectanqleiint, int, int, lint);
BOOL RoundRectiint, int, int, iiqt, int, int);
"Paintcontext O i
.line BOOL PaintContext::Arciint XI, int yl, int x2, int y2,
int x3, int y3, int x4, int y4)
return ::Arcíhdc, x l , y l , x2, y2, x3, y3, x4, y4)i
.iine BOOL PaintContext::Polyline(LPPOINT
vertex, int count)
retuvn ::Palylineíhdc, vertex, count);
xl, int yl, int x2, int y2)
nine BOOL PaintC0ntext::Ellipseiint
return ::Ellipseihdc, xi, y],
XZ,
y2)i
line BOOL PaintContext::Pieiint xi, int y], int x2, int y2,
int x3, int y3, int x4, int y41
return ::Pie(hdc,
xi, y],
x2,
y2, x3, y3, x4, y4)1
.line BOOL PaintContext::Polyqon(LPPOINT
vertex, irit count)
return ::Polygonihdc, vertex, 'count);
nine BOOL PaintContext::Rectanqleiint
x l , irit yl, int x2, int y2!
return ::Rectangleihdc, xl, yl, x2, y2)2
xi, int y],
line BOOL PaintCantext::RoundRectlint
int x3, int y31
int x2, int yZ,
return ::RoundRectihdc, XI, yl, x2, y2, x 3 , y3)i
Descargar