Изучение основных возможностей языка Си++ по управлению с помощью манипулятора «мышь»

Страницы работы

Содержание работы

Лабораторная работа №7

Перегрузка функций

Цель работы: Изучить принципы перегрузки функций

Задание: Написать объектно-ориентированную программу, перемещающую на экране любое графическое изображение при помощи манипулятора мышь, задействовать хотя бы одну кнопку мыши, применив перегрузку конструкторов.

Листинг программы:

#include <process.h>

#include <stdio.h>

#include <graphics.h>

#include <dos.h>

#include <conio.h>

#include <bios.h>

#include <iostream.h>

class gfx {

public:

void window (int,int,int,int,char *,int,int);

void c(void);

gfx (void);

gfx (int);

gfx     (char *);

} g1;

#define c_on(); _AX=1; geninterrupt (0x33);

#define c_off(); _AX=2; geninterrupt (0x33);

#define b ms_current.btn

#define x ms_current.h

#define y ms_current.v

class mice {

public:

void c_lim (int,int,int,int);

void c_set (int,int);

void c_sense (int,int);

void c_state (void);

void is_mouse (void);

void click_but (int,int);

} m1;

int take=0,yy1,yy2,n;

char *str;

struct ms_state {char btn;int h;int v;} ms_current;

void main (void)

{

 int ch;

 int i1=190,i2=70,i3=290,i4=190;

 cout<<"введите режим работы 1-ничего 2-int 3-char ";

 cin>>n;

 switch (n)

 {case 1: g1=gfx(); break;

  case 2: g1=gfx(1); break;

  case 3: {

  cout<<"введите заголовок ";

  cin>> str;

  g1=gfx(str); break;

 }

 }

 g1.window (i1,i2,i3,i4,"Example",BLACK,0);

 do

 {

  take=0;

  m1.c_state();

  switch (b)

   {

        case 0x01:

        {

        m1.click_but (i1+3,i2+3);

         if (take)

          {c_off();

           while (b==0x01)

                {

                 m1.c_state();

                 i1=x-50; i2=y-8;

                 if (i1<10) i1=10;

                 if (i2<20) i2=20;

                 i3=i1+100;i4=i2+120;

                 if (i3>630) i3=630;

                 if (i4>450) i4=450;

                 i1=i3-100; i2=i4-120;

                 clearviewport();

                 g1.window (i1,i2,i3,i4,"Example",BLACK,1);

                 delay(30);

                }

           g1.window (i1,i2,i3,i4,"Example",BLACK,0);

           c_on();

          }; break;}

   case 0x02:

   {

   m1.click_but (i1+3,i2+3);

         if (take)

          {c_off();

           while (b==0x02)

                {

                 m1.c_state();

                 clearviewport();

                 yy1=i2;yy2=i4;

                 g1.c();

                 i2=yy1;i4=yy2;

                 g1.window (i1,i2,i3,i4,"Example",BLACK,0);

                 delay(20);

                }

           c_on();

           break;

          }

   }}

 }while (!bioskey(1));

}

void gfx::window (int x1,int y1,int x2,int y2,char *tittle,int color,int ramka)

{

 setviewport (x1,y1,x2,y2,1);

 setcolor (WHITE);

 line (0,0,0,y2-y1);

 line (0,0,x2-x1,0);

 line (x2-x1-2,y2-y1-2,x2-x1-2,2);

 line (x2-x1-2,y2-y1-2,2,y2-y1-2);

 if (!ramka){

 rectangle (2,3,x2-x1-2,14);

 setcolor (LIGHTGRAY);

 line (x2-x1,y2-y1,x2-x1,0);

 line (x2-x1,y2-y1,0,y2-y1);

 line (2,16,2,y2-y1-2);

 line (2,2,x2-x1-2,2);

 line (3,16,x2-x1-3,16);

 setcolor (LIGHTBLUE);

 rectangle (1,1,x2-x1-1,y2-y1-1);

 line (3,15,x2-x1-3,15);

 setfillstyle (SOLID_FILL,LIGHTBLUE);

 floodfill (5,5,WHITE);

 setcolor (WHITE);

 outtextxy (5,5,tittle);

 setcolor (color);

 rectangle (3,17,x2-x1-3,y2-y1-3);

 setfillstyle (SOLID_FILL,color);

 floodfill (10,20,color);}

}

void mice::is_mouse (void)

{

 _AX=0;

 geninterrupt (0x33);

 if (_AX==0)

  {

   puts ("no mouse");

   delay (2000);

   exit (-1);

  }

}

void mice::c_set (int h_row,int h_column)

{

 static unsigned  c_mask[]={

 0x7fff,0x3fff,0x1fff,0x0fff,

 0x07ff,0x03ff,0x79ff,0x10ff,

 0x207f,0x783f,0x001f,0x0fff,

 0x1fff,0x3fff,0x7fff,0xffff,

 0x8000,0xc000,0xe000,0xf000,

 0xf800,0xfc00,0x8600,0xef00,

 0xdf80,0x87c0,0xffe0,0xf000,

 0xe000,0xc000,0x8000,0x0000,};

 struct REGPACK r;

 r.r_ax=9;

 r.r_bx=h_column;

 r.r_cx=h_row;

 r.r_es=FP_SEG (c_mask);

 r.r_dx=FP_OFF (c_mask);

 intr (0x33,&r);

}

void mice::c_lim (int h_st,int h_end,int v_st,int v_end)

{

 _AX=7;

 _CX=h_st;

 _DX=h_end;

 geninterrupt (0x33);

 _AX=8;

 _CX=v_st;

 _DX=v_end;

 geninterrupt (0x33);

}

void mice::c_sense (int h,int v)

{

 _AX=0x000f;

 _CX=h;

 _DX=v;

 geninterrupt (0x33);

}

void mice::c_state ()

{

 struct REGPACK r;

 r.r_ax=3;

 intr (0x33,&r);

 ms_current.btn=r.r_bx;

 ms_current.h=r.r_cx;

 ms_current.v=r.r_dx;

}

void mice::click_but (int bx,int by)

{

 if ((x>bx)&&(x<bx+100))

  if ((y>by)&&(y<by+15))

   {

        take=1;

   }

}

gfx::gfx (void)

{

 int gd=VGA,gm=VGAHI,i,j;

 initgraph (&gd,&gm,"");

 g1.window (0,0,639,479,"Graph Painter   (c) 2001 Z-soft  ",BLACK,0);

 setcolor (DARKGRAY);

 outtextxy (50,465,"Z-soft is a registered trade mark of Zobov Software Corporation");

 m1.is_mouse();

 m1.c_set (0,0);

 m1.c_lim (0,639,0,479);

 m1.c_sense (10,10);

 c_on();

}

gfx::gfx (int)

{

 cout<<"введите режим работы (2-VGAHI,0-VGALO,1-VGAMED) ";

 cin>>n;

 int gd=VGA,gm=n,i,j;

 initgraph (&gd,&gm,"");

 g1.window (0,0,639,479,"Graph Painter   (c) 2001 Z-soft  ",BLACK,0);

 setcolor (DARKGRAY);

 outtextxy (50,465,"Z-soft is a registered trade mark of Zobov Software Corporation");

 m1.is_mouse();

 m1.c_set (0,0);

 m1.c_lim (0,639,0,479);

 m1.c_sense (10,10);

 c_on();

}

gfx::gfx (char *tittle)

{

 int gd=VGA,gm=VGAHI,i,j;

 initgraph (&gd,&gm,"");

 g1.window (0,0,639,479,tittle,BLACK,0);

 setcolor (DARKGRAY);

 outtextxy (50,465,"Z-soft is a registered trade mark of Zobov Software Corporation");

 m1.is_mouse();

 m1.c_set (0,0);

 m1.c_lim (0,639,0,479);

 m1.c_sense (10,10);

 c_on();

}

void gfx::c (void)

{yy2--;

 if (yy2-yy1<=30) yy2=yy1+90;

}

Вывод: В ходе данной лабораторной работы были изучены основные возможности языка Си++ по управлению с помощью манипулятора «мышь». Представленная программа выводит на экран  объект, передвигаемый при помощи мыши, при захвате нажатием левой клавиши мыши, выход - esc. В программе применены классы и созданные с их помощью объекты, производится перегрузка конструкторов.

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
35 Kb
Скачали:
0