KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q47002: How to Change the Size of a Presentation Graphics Chart

Article: Q47002
Product(s): See article
Version(s): 2.00
Operating System(s): MS-DOS
Keyword(s): ENDUSER | S_QuickAsm | mspl13_c
Last Modified: 18-AUG-1989

Question:

How can the size of a chart be changed so that you can use part of the
screen to output explanatory text?

Response:

This capability is built into the charting environment. The chartenv
structure is defined as follows:

           typedef struct {
             short          charttype;
                                /* _PG_BAR, _PG_COLUMN, _PG_LINE, etc.*/
             short          chartstyle;
                                /* style for selected chart type      */
             windowtype     chartwindow;
                                /* SIZE OF WINDOW FOR CHART!!!!!      */
             windowtype     datawindow;
                                /* size of window for chart data      */
             titletype      maintitle; /* main chart title            */
             titletype      subtitle;  /* chart sub-title             */
             axistype       xaxis;
                                /* structure for customizing x-axis   */
             axistype       yaxis;
                                /* structure for customizing y-axis   */
             } chartenv;

The size can be changed by modifying the elements of the "chartwindow"
element of the "chartenv" structure. The "chartwindow" element is of
"windowtype", which is defined as follows:

            typedef struct {
               short  x1;        /* left edge of window in pixels     */
               short  y1;        /* top edge of window in pixels      */
               short  x2;        /* right edge of window in pixels    */
               short  y2;        /* bottom edge of window in pixels   */
               short  border;    /* TRUE=border, FALSE=no border      */
               short  background;/* palette color for window bkground */
               short  borderstyle; /* style bytes for window border   */
               short  bordercolor; /* palette color for window border */
               } windowtype;

Therefore, if the program has defined a variable "env" of "chartenv"
type, the chart can be sized by changing env.chartwindow.x1,
env.chartwindow.y1, env.chartwindow.x2, and env.chartwindow.y2. The
following program demonstrates making these changes to a simple bar
chart:

/*-------------------------------------------------------------------*/
/* MINIBAR.C: This program demonstrates sizing the entire chart so   */
/* that it will fit in the upper-left quarter of the screen, leaving */
/* the remainder of the screen available for other uses. The chart   */
/* is a simple default bar chart, but the principle is the same,     */
/* regardless of chart type.                                         */

#include <conio.h>
#include <string.h>
#include <graph.h>                 /* required include files */
#include <pgchart.h>

#define MONTHS 12

typedef enum {FALSE, TRUE} boolean;

float far value [MONTHS] =          /*value (series) data array */
{
 (float)1.00, (float)2.00, (float)3.00, (float)4.00,
 (float)5.00, (float)6.00,(float)7.00, (float)8.00,
 (float)9.00, (float)10.00, (float)11.00, (float)12.00
  };

char far *category[MONTHS] =         /* category data array */
  {
  "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  "Jly", "Aug", "Sep", "Oct","Nov", "Dec"
  };

main()

{
chartenv env;                     /* define chart environment variable */

_setvideomode(_ERESCOLOR);        /* set to graphics mode */

/* initialize chart library and a default bar chart */
_pg_initchart();

_pg_defaultchart(&env, _PG_BARCHART, _PG_PLAINBARS);

/* set the chart size to the upper left quarter of the screen   */

env.chartwindow.x1 = 0;
env.chartwindow.y1 = 0;
env.chartwindow.x2 = 320;
env.chartwindow.y2 = 175;

if(_pg_chart (&env,category,value, MONTHS)) /* call to charting routine*/
        {_setvideomode(_DEFAULTMODE);       /* error trap...*/
         _outtext("error, can't draw chart");
         }
     else
        {
         getch();                          /* wait for a keystroke */
         }
        _setvideomode(_DEFAULTMODE);      /* reset the video mode  */

         return(0);
         }

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1986-2002.