home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / bc45 / gdidemo.pak / GDIDEMO.CPP < prev    next >
C/C++ Source or Header  |  1997-07-23  |  4KB  |  160 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows - (C) Copyright 1991, 1993 by Borland International
  3. //   A GDI demo program
  4. //----------------------------------------------------------------------------
  5. #include <owl\owlpch.h>
  6. #include <owl\applicat.h>
  7. #include <owl\mdi.h>
  8. #include <string.h>
  9. #include "demobase.h"
  10. #include "line.h"
  11. #include "fontx.h"
  12. #include "bitblt.h"
  13. #include "arty.h"
  14.  
  15. // Menu bar constants
  16. const int MenuId            =  100;  // Resource Id of the menubar
  17. const int MoveToLineToDemoId=  201;  // Demo->MoveToDemo Id
  18. const int FontDemoId        =  202;  // Demo->Font Demo Id
  19. const int BitBltDemoId      =  203;  // Demo->BitBlt Demo Id
  20. const int ArtyDemoId        =  204;  // Demo->Arty Demo Id
  21.  
  22. const int IconId            =  100;  // Resource Id of the program icon
  23.  
  24. IMPLEMENT_CASTABLE1(TBaseDemoWindow, TWindow);
  25.  
  26. //----------------------------------------------------------------------------
  27.  
  28. class TGdiDemoWindow : public TMDIClient {
  29.   public:
  30.     TGdiDemoWindow() : TMDIClient() { Attr.Style |= WS_TABSTOP; }
  31.  
  32.   protected:
  33.     void SetupWindow();
  34.  
  35.     void CmMoveToLineToDemo();
  36.     void CmFontDemo();
  37.     void CmBitBltDemo();
  38.     void CmArtyDemo();
  39.  
  40.     void EvTimer(UINT TimerId);
  41.     void EvDestroy();
  42.  
  43.   DECLARE_RESPONSE_TABLE(TGdiDemoWindow);
  44. };
  45.  
  46. DEFINE_RESPONSE_TABLE1(TGdiDemoWindow, TMDIClient)
  47.   EV_COMMAND(MoveToLineToDemoId, CmMoveToLineToDemo),
  48.   EV_COMMAND(FontDemoId, CmFontDemo),
  49.   EV_COMMAND(BitBltDemoId, CmBitBltDemo),
  50.   EV_COMMAND(ArtyDemoId, CmArtyDemo),
  51.   EV_WM_TIMER,
  52.   EV_WM_DESTROY,
  53. END_RESPONSE_TABLE;
  54.  
  55.  
  56. //
  57. // Setup the main demo window, and try to allocate its timer
  58. //
  59. void
  60. TGdiDemoWindow::SetupWindow()
  61. {
  62.   TMDIClient::SetupWindow();
  63.  
  64.   int result = IDRETRY;
  65.   while (SetTimer(0, 50, 0) == 0 && result == IDRETRY)
  66.     result = MessageBox("Could not Create Timer", "GDIDemo", MB_RETRYCANCEL);
  67.   if (result == IDCANCEL)
  68.     PostQuitMessage(0);
  69. }
  70.  
  71. //
  72. // In response to a demo command, create one of the demo windows as the client
  73. // of an mdi child frame. Turn of the icon for the mdi child to allow the
  74. // client to paint itself when iconic.
  75. //
  76.  
  77. void
  78. TGdiDemoWindow::CmMoveToLineToDemo()
  79. {
  80.   TMDIChild* child = new TMDIChild(*this, "MoveTo/LineTo Window", 
  81.                                    new TMoveToLineToWindow);
  82.   child->SetIcon(0, 0);
  83.   child->Create();
  84. }
  85.  
  86. void
  87. TGdiDemoWindow::CmFontDemo()
  88. {
  89.   TMDIChild* child = new TMDIChild(*this, "Font Window", new TFontWindow);;
  90.   child->SetIcon(GetApplication(), 101);
  91.   child->Create();
  92. }
  93.  
  94. void
  95. TGdiDemoWindow::CmBitBltDemo()
  96. {
  97.   TMDIChild* child = new TMDIChild(*this, "BitBlt Window", new TBitBltWindow);
  98.   child->SetIcon(0, 0);
  99.   child->Create();
  100. }
  101.  
  102. void
  103. TGdiDemoWindow::CmArtyDemo()
  104. {
  105.   TMDIChild* child = new TMDIChild(*this, "Arty Window", new TArtyWindow);
  106.   child->SetIcon(0, 0);
  107.   child->Create();
  108. }
  109.  
  110. //
  111. // Get client demo window from mdi child frame using typesafe downcasting
  112. //
  113. void
  114. ChildTimers(TWindow* p, void*)
  115. {
  116.   TFrameWindow* frame = TYPESAFE_DOWNCAST(p, TFrameWindow);
  117.   CHECK(frame);
  118.   TBaseDemoWindow* demoWin = TYPESAFE_DOWNCAST(frame->GetClientWindow(), TBaseDemoWindow);
  119.   CHECK(demoWin);
  120.   demoWin->TimerTick();
  121. }
  122.  
  123. //
  124. // In response to WMTimer messages, each MDI child window's TimerTick
  125. // Method is called.
  126. //
  127. void
  128. TGdiDemoWindow::EvTimer(UINT)
  129. {
  130.   ForEach(ChildTimers, 0);
  131. }
  132.  
  133. void
  134. TGdiDemoWindow::EvDestroy()
  135. {
  136.   KillTimer(0);
  137.   TMDIClient::EvDestroy();
  138. }
  139.  
  140. //----------------------------------------------------------------------------
  141.  
  142. class TGdiDemoApp : public TApplication {
  143.   public:
  144.     TGdiDemoApp() : TApplication() {}
  145.     void InitMainWindow();
  146. };
  147.  
  148. void
  149. TGdiDemoApp::InitMainWindow()
  150. {
  151.   MainWindow = new TMDIFrame("GDI Demo", MenuId, *new TGdiDemoWindow);
  152.   MainWindow->SetIcon(this, IconId);
  153. }
  154.  
  155. int
  156. OwlMain(int /*argc*/, char* /*argv*/ [])
  157. {
  158.   return TGdiDemoApp().Run();
  159. }
  160.