home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / BC_502 / OCXDLG.PAK / OCXDLG.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-06  |  3.3 KB  |  130 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows
  3. // Copyright (c) 1995, 1996 by Borland International, All Rights Reserved
  4. //
  5. // $Revision:   10.8  $
  6. //
  7. // Sample illustrating the use of OCXes in dialogs - Implements TMyOcxDialog
  8. //
  9. // NOTE: In order to run this example you MUST first install the Visual 
  10. //       Components OCX controls Formula One Spread Sheet and First 
  11. //       Impression Chart.
  12. //----------------------------------------------------------------------------
  13. #include <owl/pch.h>
  14. #include <stdio.h>
  15. #include "ocxdlg.h"
  16. #include "ocxdlgap.rh"     
  17. #include "vcf132.cxx"
  18. #include "vcfi32.cxx"
  19.  
  20. //
  21. //
  22. //
  23. const int RowCount = 5;
  24. const int ColCount = 4;
  25. const char progIdWorkbook[] = "VCF1.VCF1Ctrl.1";
  26. const char progIdChart[] = "VCFI.VCFiCtrl.1";
  27. GUID  guidWorkbook = CLSID_NULL;
  28. GUID  guidChart = CLSID_NULL;
  29.  
  30. //
  31. //
  32. //
  33. DEFINE_RESPONSE_TABLE1(TMyOcxDialog, TOleDialog)
  34.   EV_CHILD_NOTIFY( IDC_PIE_RAD,   BN_CLICKED, EvGraphMode),
  35.   EV_CHILD_NOTIFY( IDC_GRAPH_RAD, BN_CLICKED, EvGraphMode),
  36. END_RESPONSE_TABLE;
  37.  
  38. //
  39. //
  40. //
  41. TMyOcxDialog::TMyOcxDialog(TWindow* parent) : TOleDialog(parent, IDD_CLIENT)
  42. {}
  43.  
  44. //
  45. //
  46. //
  47. void
  48. TMyOcxDialog::SetupWindow()
  49. {
  50.   TOleDialog::SetupWindow();
  51.  
  52.   // Retrieve CLSID of OCXes
  53.   //
  54.   ::CLSIDFromProgID(TString(progIdWorkbook), &guidWorkbook);
  55.   ::CLSIDFromProgID(TString(progIdChart), &guidChart);
  56.  
  57.   // Retrieve TOcControl objects representing the respective OCXes
  58.   // of our dialog..
  59.   //
  60.   pWorkbook = GetOcControlOfOCX(guidWorkbook);
  61.   pChart = GetOcControlOfOCX(guidChart);
  62.  
  63.   // Bind to each OCX's primary IDispatch interface via proxy objects
  64.   //
  65.   Chart.Bind(pChart->GetCtlDispatch());
  66.   Workbook.Bind(pWorkbook->GetCtlDispatch());
  67.  
  68.   // Init Workbook/Chart with some data
  69.   //
  70.   Workbook.SetShowTabs(F1TabsOff);
  71.   Workbook.SetMinRow(1);
  72.   Workbook.SetMaxRow(RowCount);
  73.   Workbook.SetMinCol(1);
  74.   Workbook.SetMaxCol(ColCount);
  75.            
  76.   for (int row=1; row <= RowCount; row++) {
  77.     Workbook.SetRow(row);    
  78.     Chart.SetRow(row);
  79.     for (int col=1; col <= ColCount; col++) {
  80.       Workbook.SetCol(col);
  81.       Chart.SetColumn(col);
  82.       Workbook.SetFormula(string("RAND()*100"));
  83.       Workbook.Recalc();
  84.     }    
  85.   }
  86.   Chart.SetRepaint(true);    
  87.  
  88.   // Adjust Main Window 
  89.   //
  90.   TRect drect;
  91.   TRect srect;
  92.   GetWindowRect(drect);
  93.   AdjustWindowRectEx(drect, Parent->GetStyle(), false, Parent->GetExStyle());
  94.   Parent->SetWindowPos(0, drect, SWP_NOMOVE|SWP_NOZORDER|SWP_SHOWWINDOW);
  95. }
  96.  
  97. //
  98. //
  99. bool
  100. TMyOcxDialog::EvOcCtrlCustomEvent(TCtrlCustomEvent* pev)
  101. {
  102.   if (pev->Ctrl == pWorkbook) {
  103.     if (pev->Args->DispId == 0x4 /*SelChange()*/) {
  104.  
  105.       // Update chart from data retrieved from workbook
  106.       //
  107.       for (int row = 1; row <= RowCount; row++) {
  108.         Chart.SetColumn(Workbook.GetCol());
  109.         for (int col = 1; col <= ColCount; col++) {
  110.           Chart.SetColumn(Workbook.GetCol());
  111.           Chart.SetData(TAutoVal(Workbook.GetNumber()));
  112.         }
  113.       }
  114.     }
  115.   }
  116.   return true;
  117. }
  118.  
  119. //
  120. // Toggle between 3D Pie chart and 3D Graph Mode
  121. //
  122. void
  123. TMyOcxDialog::EvGraphMode()
  124. {
  125.   if (IsDlgButtonChecked(IDC_PIE_RAD)) 
  126.     Chart.SetChartType(VtChChartType3dPie);
  127.   else 
  128.     Chart.SetChartType(VtChChartType3dBar);
  129. }
  130.