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