Páginas

domingo, 27 de noviembre de 2011

Mapeo de Windows





//---------------------------------------------------------------------------

#include
#pragma hdrstop

#include "Unit1.h"
#include

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

void TForm1:: InitializeViewPort (void)
{
// Calcula ancho y alto del dibujo
int DrawingWidth = DrawingRect.Right - DrawingRect.Left;
int DrawingHeight = DrawingRect.Top - DrawingRect.Bottom;

// Establece el modo de mapeo MM_ANISOTROPIC.
SetMapMode(PaintBox1-> Canvas-> Handle, MM_ANISOTROPIC);

// Ahora el tamaño de la ventana para que coincida con el ancho de dibujo. La anchura es siempre 20,0
// (+ - 10), representado por un ancho entero de 20000. La altura varía
// De acuerdo con el control deslizable.
// /10
SetWindowExtEx(PaintBox1-> Canvas-> Handle,
DrawingWidth,
DrawingHeight,
NULL);

// Establece la ventana gráfica. El argumento negativo invierte el eje Y.
SetViewportExtEx(PaintBox1-> Canvas-> Handle, PaintBox1->Width, PaintBox1->Height, NULL);

// Ventana de origen debe ser el punto 0,0.
SetWindowOrgEx(PaintBox1-> Canvas-> Handle, 0, 1000, NULL);

// Viewport origen es el píxel, donde debe ser el origen de la ventana dibujada.
// Este es el centro de la caja de pinturas.
SetViewportOrgEx(PaintBox1-> Canvas-> Handle, 0, PaintBox1->Height, NULL);
}

void TForm1:: DrawGraph(void)
{
// Llenar en un fondo negro.
//PaintBox1-> Canvas-> Brush-> Color = clBlack;
PaintBox1-> Canvas-> Brush-> Color = clBlue;
PaintBox1-> Canvas-> FillRect (DrawingRect);

// Seleccionar una pluma blanca y dibujar los ejes x e y.
PaintBox1-> Canvas-> Pen-> Color = clWhite;
PaintBox1-> Canvas-> Pen->Width = 1;
PaintBox1-> Canvas-> MoveTo (DrawingRect.Left, 0);
PaintBox1-> Canvas-> LineTo (DrawingRect.Right, 0);
PaintBox1-> Canvas-> MoveTo (0, DrawingRect.Top);
PaintBox1-> Canvas-> LineTo (0, DrawingRect.Bottom);

// Ahora dibuja una gráfica de y = sen. Hay que dividir por 1000 antes de
// Se llama pecado () para convertir a nuestra enteros a un flotador. Entonces
// Multiplicar por 1000 después de volver a convertir a enteros.
PaintBox1-> Canvas-> MoveTo (DrawingRect.Left, 0);
for (int j = DrawingRect.Left; j <= DrawingRect.Right; j += 5)
PaintBox1-> Canvas-> LineTo (j, (int) (1000 * sin (float (j) / 1000)));
}

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
//el Rectangulo tiene su tamaño de dibujo en unidades ligicas
// el dibujo debe de estar en enteros. por lo tanto sera entero = float * 1000 para convertirlo
DrawingRect.Left = -10000;
DrawingRect.Right=10000;
DrawingRect.Top=1000 * TrackBar1->Position; //el trackbar comienza en 5
DrawingRect.Bottom=-1000 * TrackBar1->Position;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
InitializeViewPort();
DrawGraph();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
DrawingRect.Top = 1000 * TrackBar1->Position;
DrawingRect.Bottom = -1000 * TrackBar1->Position;

InitializeViewPort();
DrawGraph();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
InitializeViewPort();
DrawGraph();
}
//---------------------------------------------------------------------------

No hay comentarios:

Publicar un comentario