home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c016 / 3.ddi / CHARTEX.PAK / CHART.CPP next >
Encoding:
C/C++ Source or Header  |  1993-12-08  |  10.2 KB  |  514 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows - (C) Copyright 1993 by Borland International
  3. //    Simple VBX Chart example
  4. // Note, when making a new project with TKChart, the identifier length must
  5. // be increased from 32 to 50 or so.
  6. //----------------------------------------------------------------------------
  7. #include <owl\owlpch.h>
  8. #include <owl\applicat.h>
  9. #include <owl\dc.h>
  10. #include <owl\dialog.h>
  11. #include <owl\framewin.h>
  12. #include <owl\vbxctl.h>
  13. #include "tkchart1.h"
  14. #include "chart.rh"
  15.  
  16. const char AppName[] = "Chart";
  17.  
  18. // Pretty titles for each graph type
  19. char *CTypes[32] = {
  20.   { "3D Chart (area, seperate, no frame)"},
  21.   { "3D Chart (area, seperate, frame)"},
  22.   { "3D Chart (area, stack, no frame)"},
  23.   { "3D Chart (area, stack, frame)"},
  24.   { "3D Chart (column, seperate)"},
  25.   { "3D Chart (column, stack)"},
  26.   { "3D Chart (column, alternate)"},
  27.   { "3D Chart (line)"},
  28.   { "3D Chart (area, X Userdata)"},
  29.   { "3D Chart (pie)"},
  30.   { "2D Chart (area, stack, no frame)"},
  31.   { "2D Chart (area, stack, frame)"},
  32.   { "2D Chart (bar, stack)"},
  33.   { "2D Chart (bar, alternate)"},
  34.   { "2D Chart (bar, overlap)"},
  35.   { "2D Chart (column, stack)"},
  36.   { "2D Chart (column, alternate)"},
  37.   { "2D Chart (column, overlap)"},
  38.   { "2D Chart (line, dot)"},
  39.   { "2D Chart (line, line)"},
  40.   { "2D Chart (line, dot, line)"},
  41.   { "2D Chart (line, chain)"},
  42.   { "2D Chart (area, X Userdata)"},
  43.   { "2D Chart (area, column)"},
  44.   { "2D Chart (area, line)"},
  45.   { "2D Chart (area, dot, line)"},
  46.   { "2D Chart (column, line)"},
  47.   { "2D Chart (column, dot, line)"},
  48.   { "2D Chart (pie)"},
  49.   { "2D Chart (hiloclose)"},
  50.   { "2D Chart (hiloclose, dot, line)"},
  51.   { "2D Chart (hiloclose, line)"}
  52. };
  53.  
  54. class TChart : public TDialog {
  55.   public:
  56.    TBrush      Brush;
  57.  
  58.    TVbxTKChart* Chart;
  59.    TChart();
  60.  
  61.    void   InitChart();
  62.    void   ChangeChart(UINT);
  63.  
  64.   protected:
  65.    BOOL       EvInitDialog(HWND hWnd);
  66.    void          EvPaint();
  67.    HBRUSH        EvCtlColor(HDC, HWND hWndChild, UINT ctlType);
  68.  
  69.   DECLARE_RESPONSE_TABLE(TChart);
  70. };
  71.  
  72. DEFINE_RESPONSE_TABLE1(TChart, TDialog)
  73.   EV_WM_PAINT,
  74.   EV_WM_CTLCOLOR,
  75. END_RESPONSE_TABLE;
  76.  
  77. TChart::TChart()
  78.   : TWindow((TWindow*)0),
  79.    TDialog(0, AppName),
  80.    Brush(TColor(0, 0, 0)),
  81.    Chart(new TVbxTKChart(this, IDC_TKCHART1))  // Create new chart object
  82. {
  83.   ;
  84. }
  85.  
  86. BOOL TChart::EvInitDialog( HWND hWnd )
  87. {
  88.   BOOL rv = TDialog::EvInitDialog( hWnd );
  89.  
  90.   // Initialize chart in InitDialog, after chart has been created in dialog
  91.   InitChart();
  92.   return rv;
  93. }
  94.  
  95. //
  96. // Colorize the dialog. Allows background to show through corners of
  97. //  buttons, uses yellow text on black background in the display, and sets
  98. //  the dialog background to blue.
  99. //
  100. HBRUSH
  101. TChart::EvCtlColor(HDC hDC, HWND hWndChild, UINT ctlType)
  102. {
  103.   switch (ctlType) {
  104.    case CTLCOLOR_BTN:
  105.     SetBkMode(hDC, TRANSPARENT);
  106.     return (HBRUSH)GetStockObject(NULL_BRUSH);
  107.  
  108.    case CTLCOLOR_DLG:
  109.     SetBkMode(hDC, TRANSPARENT);
  110.     return (HBRUSH)Brush;
  111.  
  112.    default:
  113.     return TDialog::EvCtlColor(hDC, hWndChild, ctlType);
  114.   }
  115. }
  116.  
  117. //
  118. // Even dialogs can have their backgrounds painted on.  This creates
  119. //  a blue ellipse over the black background.
  120. //
  121. void
  122. TChart::EvPaint()
  123. {
  124.   TBrush    blueBrush(TColor(0, 0, 255));
  125.   TPaintDC  dc(*this);
  126.  
  127.   dc.SelectObject(blueBrush);
  128.   dc.SelectStockObject(NULL_PEN);
  129.  
  130.   TRect clientRect = GetClientRect();
  131.   clientRect.bottom = clientRect.right;
  132.   clientRect.Offset(-clientRect.right/4, -clientRect.right/4);
  133.   dc.Ellipse(clientRect);
  134. }
  135.  
  136. void
  137. TChart::InitChart()
  138. {
  139.   Chart->SetPropAutoAdjOrigin(TRUE);
  140.   Chart->SetPropTrueTypeFont(TRUE);
  141.   Chart->SetPropcElement(4);
  142.   Chart->SetPropChartType(TVbxTKChart::ChartType_2D_column_stacked);
  143.   Chart->SetPropDataType(TVbxTKChart::DataType_Integer);
  144.   Chart->SetPropChartConfig(0);
  145.  
  146.   // Configure X-axis
  147.   Chart->SetPropAxisIndex(0);
  148.   Chart->SetPropiMinVal(0);
  149.   Chart->SetPropiIncVal(50);
  150.   Chart->SetPropDivision(5);
  151.   Chart->SetPropLabelType(1);
  152.  
  153.   Chart->SetPropAxisConfig(0);
  154.  
  155.   // Configure Y-axis
  156.   Chart->SetPropAxisIndex(1);
  157.   Chart->SetPropiMinVal(0);
  158.   Chart->SetPropiIncVal(50);
  159.   Chart->SetPropDivision(5);
  160.   Chart->SetPropLabelType(1);
  161.  
  162.   Chart->SetPropAxisConfig(0);
  163.  
  164.   // Configure Z-axis
  165.   Chart->SetPropAxisIndex(2);
  166.   Chart->SetPropiMinVal(0);
  167.   Chart->SetPropiIncVal(50);
  168.   Chart->SetPropDivision(5);
  169.   Chart->SetPropLabelType(2);
  170.  
  171.   Chart->SetPropAxisConfig(0);
  172.  
  173.   // legend labels
  174.   Chart->SetPropzLabelArr((string)"A",0);
  175.   Chart->SetPropzLabelArr((string)"B",1);
  176.   Chart->SetPropzLabelArr((string)"C",2);
  177.   Chart->SetPropzLabelArr((string)"D",3);
  178.  
  179.   // Turn off excessive redraws, paint msg will suffice
  180.   Chart->SetPropRedraw(0);
  181.   Chart->SetPropTitleArr((string)"X-Axis",0);
  182.   Chart->SetPropTitleArr((string)"Y-Axis",1);
  183.   Chart->SetPropTitleArr((string)"Welcome to Borland Visual Solutions!",3);
  184.  
  185.   //Add data to chart
  186.   Chart->SetPropiDataArr(0,0);
  187.   Chart->SetPropiDataArr(100,1);
  188.   Chart->SetPropiDataArr(70,2);
  189.   Chart->SetPropiDataArr(-20,3);
  190.   Chart->SetPropAddData(0);
  191.  
  192.   Chart->SetPropiDataArr(10,0);
  193.   Chart->SetPropiDataArr(110,1);
  194.   Chart->SetPropiDataArr(80,2);
  195.   Chart->SetPropiDataArr(-10,3);
  196.   Chart->SetPropAddData(0);
  197.  
  198.   Chart->SetPropiDataArr(20,0);
  199.   Chart->SetPropiDataArr(130,1);
  200.   Chart->SetPropiDataArr(100,2);
  201.   Chart->SetPropiDataArr(10,3);
  202.   Chart->SetPropAddData(0);
  203.   Chart->SetPropRedraw(1);
  204. }
  205.  
  206. void
  207. TChart::ChangeChart(UINT id)
  208. {
  209.   // make sure to paint only once
  210.   Chart->SetPropRedraw(0);
  211.   Chart->SetPropTitleArr(string(CTypes[id-1]),3);
  212.   Chart->SetPropChartType(id-1);
  213. }
  214.  
  215.  
  216. //----------------------------------------------------------------------------
  217.  
  218. class TChartApp : public TApplication {
  219.   public:
  220.    TChart* ChartDialog;
  221.  
  222.    TChartApp(const char far* name) : TApplication(name) {}
  223.  
  224.   protected:
  225.    void   InitMainWindow();
  226.    void   Cm3D1();
  227.    void   Cm3D2();
  228.    void   Cm3D3();
  229.    void   Cm3D4();
  230.    void   Cm3D5();
  231.    void   Cm3D6();
  232.    void   Cm3D7();
  233.    void   Cm3D8();
  234.    void   Cm3D9();
  235.    void   Cm3D10();
  236.    void   Cm2D1();
  237.    void   Cm2D2();
  238.    void   Cm2D3();
  239.    void   Cm2D4();
  240.    void   Cm2D5();
  241.    void   Cm2D6();
  242.    void   Cm2D7();
  243.    void   Cm2D8();
  244.    void   Cm2D9();
  245.    void   Cm2D10();
  246.    void   Cm2D11();
  247.    void   Cm2D12();
  248.    void   Cm2D13();
  249.    void   Cm2D14();
  250.    void   Cm2D15();
  251.    void   Cm2D16();
  252.    void   Cm2D17();
  253.    void   Cm2D18();
  254.    void   Cm2D19();
  255.    void   Cm2D20();
  256.    void   Cm2D21();
  257.    void   Cm2D22();
  258.  
  259.    LRESULT       EvCommand(UINT, HWND, UINT);
  260.  
  261.   DECLARE_RESPONSE_TABLE(TChartApp);
  262. };
  263.  
  264. DEFINE_RESPONSE_TABLE(TChartApp)
  265.   EV_COMMAND(CM_3D1, Cm3D1),
  266.   EV_COMMAND(CM_3D2, Cm3D2),
  267.   EV_COMMAND(CM_3D3, Cm3D3),
  268.   EV_COMMAND(CM_3D4, Cm3D4),
  269.   EV_COMMAND(CM_3D5, Cm3D5),
  270.   EV_COMMAND(CM_3D6, Cm3D6),
  271.   EV_COMMAND(CM_3D7, Cm3D7),
  272.   EV_COMMAND(CM_3D8, Cm3D8),
  273.   EV_COMMAND(CM_3D9, Cm3D9),
  274.   EV_COMMAND(CM_3D10, Cm3D10),
  275.   EV_COMMAND(CM_2D1, Cm2D1),
  276.   EV_COMMAND(CM_2D2, Cm2D2),
  277.   EV_COMMAND(CM_2D3, Cm2D3),
  278.   EV_COMMAND(CM_2D4, Cm2D4),
  279.   EV_COMMAND(CM_2D5, Cm2D5),
  280.   EV_COMMAND(CM_2D6, Cm2D6),
  281.   EV_COMMAND(CM_2D7, Cm2D7),
  282.   EV_COMMAND(CM_2D8, Cm2D8),
  283.   EV_COMMAND(CM_2D9, Cm2D9),
  284.   EV_COMMAND(CM_2D10, Cm2D10),
  285.   EV_COMMAND(CM_2D11, Cm2D11),
  286.   EV_COMMAND(CM_2D12, Cm2D12),
  287.   EV_COMMAND(CM_2D13, Cm2D13),
  288.   EV_COMMAND(CM_2D14, Cm2D14),
  289.   EV_COMMAND(CM_2D15, Cm2D15),
  290.   EV_COMMAND(CM_2D16, Cm2D16),
  291.   EV_COMMAND(CM_2D17, Cm2D17),
  292.   EV_COMMAND(CM_2D18, Cm2D18),
  293.   EV_COMMAND(CM_2D19, Cm2D19),
  294.   EV_COMMAND(CM_2D20, Cm2D20),
  295.   EV_COMMAND(CM_2D21, Cm2D21),
  296.   EV_COMMAND(CM_2D22, Cm2D22),
  297. END_RESPONSE_TABLE;
  298.  
  299. //
  300. // Create the chart dialog as the application's main window.
  301. //
  302. void
  303. TChartApp::InitMainWindow()
  304. {
  305.   ChartDialog = new TChart;
  306.  
  307.   MainWindow = new TFrameWindow(0, Name, ChartDialog, TRUE);
  308.   MainWindow->SetIcon(this, AppName);
  309.   MainWindow->AssignMenu("MAIN_MENU");
  310.   MainWindow->Attr.Style &= ~(WS_MAXIMIZEBOX | WS_THICKFRAME);
  311. }
  312.  
  313. // Menu graphtype commands
  314. void
  315. TChartApp::Cm3D1()
  316. {
  317.   ChartDialog->ChangeChart(1);
  318. }
  319.  
  320. void
  321. TChartApp::Cm3D2()
  322. {
  323.   ChartDialog->ChangeChart(2);
  324. }
  325.  
  326. void
  327. TChartApp::Cm3D3()
  328. {
  329.   ChartDialog->ChangeChart(3);
  330. }
  331.  
  332. void
  333. TChartApp::Cm3D4()
  334. {
  335.   ChartDialog->ChangeChart(4);
  336. }
  337.  
  338. void
  339. TChartApp::Cm3D5()
  340. {
  341.   ChartDialog->ChangeChart(5);
  342. }
  343.  
  344. void
  345. TChartApp::Cm3D6()
  346. {
  347.   ChartDialog->ChangeChart(6);
  348. }
  349.  
  350. void
  351. TChartApp::Cm3D7()
  352. {
  353.   ChartDialog->ChangeChart(7);
  354. }
  355.  
  356. void
  357. TChartApp::Cm3D8()
  358. {
  359.   ChartDialog->ChangeChart(8);
  360. }
  361.  
  362. void
  363. TChartApp::Cm3D9()
  364. {
  365.   ChartDialog->ChangeChart(9);
  366. }
  367.  
  368. void
  369. TChartApp::Cm3D10()
  370. {
  371.   ChartDialog->ChangeChart(10);
  372. }
  373.  
  374. void
  375. TChartApp::Cm2D1()
  376. {
  377.   ChartDialog->ChangeChart(11);
  378. }
  379.  
  380. void
  381. TChartApp::Cm2D2()
  382. {
  383.   ChartDialog->ChangeChart(12);
  384. }
  385.  
  386. void
  387. TChartApp::Cm2D3()
  388. {
  389.   ChartDialog->ChangeChart(13);
  390. }
  391.  
  392. void
  393. TChartApp::Cm2D4()
  394. {
  395.   ChartDialog->ChangeChart(14);
  396. }
  397.  
  398. void
  399. TChartApp::Cm2D5()
  400. {
  401.   ChartDialog->ChangeChart(15);
  402. }
  403.  
  404. void
  405. TChartApp::Cm2D6()
  406. {
  407.   ChartDialog->ChangeChart(16);
  408. }
  409.  
  410. void
  411. TChartApp::Cm2D7()
  412. {
  413.   ChartDialog->ChangeChart(17);
  414. }
  415.  
  416. void
  417. TChartApp::Cm2D8()
  418. {
  419.   ChartDialog->ChangeChart(18);
  420. }
  421.  
  422. void
  423. TChartApp::Cm2D9()
  424. {
  425.   ChartDialog->ChangeChart(19);
  426. }
  427.  
  428. void
  429. TChartApp::Cm2D10()
  430. {
  431.   ChartDialog->ChangeChart(20);
  432. }
  433.  
  434. void
  435. TChartApp::Cm2D11()
  436. {
  437.   ChartDialog->ChangeChart(21);
  438. }
  439.  
  440. void
  441. TChartApp::Cm2D12()
  442. {
  443.   ChartDialog->ChangeChart(22);
  444. }
  445.  
  446. void
  447. TChartApp::Cm2D13()
  448. {
  449.   ChartDialog->ChangeChart(23);
  450. }
  451.  
  452. void
  453. TChartApp::Cm2D14()
  454. {
  455.   ChartDialog->ChangeChart(24);
  456. }
  457.  
  458. void
  459. TChartApp::Cm2D15()
  460. {
  461.   ChartDialog->ChangeChart(25);
  462. }
  463.  
  464. void
  465. TChartApp::Cm2D16()
  466. {
  467.   ChartDialog->ChangeChart(26);
  468. }
  469.  
  470. void
  471. TChartApp::Cm2D17()
  472. {
  473.   ChartDialog->ChangeChart(27);
  474. }
  475.  
  476. void
  477. TChartApp::Cm2D18()
  478. {
  479.   ChartDialog->ChangeChart(28);
  480. }
  481.  
  482. void
  483. TChartApp::Cm2D19()
  484. {
  485.   ChartDialog->ChangeChart(29);
  486. }
  487.  
  488. void
  489. TChartApp::Cm2D20()
  490. {
  491.   ChartDialog->ChangeChart(30);
  492. }
  493.  
  494. void
  495. TChartApp::Cm2D21()
  496. {
  497.   ChartDialog->ChangeChart(31);
  498. }
  499.  
  500. void
  501. TChartApp::Cm2D22()
  502. {
  503.   ChartDialog->ChangeChart(32);
  504. }
  505.  
  506.  
  507.  
  508. int
  509. OwlMain(int /*argc*/, char* /*argv*/ [])
  510. {
  511.   TBIVbxLibrary vbxLib;
  512.   return TChartApp(AppName).Run();
  513. }
  514.