home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / BC_502 / DLLHELLO.PAK / CALLDLL.CPP next >
Encoding:
C/C++ Source or Header  |  1997-05-06  |  3.5 KB  |  178 lines

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