⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bgidemo.c

📁 电力变电站RTU监控软件(80C196NT单片机) 遥控
💻 C
📖 第 1 页 / 共 4 页
字号:
    else{                               /* Bits not all set...          */
      if( style == 0 )                  /* Are all bits clear?          */
	flag = TRUE;                    /*   begin setting bits         */
    }
  }

  settextjustify( LEFT_TEXT, TOP_TEXT );

  Pause();                              /* Wait for user's response     */

}

/*                                                                      */
/*      FILLSTYLEDEMO: Display the standard fill patterns available.    */
/*                                                                      */

void FillStyleDemo(void)
{
  int h, w, style;
  int i, j, x, y;
  struct viewporttype vp;
  char buffer[40];

  MainWindow( "Pre-defined Fill Styles" );

  getviewsettings( &vp );
  w = 2 * ((vp.right  +  1) / 13);
  h = 2 * ((vp.bottom - 10) / 10);

  x = w / 2;
  y = h / 2;            /* Leave 1/2 blk margin         */
  style = 0;

  for( j=0 ; j<3 ; ++j ){               /* Three rows of boxes          */
    for( i=0 ; i<4 ; ++i ){             /* Four column of boxes         */
      setfillstyle(style, MaxColors-1); /* Set the fill style and WHITE */
      bar( x, y, x+w, y+h );            /* Draw the actual box          */
      rectangle( x, y, x+w, y+h );      /* Outline the box              */
      itoa( style, buffer, 10 );        /* Convert style 3 to ASCII     */
      outtextxy( x+(w / 2), y+h+4, buffer );
      ++style;                          /* Go on to next style #        */
      x += (w / 2) * 3;                 /* Go to next column            */
    }                           /* End of coulmn loop           */
    x = w / 2;                          /* Put base back to 1st column  */
    y += (h / 2) * 3;                   /* Advance to next row          */
  }                                     /* End of Row loop              */

  settextjustify( LEFT_TEXT, TOP_TEXT );

  Pause();                              /* Wait for user's response     */

}

/*                                                                      */
/*      FILLPATTERNDEMO: Demonstrate how to use the user definable      */
/*      fill patterns.                                                  */
/*                                                                      */

void FillPatternDemo(void)
{
  int style;
  int h, w;
  int x, y, i, j;
  char buffer[40];
  struct viewporttype vp;
  static char patterns[][8] = {
    { 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55 },
    { 0x33, 0x33, 0xCC, 0xCC, 0x33, 0x33, 0xCC, 0xCC },
    { 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F },
    { 0x00, 0x10, 0x28, 0x44, 0x28, 0x10, 0x00, 0x00 },
    { 0x00, 0x70, 0x20, 0x27, 0x24, 0x24, 0x07, 0x00 },
    { 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00 },
    { 0x00, 0x00, 0x3C, 0x3C, 0x3C, 0x3C, 0x00, 0x00 },
    { 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00 },
    { 0x00, 0x00, 0x22, 0x08, 0x00, 0x22, 0x1C, 0x00 },
    { 0xFF, 0x7E, 0x3C, 0x18, 0x18, 0x3C, 0x7E, 0xFF },
    { 0x00, 0x10, 0x10, 0x7C, 0x10, 0x10, 0x00, 0x00 },
    { 0x00, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x00 }
  };

  MainWindow( "User Defined Fill Styles" );

  getviewsettings( &vp );
  w = 2 * ((vp.right  +  1) / 13);
  h = 2 * ((vp.bottom - 10) / 10);

  x = w / 2;
  y = h / 2;            /* Leave 1/2 blk margin         */
  style = 0;

  for( j=0 ; j<3 ; ++j ){               /* Three rows of boxes          */
    for( i=0 ; i<4 ; ++i ){             /* Four column of boxes         */
      setfillpattern( &patterns[style][0], MaxColors-1 );
      bar( x, y, x+w, y+h );            /* Draw the actual box          */
      rectangle( x, y, x+w, y+h );      /* Outline the box              */
      itoa( style, buffer, 10 );        /* Convert style 3 to ASCII     */
      outtextxy( x+(w / 2), y+h+4, buffer );
      ++style;                          /* Go on to next style #        */
      x += (w / 2) * 3;                 /* Go to next column            */
    }                           /* End of coulmn loop           */
    x = w / 2;                          /* Put base back to 1st column  */
    y += (h / 2) * 3;                   /* Advance to next row          */
  }                                     /* End of Row loop              */

  settextjustify( LEFT_TEXT, TOP_TEXT );

  Pause();                              /* Wait for user's response     */

}

/*                                                                      */
/*      POLYDEMO: Display a random pattern of polygons on the screen    */
/*      until the user says enough.                                     */
/*                                                                      */

void PaletteDemo(void)
{
  int i, j, x, y, color;
  struct viewporttype vp;
  int height, width;

  MainWindow( "Palette Demonstration" );
  StatusLine( "Press any key to continue, ESC to Abort" );

  getviewsettings( &vp );
  width  = (vp.right - vp.left) / 15;   /* get width of the box         */
  height = (vp.bottom - vp.top) / 10;   /* Get the height of the box    */

  x = y = 0;                            /* Start in upper corner        */
  color = 1;                            /* Begin at 1st color           */

  for( j=0 ; j<10 ; ++j ){              /* For 10 rows of boxes         */
    for( i=0 ; i<15 ; ++i ){            /* For 15 columns of boxes      */
      setfillstyle( SOLID_FILL, color++ );      /* Set the color of box */
      bar( x, y, x+width, y+height );           /* Draw the box         */
      x += width + 1;                           /* Advance to next col  */
      color = 1 + (color % (MaxColors - 2));    /* Set new color        */
    }                           /* End of COLUMN loop           */
    x = 0;                              /* Goto 1st column              */
    y += height + 1;                    /* Goto next row                */
  }                                     /* End of ROW loop              */

  while( !kbhit() ){                    /* Until user enters a key...   */
    setpalette( 1+random(MaxColors - 2), random( 65 ) );
  }

  setallpalette( &palette );

  Pause();                              /* Wait for user's response     */

}

/*                                                                      */
/*      POLYDEMO: Display a random pattern of polygons on the screen    */
/*      until the user says enough.                                     */
/*                                                                      */

#define MaxPts          6               /* Maximum # of pts in polygon  */

void PolyDemo(void)
{
  struct PTS poly[ MaxPts ];            /* Space to hold datapoints     */
  int color;                            /* Current drawing color        */
  int i;

  MainWindow( "DrawPoly / FillPoly Demonstration" );
  StatusLine( "ESC Aborts - Press a Key to stop" );

  while( !kbhit() ){                    /* Repeat until a key is hit    */

    color = 1 + random( MaxColors-1 );  /* Get a random color # (no blk)*/
    setfillstyle( random(10), color );  /* Set a random line style      */
    setcolor( color );                  /* Set the desired color        */

    for( i=0 ; i<(MaxPts-1) ; i++ ){    /* Determine a random polygon   */
      poly[i].x = random( MaxX );       /* Set the x coord of point     */
      poly[i].y = random( MaxY );       /* Set the y coord of point     */
    }

    poly[i].x = poly[0].x;              /* last point = first point     */
    poly[i].y = poly[1].y;

    fillpoly( MaxPts, (int far *)poly );    /* Draw the actual polygon      */
  }                                     /* End of WHILE not KBHIT       */

  Pause();                              /* Wait for user's response     */

}


/*                                                                      */
/*      SAYGOODBYE: Give a closing screen to the user before leaving.   */
/*                                                                      */

void SayGoodbye(void)
{
  struct viewporttype viewinfo;         /* Structure to read viewport   */
  int h, w;

  MainWindow( "== Finale ==" );

  getviewsettings( &viewinfo );         /* Read viewport settings       */
  changetextstyle( TRIPLEX_FONT, HORIZ_DIR, 4 );
  settextjustify( CENTER_TEXT, CENTER_TEXT );

  h = viewinfo.bottom - viewinfo.top;
  w = viewinfo.right  - viewinfo.left;
  outtextxy( w/2, h/2, "That's all, folks!" );

  StatusLine( "Press any key to EXIT" );
  getch();

  cleardevice();                        /* Clear the graphics screen    */

}

/*                                                                      */
/*      PAUSE: Pause until the user enters a keystroke. If the          */
/*      key is an ESC, then exit program, else simply return.           */
/*                                                                      */

void Pause(void)
{
  static char msg[] = "Esc aborts or press a key...";
  int c;

  StatusLine( msg );                    /* Put msg at bottom of screen  */

  c = getch();                          /* Read a character from kbd    */

  if( ESC == c ){                       /* Does user wish to leave?     */
    closegraph();                       /* Change to text mode          */
    exit( 1 );                          /* Return to OS                 */
  }

  if( 0 == c ){                         /* Did use hit a non-ASCII key? */
    c = getch();                        /* Read scan code for keyboard  */
  }

  cleardevice();                        /* Clear the screen             */

}

/*                                                                      */
/*      MAINWINDOW: Establish the main window for the demo and set      */
/*      a viewport for the demo code.                                   */
/*                                                                      */

void MainWindow( char *header )
{
  int height;

  cleardevice();                        /* Clear graphics screen        */
  setcolor( MaxColors - 1 );            /* Set current color to white   */
  setviewport( 0, 0, MaxX, MaxY, 1 );   /* Open port to full screen     */

  height = textheight( "H" );           /* Get basic text height        */

  changetextstyle( DEFAULT_FONT, HORIZ_DIR, 1 );
  settextjustify( CENTER_TEXT, TOP_TEXT );
  outtextxy( MaxX/2, 2, header );
  setviewport( 0, height+4, MaxX, MaxY-(height+4), 1 );
  DrawBorder();
  setviewport( 1, height+5, MaxX-1, MaxY-(height+5), 1 );

}

/*                                                                      */
/*      STATUSLINE: Display a status line at the bottom of the screen.  */
/*                                                                      */

void StatusLine( char *msg )
{
  int height;

  setviewport( 0, 0, MaxX, MaxY, 1 );   /* Open port to full screen     */
  setcolor( MaxColors - 1 );            /* Set current color to white   */

  changetextstyle( DEFAULT_FONT, HORIZ_DIR, 1 );
  settextjustify( CENTER_TEXT, TOP_TEXT );
  setlinestyle( SOLID_LINE, 0, NORM_WIDTH );
  setfillstyle( EMPTY_FILL, 0 );

  height = textheight( "H" );           /* Detemine current height      */
  bar( 0, MaxY-(height+4), MaxX, MaxY );
  rectangle( 0, MaxY-(height+4), MaxX, MaxY );
  outtextxy( MaxX/2, MaxY-(height+2), msg );
  setviewport( 1, height+5, MaxX-1, MaxY-(height+5), 1 );

}

/*                                                                      */
/*      DRAWBORDER: Draw a solid single line around the current         */
/*      viewport.                                                       */
/*                                                                      */

void DrawBorder(void)
{
  struct viewporttype vp;

  setcolor( MaxColors - 1 );            /* Set current color to white   */

  setlinestyle( SOLID_LINE, 0, NORM_WIDTH );

  getviewsettings( &vp );
  rectangle( 0, 0, vp.right-vp.left, vp.bottom-vp.top );

}

/*                                                                      */
/*      CHANGETEXTSTYLE: similar to settextstyle, but checks for        */
/*      errors that might occur whil loading the font file.             */
/*                                                                      */

void changetextstyle(int font, int direction, int charsize)
{
  int ErrorCode;

  graphresult();                        /* clear error code             */
  settextstyle(font, direction, charsize);
  ErrorCode = graphresult();            /* check result                 */
  if( ErrorCode != grOk ){              /* if error occured             */
    closegraph();
    printf(" Graphics System Error: %s\n", grapherrormsg( ErrorCode ) );
    exit( 1 );
  }
}

/*                                                                      */
/*      GPRINTF: Used like PRINTF except the output is sent to the      */
/*      screen in graphics mode at the specified co-ordinate.           */
/*                                                                      */

int gprintf( int *xloc, int *yloc, char *fmt, ... )
{
  va_list  argptr;                      /* Argument list pointer        */
  char str[140];                        /* Buffer to build sting into   */
  int cnt;                              /* Result of SPRINTF for return */

  va_start( argptr, fmt );              /* Initialize va_ functions     */

  cnt = vsprintf( str, fmt, argptr );   /* prints string to buffer      */
  outtextxy( *xloc, *yloc, str );       /* Send string in graphics mode */
  *yloc += textheight( "H" ) + 2;       /* Advance to next line         */

  va_end( argptr );                     /* Close va_ functions          */

  return( cnt );                        /* Return the conversion count  */

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -