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

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows - (C) Copyright 1991, 1993 by Borland International
  3. //----------------------------------------------------------------------------
  4. #include <owl\owlpch.h>
  5. #include <owl\applicat.h>
  6. #include <owl\framewin.h>
  7. #include <owl\dc.h>
  8. #include <cstring.h>
  9. #include "dllhello.h"
  10. #include "calldll.h"
  11.  
  12. static TModule  ResourceDll("resource.dll");   // DLL to be loaded.
  13.  
  14. class TTestWindow : public TWindow {
  15.   public:
  16.     TTestWindow() : TWindow(0, 0, ::Module) {} // associate with this module
  17.  
  18.     void SetupWindow();
  19.     void CleanupWindow();
  20.  
  21.     void CmCreate();          // Call into a DLL to create a window.
  22.     void CmRString();         // Load a String resource from a DLL.
  23.     void CmRCursor();         // Load a Cursor resource from a DLL.
  24.     void CmRIcon();           // Load a Icon resource from a DLL.
  25.     void CmRBitmap();         // Load a Bitmap resource from a DLL.
  26.  
  27.     void Paint(TDC& dc, BOOL erase, TRect& rect);
  28.  
  29.   private:
  30.  
  31.     HICON   SampleIcon;       // Handle to Icon.
  32.     HBITMAP SampleBitmap;     // Handle to Bitmap.
  33.     
  34.     DECLARE_RESPONSE_TABLE(TTestWindow);
  35. };
  36.  
  37. DEFINE_RESPONSE_TABLE1(TTestWindow, TWindow)
  38.   EV_COMMAND(CM_CREATE, CmCreate),
  39.   EV_COMMAND(CM_RSTRING, CmRString),
  40.   EV_COMMAND(CM_RCURSOR, CmRCursor),
  41.   EV_COMMAND(CM_RICON, CmRIcon),
  42.   EV_COMMAND(CM_RBITMAP, CmRBitmap),
  43. END_RESPONSE_TABLE;
  44.  
  45. void
  46. TTestWindow::SetupWindow()
  47. {
  48.   TWindow::SetupWindow();
  49.   SampleIcon = 0;
  50.   SampleBitmap = 0;
  51. }
  52.  
  53. void
  54. TTestWindow::CleanupWindow()
  55. {
  56.   if (SampleIcon)
  57.     ::DestroyIcon(SampleIcon);      // Cleanup resources.
  58.   if (SampleBitmap)
  59.     ::DeleteObject(SampleBitmap);
  60.   TWindow::CleanupWindow();
  61. }
  62.  
  63. //
  64. // Call into DLL to create window.
  65. //
  66. void
  67. TTestWindow::CmCreate()
  68. {
  69.   CreateDLLWindow(HWindow);
  70. }
  71.  
  72. //
  73. // Load a String from resource DLL. Display it in a message box.
  74. //
  75. void
  76. TTestWindow::CmRString()
  77. {
  78.   const RESLEN=30;
  79.  
  80.   char far* str = new char[RESLEN];
  81.  
  82.   ResourceDll.LoadString(ID_STRING, str, RESLEN);
  83.   MessageBox(str, "The String Is!", MB_OK);
  84.   delete[] str;
  85. }
  86.  
  87. //
  88. // Load and set Cursor for window.
  89. //
  90. void
  91. TTestWindow::CmRCursor()
  92. {
  93.   SetCursor(&ResourceDll, ID_CURSOR);
  94. }
  95.  
  96. //
  97. // Load and display cursor on window.
  98. //
  99. void
  100. TTestWindow::CmRIcon()
  101. {
  102.   char    temp[5];
  103.   string  resIdAsString;
  104.  
  105.   itoa(ID_ICON, temp, 10);
  106.   resIdAsString = "#";
  107.   resIdAsString += temp;
  108.   SampleIcon = ResourceDll.LoadIcon(resIdAsString.c_str());
  109.   CHECK(SampleIcon);
  110.   Invalidate();
  111. }
  112.  
  113. //
  114. // Load and display Bitmap on window.
  115. //
  116. void
  117. TTestWindow::CmRBitmap()
  118. {
  119.   SampleBitmap = ResourceDll.LoadBitmap(ID_BITMAP);
  120.   CHECK(SampleBitmap);
  121.   Invalidate();
  122. }
  123.  
  124. //
  125. // Will display Icon and Bitmap resource if they have been loaded.
  126. //
  127. void
  128. TTestWindow::Paint(TDC& dc, BOOL, TRect&)
  129. {
  130.   if (SampleIcon)
  131.     dc.DrawIcon(5, 5, TIcon(SampleIcon));
  132.   if (SampleBitmap) {
  133.     TMemoryDC memDC;
  134.     memDC.SelectObject(TBitmap(SampleBitmap));
  135.     dc.BitBlt(50, 5, 64, 64, memDC, 0, 0 );
  136.   }
  137. }
  138.  
  139. //----------------------------------------------------------------------------
  140.  
  141. class TCallDllApp : public TApplication {
  142.   public:
  143.     void InitMainWindow();
  144. };
  145.  
  146. void
  147. TCallDllApp::InitMainWindow()
  148. {
  149.   MainWindow = new TFrameWindow(0, "CallDll", new TTestWindow);
  150.   MainWindow->AssignMenu("COMMANDS");
  151. }
  152.  
  153. int
  154. OwlMain(int /*argc*/, char* /*argv*/ [])
  155. {
  156.   return TCallDllApp().Run();
  157. }
  158.