Problemas al dibujar un cuadro con el Mouse en Turbo C
Tengo el siguiente código acerca de un programa que estoy haciendo similar al paint... Por lo pronto solo puedo dibujar cuadritos de un solo tamaño por todos lados de mi pantalla en modo gráfico. Es solo que no se como hacer para que se hagan cuadros de cualquier tamaño y figuras como círculos, estrellas, y cosas por el estilo.
Estoy algo angustiado porque ya le intente de muchas formas...
El programa que hace cuadros se llama void cuadro()
Y lo mando a llamar desde el programa void selecciona()
Ya casi en la parte final.
La cosa esta en que no se como obtener mis coordenadas en por y en y dando un clic y guardar esos valores de X1 y Y1
Y como guardar los valores en X2 y Y2 Para así trazar cuadros y figuras de cualquier tamaño, Me dijeron que tengo que hacer un do while para que se haga por dos ocasiones y así tome las coordenadas de los dos clic y después traze la figura deseada.
Con este código si me explican como obtener las coordenadas en por y en Y
Por favor
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <graphics.h>
#include <string.h>
#include <ctype.h>
int N[32][32];
struct registro {
char nombre[15];
int pixel[435];
int edo;
} R ;
FILE *arch;
void mouse(int &a,int &b,int &c,int &d )
{
union REGS inregs, outregs;
inregs.x.ax = a;
inregs.x.bx = b;
inregs.x.cx = c;
inregs.x.dx = d;
int86( '\x33' , &inregs, &outregs );
a = outregs.x.ax ;
b = outregs.x.bx ;
c = outregs.x.cx ;
d = outregs.x.dx ;
}
void activa()
{ int a=0,b,c,d;
mouse(a,b,c,d);
}
void pon()
{ int a=1,b,c,d;
mouse(a,b,c,d);
}
void quita()
{ int a=2,b,c,d;
mouse(a,b,c,d);
}
void mcoord ( int &a, int &b, int &x, int &y )
{
mouse(a,b,x,y);
}
void mgoto( int x, int y )
{ int a=4,b;
mouse(a,b,x,y);
}
void columnas ( int low, int hi )
{ int a=7,b;
mouse(a,b,low,hi);
}
void renglones ( int low, int hi )
{ int a=8,b;
mouse(a,b,low,hi);
}
void inicializa()
{ int gd=DETECT, gm ;
initgraph(&gd,&gm, "C:\\TC\\BGI");
}
void cuadro(int x, int y, int color) /*color*/
{
quita();
setcolor(color);
setfillstyle(1,color)
rectangle(x,y,x+20,y+20);
pon();
}
void box(int x1,int y1,int x2,int y2,int relleno,int color)
{
int poly[8];
poly[0]=x1;
poly[1]=y1;
poly[2]=x2;
poly[3]=y1;
poly[4]=x2;
poly[5]=y2;
poly[6]=x1;
poly[7]=y2;
setfillstyle (relleno,color);
fillpoly (4,poly);
}
void silueta()
{ int i,j;
quita();
clearviewport();
clearviewport();
box(0,0,100,480,10,BLUE); //LIENZO AZUL
box(0,450,680,480,10,BLUE); //LIENZO AZUL
box(0,0,680,15,2,BLUE); //BARRA DE TITULO
outtextxy(10,2,"Sin titulo - Graficador con Mouse");
outtextxy(625,2,"X");
box(100,15,680,450,1,WHITE); //LIENZO BLANCO
settextstyle(2,0,0);
box(10,50,90,30,1,LIGHTBLUE); outtextxy(15,34,"¯¯ Archivo");
box(10,70,90,50,1,LIGHTBLUE); outtextxy(15,54,"¯¯ Edici¢n");
box(10,90,90,70,1,LIGHTBLUE); outtextxy(15,74,"¯¯ Ver");
box(10,110,90,90,1,LIGHTBLUE); outtextxy(15,94,"¯¯ Imagen");
box(10,130,90,110,1,LIGHTBLUE); outtextxy(15,114,"¯¯ Colores");
box(10,150,90,130,1,LIGHTBLUE); outtextxy(15,134,"¯¯ Ayuda");
box(10,200,50,170,1,LIGHTBLUE); box(50,200,90,170,1,LIGHTBLUE);
box(10,230,50,200,1,LIGHTBLUE); box(50,230,90,200,1,LIGHTBLUE);
box(10,260,50,230,1,LIGHTBLUE); box(50,260,90,230,1,LIGHTBLUE);
box(10,290,50,260,1,LIGHTBLUE); box(50,290,90,260,1,LIGHTBLUE);
box(10,320,50,290,1,LIGHTBLUE); box(50,320,90,290,1,LIGHTBLUE);
for(i=0;i<6; i++) //COLORES
for(j=0;j<3; j++)
box(10+j*23.333333,300+i*23.333333,33.333333+j*23.333333,323.333333+i*23.333333,1,j+1); //COLORES
for(i=0;i<4; i++) //BARRA DE HERRAMIENTAS
for(j=0;j<2; j++)
box(10+j*35,155+i*35,45+j*35,190+i*35,1,1);
line(15,185,40,160); //DIBUJAR UNA LINEA
bar3d(50,185,75,160,0,0); //DIBUJAR UN CUADRADO
circle(28,208,10); //DIBUJAR CIRCULO
pon();
}
void archivo() //Z1
{ int z,z1;
z=0;
z1=1;
box(0,450,679,479,1,BLUE); //LIENZO AZUL
box(10,455,80,475,1,LIGHTBLUE); outtextxy(15,460,"®® Nuevo");
box(80,455,150,475,1,LIGHTBLUE); outtextxy(85,460,"®® Abrir");
box(150,455,220,475,1,LIGHTBLUE); outtextxy(155,460,"®® Guardar");
box(220,455,290,475,1,LIGHTBLUE); outtextxy(225,460,"®® Vista P");
// box(290,455,360,475,1,LIGHTBLUE); outtextxy(295,460,"®® Salir");
z1=0;
z=1;
}
void edicion() //Z2
{ int z,z2;
z=0;
z2=1;
box(0,450,680,480,1,BLUE); //LIENZO AZUL
box(10,455,80,475,1,LIGHTBLUE); outtextxy(15,460,"®® Cortar");
box(80,455,150,475,1,LIGHTBLUE); outtextxy(85,460,"®® Copiar");
box(150,455,220,475,1,LIGHTBLUE); outtextxy(155,460,"®® Pegar");
box(220,455,290,475,1,LIGHTBLUE); outtextxy(225,460,"®® Borrar T");
// box(290,455,360,475,1,LIGHTBLUE); outtextxy(295,460,"®® ");
z2=0;
z=1;
}
void ver() //Z3
{ int z,z3;
z=0;
z3=1;
box(0,450,680,480,1,BLUE); //LIENZO AZUL
box(10,455,80,475,1,LIGHTBLUE); outtextxy(15,460,"®® Regresar");
// box(80,455,150,475,1,LIGHTBLUE); outtextxy(85,460,"®® ");
// box(150,455,220,475,1,LIGHTBLUE); outtextxy(155,460,"®® ");
// box(220,455,290,475,1,LIGHTBLUE); outtextxy(225,460,"®® ");
// box(290,455,360,475,1,LIGHTBLUE); outtextxy(295,460,"®® ");
z3=0;
z=1;
}
void imagen() //Z4
{ int z,z4;
z=0;
z4=1;
box(0,450,680,480,10,BLUE); //LIENZO AZUL
box(10,455,80,475,1,LIGHTBLUE); outtextxy(15,460,"®® Girar");
box(80,455,150,475,1,LIGHTBLUE); outtextxy(85,460,"®® Atributos");
box(150,455,220,475,1,LIGHTBLUE); outtextxy(155,460,"®® Marca A");
// box(220,455,290,475,1,LIGHTBLUE); outtextxy(225,460,"®® ");
// box(290,455,360,475,1,LIGHTBLUE);...
Estoy algo angustiado porque ya le intente de muchas formas...
El programa que hace cuadros se llama void cuadro()
Y lo mando a llamar desde el programa void selecciona()
Ya casi en la parte final.
La cosa esta en que no se como obtener mis coordenadas en por y en y dando un clic y guardar esos valores de X1 y Y1
Y como guardar los valores en X2 y Y2 Para así trazar cuadros y figuras de cualquier tamaño, Me dijeron que tengo que hacer un do while para que se haga por dos ocasiones y así tome las coordenadas de los dos clic y después traze la figura deseada.
Con este código si me explican como obtener las coordenadas en por y en Y
Por favor
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <graphics.h>
#include <string.h>
#include <ctype.h>
int N[32][32];
struct registro {
char nombre[15];
int pixel[435];
int edo;
} R ;
FILE *arch;
void mouse(int &a,int &b,int &c,int &d )
{
union REGS inregs, outregs;
inregs.x.ax = a;
inregs.x.bx = b;
inregs.x.cx = c;
inregs.x.dx = d;
int86( '\x33' , &inregs, &outregs );
a = outregs.x.ax ;
b = outregs.x.bx ;
c = outregs.x.cx ;
d = outregs.x.dx ;
}
void activa()
{ int a=0,b,c,d;
mouse(a,b,c,d);
}
void pon()
{ int a=1,b,c,d;
mouse(a,b,c,d);
}
void quita()
{ int a=2,b,c,d;
mouse(a,b,c,d);
}
void mcoord ( int &a, int &b, int &x, int &y )
{
mouse(a,b,x,y);
}
void mgoto( int x, int y )
{ int a=4,b;
mouse(a,b,x,y);
}
void columnas ( int low, int hi )
{ int a=7,b;
mouse(a,b,low,hi);
}
void renglones ( int low, int hi )
{ int a=8,b;
mouse(a,b,low,hi);
}
void inicializa()
{ int gd=DETECT, gm ;
initgraph(&gd,&gm, "C:\\TC\\BGI");
}
void cuadro(int x, int y, int color) /*color*/
{
quita();
setcolor(color);
setfillstyle(1,color)
rectangle(x,y,x+20,y+20);
pon();
}
void box(int x1,int y1,int x2,int y2,int relleno,int color)
{
int poly[8];
poly[0]=x1;
poly[1]=y1;
poly[2]=x2;
poly[3]=y1;
poly[4]=x2;
poly[5]=y2;
poly[6]=x1;
poly[7]=y2;
setfillstyle (relleno,color);
fillpoly (4,poly);
}
void silueta()
{ int i,j;
quita();
clearviewport();
clearviewport();
box(0,0,100,480,10,BLUE); //LIENZO AZUL
box(0,450,680,480,10,BLUE); //LIENZO AZUL
box(0,0,680,15,2,BLUE); //BARRA DE TITULO
outtextxy(10,2,"Sin titulo - Graficador con Mouse");
outtextxy(625,2,"X");
box(100,15,680,450,1,WHITE); //LIENZO BLANCO
settextstyle(2,0,0);
box(10,50,90,30,1,LIGHTBLUE); outtextxy(15,34,"¯¯ Archivo");
box(10,70,90,50,1,LIGHTBLUE); outtextxy(15,54,"¯¯ Edici¢n");
box(10,90,90,70,1,LIGHTBLUE); outtextxy(15,74,"¯¯ Ver");
box(10,110,90,90,1,LIGHTBLUE); outtextxy(15,94,"¯¯ Imagen");
box(10,130,90,110,1,LIGHTBLUE); outtextxy(15,114,"¯¯ Colores");
box(10,150,90,130,1,LIGHTBLUE); outtextxy(15,134,"¯¯ Ayuda");
box(10,200,50,170,1,LIGHTBLUE); box(50,200,90,170,1,LIGHTBLUE);
box(10,230,50,200,1,LIGHTBLUE); box(50,230,90,200,1,LIGHTBLUE);
box(10,260,50,230,1,LIGHTBLUE); box(50,260,90,230,1,LIGHTBLUE);
box(10,290,50,260,1,LIGHTBLUE); box(50,290,90,260,1,LIGHTBLUE);
box(10,320,50,290,1,LIGHTBLUE); box(50,320,90,290,1,LIGHTBLUE);
for(i=0;i<6; i++) //COLORES
for(j=0;j<3; j++)
box(10+j*23.333333,300+i*23.333333,33.333333+j*23.333333,323.333333+i*23.333333,1,j+1); //COLORES
for(i=0;i<4; i++) //BARRA DE HERRAMIENTAS
for(j=0;j<2; j++)
box(10+j*35,155+i*35,45+j*35,190+i*35,1,1);
line(15,185,40,160); //DIBUJAR UNA LINEA
bar3d(50,185,75,160,0,0); //DIBUJAR UN CUADRADO
circle(28,208,10); //DIBUJAR CIRCULO
pon();
}
void archivo() //Z1
{ int z,z1;
z=0;
z1=1;
box(0,450,679,479,1,BLUE); //LIENZO AZUL
box(10,455,80,475,1,LIGHTBLUE); outtextxy(15,460,"®® Nuevo");
box(80,455,150,475,1,LIGHTBLUE); outtextxy(85,460,"®® Abrir");
box(150,455,220,475,1,LIGHTBLUE); outtextxy(155,460,"®® Guardar");
box(220,455,290,475,1,LIGHTBLUE); outtextxy(225,460,"®® Vista P");
// box(290,455,360,475,1,LIGHTBLUE); outtextxy(295,460,"®® Salir");
z1=0;
z=1;
}
void edicion() //Z2
{ int z,z2;
z=0;
z2=1;
box(0,450,680,480,1,BLUE); //LIENZO AZUL
box(10,455,80,475,1,LIGHTBLUE); outtextxy(15,460,"®® Cortar");
box(80,455,150,475,1,LIGHTBLUE); outtextxy(85,460,"®® Copiar");
box(150,455,220,475,1,LIGHTBLUE); outtextxy(155,460,"®® Pegar");
box(220,455,290,475,1,LIGHTBLUE); outtextxy(225,460,"®® Borrar T");
// box(290,455,360,475,1,LIGHTBLUE); outtextxy(295,460,"®® ");
z2=0;
z=1;
}
void ver() //Z3
{ int z,z3;
z=0;
z3=1;
box(0,450,680,480,1,BLUE); //LIENZO AZUL
box(10,455,80,475,1,LIGHTBLUE); outtextxy(15,460,"®® Regresar");
// box(80,455,150,475,1,LIGHTBLUE); outtextxy(85,460,"®® ");
// box(150,455,220,475,1,LIGHTBLUE); outtextxy(155,460,"®® ");
// box(220,455,290,475,1,LIGHTBLUE); outtextxy(225,460,"®® ");
// box(290,455,360,475,1,LIGHTBLUE); outtextxy(295,460,"®® ");
z3=0;
z=1;
}
void imagen() //Z4
{ int z,z4;
z=0;
z4=1;
box(0,450,680,480,10,BLUE); //LIENZO AZUL
box(10,455,80,475,1,LIGHTBLUE); outtextxy(15,460,"®® Girar");
box(80,455,150,475,1,LIGHTBLUE); outtextxy(85,460,"®® Atributos");
box(150,455,220,475,1,LIGHTBLUE); outtextxy(155,460,"®® Marca A");
// box(220,455,290,475,1,LIGHTBLUE); outtextxy(225,460,"®® ");
// box(290,455,360,475,1,LIGHTBLUE);...
Respuesta de magpe_89
-1