Sunteți pe pagina 1din 15

Ing.

Ricardo Castaeda
UNIVERSIDAD NACIONAL DE INGENIERA
FACULTAD DE INGENIERA MECNICA
CURSO MB544
COMPUTACION II
Clase 11
2006
3. GRAFICOS EN VISUAL C
3.1. La clase CDC permite definir una clase de objetos denominados contextos de
dispositivo (DC). Cuando se quiere dibujar en un dispositivo grfico como una
pantalla o una impresora, primero a! que obtener un identificador de un contexto
de dispositivo que represente al dispositivo f"sico ! que delimite el rea donde se
1
Ing. Ricardo Castaeda
puede pintar. #sto es porque una aplicaci$n %indo&s no accede directamente al
ard&are de un dispositivo grfico cuando quiere presentar un grfico o texto
formateado, sino que utili'a una interfa' de dispositivo grfico ((D)) que permite
reali'ar la presentaci$n grfica de una forma sencilla.
De la clase CDC se derivan las clases CClientDC, C&indo&DC, CpaintDC !
C*eta+ileDC, cada una de ellas con fines espec"ficos para dar soluci$n al proceso
en curso.
,ara utili'arla a! cuatro pasos-
.btener el DC de un objeto determinado (ventana, impresora, etc.)
#stablecer los atributos de dibujo (color, plumas).
/tili'ar la 0,) de %indo&s para dibujos en el DC.
1iberar el DC una ve' que se a!a terminado de dibujar.
3.2. Tipos de co!e"!o de disposi!i#o$
1a obtenci$n del contexto es algo fundamental. %indo&s proporciona una amplia
gama, como- Contexto para dibujar en pantalla, para acceder a la impresora, otro
para recabar informaci$n.
DC de pa!alla #l DDC o Displa! Device Context se utili'a para acceder a los
objetos existentes en pantalla . ,ara crear este tipo de contexto se utili'a dos
funciones- 2egin,aint() ! (etDC(), para la liberaci$n tenemos- #nd,aint() !
3eleaseDC().
Dc de I%p&eso&a #l ,DC o ,rinter Device Context es el DC que se utili'a para
acceder a cualquier tipo de
3.3. La clase C'ai!DC se utili'a con la funci$n .n,aint . para visuali'ar texto o
grficos en el rea de trabajo de una ventana en respuesta a un mensaje
4*5,0)67( se ejecuta la funci$n .n,aint) a! que crear un objeto DC
perteneciente a la clase CpaintDC o una clase derivada de ella.
3.4. La clase C(&)s* permite definir el pincel a utili'ar con las funciones de dibujo.
#sta erramienta afecta a la forma en la que es pintado el interior de las figuras
cerradas. Cuando crea un contexto de dispositivo, existe un pincel por defecto que
pinta de blanco el interior de las figuras cerradas.
3.5. La clase Cpe permite definir la pluma a utili'ar con las funciones de dibujo.
#sta erramienta afecta a la forma en la son dibujadas las l"neas- l"neas s$lidas,
l"neas discontinuas, etc. Cuando se crea un contexto de dispositivo, existe una
pluma por defecto que dibuja l"neas negras s$lidas que tienen anco de un pixel.
A'LICACI+N DE GRAFICOS 0, Como aplicaci$n de simple documento desarrollemos
una aplicaci$n para dibujar un c"rculo-
2
Ing. Ricardo Castaeda
8iga las opciones indicadas

1) Ahora abra el archivo Graficos1Doc.h y modifique la declaracin de la siguiente
manera
3
Ing. Ricardo Castaeda

class CGraficos1Doc : ublic CDocument
!rotected: "" create from seriali#ation only
CGraficos1Doc$%&
D'C(A)'*D+,C)'A-'$CGraficos1Doc%
"" Attributes
ublic:
"" .erations
ublic:
"" .verrides
"" Class/i#ard generated virtual function overrides
""!!A01*23)-4A($CGraficos1Doc%
ublic:
virtual 5..( .n,e6Document$%&
virtual void 7eriali#e$CArchive8 ar%&
""99A01*23)-4A(
"" 3mlementation
ublic:
virtual :CGraficos1Doc$%&
;ifdef *D'54G
virtual void Assert2alid$% const&
virtual void Dum$CDumConte<t8 dc% const&
;endif
rotected:
"" Generated message ma functions
rotected:
""!!A01*=7G$CGraficos1Doc%
"" ,.-' > the Class/i#ard 6ill add and remove member functions here.
"" D. ,.- 'D3- 6hat you see in these bloc?s of generated code @
""99A01*=7G
D'C(A)'*='77AG'*=AA$% 9&
2) 'l siguiente aso serB la declaracin de los datos miembro de la clase vistaC abrimos el
archivo Graficos12ie6.h
class CGraficos12ie6 : ublic C2ie6
! rotected: "" create from seriali#ation only
CGraficos12ie6$%&
D'C(A)'*D+,C)'A-'$CGraficos12ie6%
"" Attributes
ublic:
CGraficos1DocD GetDocument$%&
"" .erations
E
int m*osicion<&
int m*osiciony&
int m*osicion<&
int m*osiciony&
Ing. Ricardo Castaeda
ublic:
"" .verrides
"" Class/i#ard generated virtual function overrides
""!!A01*23)-4A($CGraficos12ie6%
ublic:
virtual void .nDra6$CDCD DC%& "" overridden to dra6 this vie6
virtual 5..( AreCreate/indo6$C)'A-'7-)4C-8 cs%&
rotected:
virtual 5..( .nAreareArinting$CArint3nfoD 3nfo%&
virtual void .n5eginArinting$CDCD DCC CArint3nfoD 3nfo%&
virtual void .n'ndArinting$CDCD DCC CArint3nfoD 3nfo%&
""99A01*23)-4A(
"" 3mlementation
ublic:
virtual :CGraficos12ie6$%&
;ifdef *D'54G
virtual void Assert2alid$% const&
virtual void Dum$CDumConte<t8 dc% const&
;endif
rotected:
"" Generated message ma functions
rotected:
""!!A01*=7G$CGraficos12ie6%
"" ,.-' > the Class/i#ard 6ill add and remove member functions here.
"" D. ,.- 'D3- 6hat you see in these bloc?s of generated code @
""99A01*=7G
D'C(A)'*='77AG'*=AA$%
9&
3) Ahora inicialice los datos miembro de la clase de documento en la funcin
miembro .n,e6Document$% de la clase CGraficos1DocC ara lo cual aertura el
archivo GraficosDoc.c y busque la funcin mencionada:
5..( CGraficos1Doc::.n,e6Document$%
!if $@CDocument::.n,e6Document$%%
return 0A(7'&
"" -.D.: add reinitiali#ation code here
"" $7D3 documents 6ill reuse this document%
return -)4'&
9
4) Ahora entre a =0C Class/i#ard con C-)(F/ y se le resentara la siguiente
ventana y haga clic en edit code ara escribir lo siguiente:
G
m*osicion<HGI&
m*osicionyHGI&
Ing. Ricardo Castaeda
5) 'scribir:
void CGraficos12ie6::.n3nitial4date$%
! C2ie6::.n3nitial4date$%&
9
6) Aara deslegar el circulo abra Graficos12ie6.c y locali#e .nDra6$% y escriba el
siguiente cdigo:
void CGraficos12ie6::.nDra6$CDCD DC%
! CGraficos1DocD Doc H GetDocument$%&
A77')-*2A(3D$Doc%&
"" -.D.: add dra6 code for native data here
"" define los limites rectangulares a dibuJar
)'C- rect&
rect.left H m*osicion<>2I&
rect.to H m*osiciony >2I&
rect.bottom H m*osiciony F 2I&
rect.right H m*osicion< F 2I&
"" DibuJa el circulo
DC>K'llise$8rect%&
9
L
"" 7e obtiene el auntador al documento
CGraficos1DocD Doc H GetDocument$%&
"" Actuali#a los datos miembro de la vista con los valores
"" Corresondientes del documento
m*osicion< H Doc>Km*osicion<&
m*osiciony H Doc>Km*osiciony&
Ing. Ricardo Castaeda
7) Aara dibuJar el circulo abrir el =0C Class/i#ard y seleccionar el siguiente evento :
Class name: CGraficos12ie6
.bJect3D : CGraficos12ie6
=essage: /=*(54--.,D./, y escriba lo siguiente:

void CGraficos12ie6::.n(5uttonDo6n$43,- n0lagsC CAoint oint%
!
m*osicion< H oint.<&
m*osiciony H oint.y&
"" llamar a la funcion invalidate ara eJecutar .nDra6$%
3nvalidate$%&
"" '<trae el auntador al documento
CGraficos1DocD Doc H GetDocument$%&
Doc>Km*osicion< H m*osicion<&
Doc>Km*osiciony H m*osiciony&
""3ndicar que el documento fue modificado
Doc>K7et=odified0lag$-)4'%&
C2ie6::.n(5uttonDo6n$n0lagsC oint%&
9
Compilar , Ejecutar y suerte.
M
Ing. Ricardo Castaeda
A'LICACI+N DE GRAFICOS 02
La Clase Cfont Crear un nuevo royecto llamado Graficos2 y dar .N a
continuacin seleccionar 7ingle Document y 0inOsh.
Ahora crear en la clase CGraficos22ie6 la funcin que recibirB el nombre
7ho60onts$CDC FDC%C ara ello hacer clic derecho sobre la clase y elegir Add =ember
0unction tal como se muestra:
+ debe aarecer:
+ escribimos
P
Ing. Ricardo Castaeda
void CGrafico22ie6::7ho60onts$CDC DDC%
! (.G0.,- log0ont&
log0ont.lfQeightH P&
log0ont.lf/idth HI&
log0ont.lf'scaement H I&
log0ont.lf.rientation HI &
log0ont.lf/eight H 0/*,.)=A(&
log0ont.lf3talic H I&
log0ont.lf4nderline H I&
log0ont.lf7tri?e.ut H I&
log0ont.lfChar7et H A,73*CQA)7'-&
log0ont.lf.utArecision H .4-*D'0A4(-*A)'C37&
log0ont.lfRuality H A)..0*R4A(3-+&
log0ont.lfAitchAnd0amily H 2A)3A5('*A3-CQS 00*).=A,&
strcy$log0ont.lf0ace,ameCTComic 7ans =7T%&
"" 3nicia la osicion del te<to en la ventana
43,- osition H I&
"" Crea y muestra P fuentes de eJemlo
for $ 43,- <HI& <UP&FF<%
! "" 0iJa lanueva altura de la fuente
log0ont.lfQeight H 1LF$<DP%&
"" Crea una nueva fuente y la selecciona en el DC
C0ont font&
font.Create0ont3ndirect$8log0ont%&
C0ontD old0ont H DC>K7elect.bJect$8font%&
""3mrime el te<to con lanueva fuente
osition FH log0ont.lfQeight&
DC>K-e<t.ut$2ICositionCT-e<to de 'JemloT%&
"" restaura la fuente anterior en el DC
DC>K7elect.bJect$old0ont%&
9
9
Ahora ubique la funcion .,Dra6$% de la clase CGrafico22ie6 y escribir solo lo indicado
void CGrafico22ie6::.nDra6$CDCD DC%
!
CGrafico2DocD Doc H GetDocument$%&
A77')-*2A(3D$Doc%& "" -.D.: add dra6 code for native data here
7ho60onts$DC%&
9
Suerte y ejecute
V
7ho60onts$DC%&
Ing. Ricardo Castaeda
A'LICACI+N DE GRAFICOS 0-
D#8033.11#*.8 10 8#3)# D# +./3)#3 /7)1)906D. 108 C108#8-
C.&)s*/ C'e ! C'ai!DC$
8iga las opciones indicadas
1I
Ing. Ricardo Castaeda

11
Ing. Ricardo Castaeda
12
Ing. Ricardo Castaeda
3ngrese cdigo en la funcin .,*AA3,-C que se obtiene
'l cdigo escrito es:
void C0I12ie6::.nAaint$%
!
CAaintDC dc$this%& "" device conte<t for ainting
static D/.)D d6Color WVX H !)G5$ICICI%C )G5$2EGCICI%C )G5$IC2EGCI%C
)G5$ICIC2EG%C )G5$2EGC2EGCI%C )G5$2EGCIC2EG%C
)G5$IC2EGC2EG%C )G5$12MC12MC12M%C )G5$2EGC2EGC2EG% 9&
13
Ing. Ricardo Castaeda
int iCJCltituloCang&
double yC y&

C5rush n*brocha&
C5rush Dv*brocha&
CAen n*incel&
CAen Dv*incel&
"" Crea suerficie de dibuJo
dc.7et=a=ode$==*37.-).A3C%& ""'scala de sistema
dc.7et/indo6'<t$GIICGII%&"" -amaYo de la ventana
dc.7et2ie6ort'<t$m*c<ClientC >m*cyClient%&"" -amaYo del Brea de dibuJo
dc.7et2ie6ort.rg$m*c<Client"2IC m*cyClient"2%&""establece origen de coordenadas
ang H I&
y H I.I&
n*incel.CreateAen$57*7.(3DC2C)G5$ICICI%%&
v*incelH dc.7elect.bJect$8n*incel%&
""dibuJa los eJes de coordenadas <8y
dc.=ove-o$IC2EI%&
dc.(ine-o$IC>2EI%&
dc.=ove-o$ICI%&
dc.(ine-o$EIICI%&
dc.=ove-o$ICI%&
"" DibuJa el esectro de la onda de 0ourier
for$ i H I& iUH EII& iFF%
! for$J H 1& J UH nterms & JFF%
!
y H $ 1GI.I"$$2.IDJ%>1.I%%D sin$$$JD2.I%>1.I%DI.I1GMIPDang%&
y H y F y&
9
dc.(ine-o$iC $int%y%&
y>Hy&
angFF&
9
"" Arearacin ara rellenar el interior del esectro
n*brocha.Create7olid5rush$d6ColorWMX%&
v*brocha H dc.7elect.bJect$8n*brocha%&
dc.'<t0lood0ill$1GIC1ICd6ColorWIXC 0(..D03((5.)D')%&
dc.'<t0lood0ill$3IIC>1ICd6ColorWIXC0(..D03((5.)D')%&
"" 3mrime titulo
ltitulo H strlen$mititulo%&
dc.-e<t.ut$2II>$ltituloDP"2%C1PGC mitituloCltitulo%&
""5orra los obJetos
dc.7elect.bJect$v*brocha%&
n*brocha.Delete.bJect$%&
1E
Ing. Ricardo Castaeda
"" -.D.: Add your message handler code here
"" Do not call C2ie6::.nAaint$% for ainting messages
9
A continuacin ara maneJar el tamaYo de la ventana ingrese cdigo en la funcin .n7i#e
que se obtiene
3ngrese el siguiente cdigo
void C0I12ie6::.n7i#e$43,- n-yeC int c<C int cy%
! C2ie6::.n7i#e$n-yeC c<C cy%&
m*c<Client H c<&
m*cyClientH cy&
"" -.D.: Add your message handler code here
9
Para completar realice las siguientes declaraciones en F1 !ie".cpp
;include Tstdaf<.hT
;include T01.hT
;include T01Doc.hT
;include T012ie6.hT
;ifdef *D'54G
;define ne6 D'54G*,'/
;undef -Q37*03('
static char -Q37*03('WX H **03('**&
;endif
;include Tmath.hT "" # P#R$IR %& #'() *+, -#* %&C-#R#CI+,&*
int m*c<ClientCm*cyClient&
int nterms H 1I&
char mitituloWPIX H T1I armonicos de 0ourierT&
:
1G

S-ar putea să vă placă și