home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / bc45 / expert.pak / TMDICLIE.OWL < prev    next >
Text File  |  1997-07-23  |  17KB  |  504 lines

  1. '////////////////////////////////////////////////////////////////////////////////////   
  2. '   Expert PROJECT
  3. '   Expert - (C) Copyright 1993 by Borland International, Inc. All Rights Reserved.
  4. '
  5. '   SUBSYSTEM:    OWL code template
  6. '   FILE:         TMDIClient.OWL
  7. '
  8. '
  9. '   OVERVIEW
  10. '   ========
  11. '   Definition of all OWL classes when can be generated by  the CODEGEN phase of
  12. '   AppGen and ClassExpert.  AppGen generates when all options have been selected
  13. '   and multiple classes are generated.  ClassExpert uses the CODEGEN phase when
  14. '   a new class is generated.
  15. '////////////////////////////////////////////////////////////////////////////////////   
  16.  
  17.  
  18. <<[H]TMDIClient [[TMDIClient]]
  19. ##{hheader.snp}
  20. #include <owl\owlpch.h>
  21. #pragma hdrstop
  22.  
  23. ##<<TApplication QUERY_FILENAME_CPP [[FileName]]
  24. #include "[[FileName]].rh"            // Definition of all resources.
  25.  
  26.  
  27. //{{TMDIClient = [[TMDIClient]]}}
  28. class [[TMDIClient]] : public TMDIClient {
  29. public:
  30.     int                     ChildCount;                 // Number of child window created. 
  31.  
  32.     [[TMDIClient]](TModule* module = 0);
  33.     virtual ~[[TMDIClient]] ();
  34.  
  35.     void OpenFile (const char *fileName = 0);
  36.  
  37. private:
  38.     void LoadTextFile ();
  39.  
  40. //{{[[TMDIClient]]VIRTUAL_BEGIN}}
  41. protected:
  42. ##:DBVirtual(\\"[[TMDIClient]]", "SetupWindow")
  43.     virtual void SetupWindow ();
  44. //{{[[TMDIClient]]VIRTUAL_END}}
  45.  
  46. //{{[[TMDIClient]]RSP_TBL_BEGIN}}
  47. protected:
  48. ##!@OPT_APPL_DOCVIEW 2
  49.     void CmFileNew ();
  50.     void CmFileOpen ();
  51. ##@OPT_APPL_PRINTING 4
  52.     void CmFilePrint ();
  53.     void CmFilePrintSetup ();
  54.     void CmFilePrintPreview ();
  55.     void CmPrintEnable (TCommandEnabler &tce);
  56. ##@OPT_APPL_DRAGDROP
  57.     void EvDropFiles (TDropInfo);
  58. //{{[[TMDIClient]]RSP_TBL_END}}
  59. DECLARE_RESPONSE_TABLE([[TMDIClient]]);
  60. };    //{{[[TMDIClient]]}}
  61. ##{hfooter.snp}
  62. >>[H]TMDIClient
  63.  
  64.  
  65. '
  66. ' TMDIClient CPP file.
  67. '
  68. <<[CPP]TMDIClient [[TMDIClient]]
  69. ##{cheader.snp}
  70. #include <owl\owlpch.h>
  71. #pragma hdrstop
  72.  
  73. ##@OPT_APPL_DRAGDROP 2
  74. #include <dir.h>
  75.  
  76. ##!@OPT_APPL_DRAGDROP 2
  77. ##:     !@OPT_APPL_DOCVIEW
  78. #include <dir.h>
  79.  
  80. ##<<TApplication QUERY_FILE_H [[FileName]]
  81. #include "[[FileName]]"
  82. ##--BEGIN-- !@OPT_APPL_DOCVIEW
  83. ##  --BEGIN-- @QUERY_APPL_MODEL == VALUE_MDI
  84. ##:     <<TMDIChild QUERY_WIND_CLIENT [[Client]]
  85. ##:     <<*Client QUERY_FILE_H [[FileName]]
  86. #include "[[FileName]]"
  87. ##  --END-- @QUERY_APPL_MODEL == VALUE_MDI
  88. ##  --BEGIN-- @QUERY_APPL_MODEL == VALUE_SDI
  89.  
  90. ##  --END-- @QUERY_APPL_MODEL == VALUE_SDI
  91. ##--END-- !@OPT_APPL_DOCVIEW
  92. ##<<TMDIChild QUERY_FILE_H [[FileName]]
  93. #include "[[FileName]]"
  94. ##QUERY_FILE_H [[FileName]]
  95. #include "[[FileName]]"
  96. ##@OPT_APPL_PRINTING 2
  97. #include "apxprint.h"
  98. #include "apxprev.h"
  99.  
  100.  
  101. //{{[[TMDIClient]] Implementation}}
  102.  
  103.  
  104. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  105. //
  106. // Build a response table for all messages/commands handled
  107. // by [[TMDIClient]] derived from TMDIClient.
  108. //
  109. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  110. DEFINE_RESPONSE_TABLE1([[TMDIClient]], TMDIClient)
  111. //{{[[TMDIClient]]RSP_TBL_BEGIN}}
  112. ##!@OPT_APPL_DOCVIEW 2
  113. ##:DBResponse(\\"[[TMDIClient]]", "CM_MDIFILENEW", "CmFileNew", "", "COMMAND")
  114. ##:DBResponse(\\"[[TMDIClient]]", "CM_MDIFILEOPEN", "CmFileOpen", "", "COMMAND")
  115.     EV_COMMAND(CM_MDIFILENEW, CmFileNew),
  116.     EV_COMMAND(CM_MDIFILEOPEN, CmFileOpen),
  117. ##@OPT_APPL_PRINTING 6
  118. ##:DBResponse(\\"[[TMDIClient]]", "CM_FILEPRINT", "CmFilePrint", "", "COMMAND")
  119. ##:DBResponse(\\"[[TMDIClient]]", "CM_FILEPRINTERSETUP", "CmFilePrintSetup", "", "COMMAND")
  120. ##:DBResponse(\\"[[TMDIClient]]", "CM_FILEPRINTPREVIEW", "CmFilePrintPreview", "", "COMMAND")
  121. ##:DBResponse(\\"[[TMDIClient]]", "CM_FILEPRINT", "CmPrintEnable", "", "ENABLER")
  122. ##:DBResponse(\\"[[TMDIClient]]", "CM_FILEPRINTERSETUP", "CmPrintEnable", "", "ENABLER")
  123. ##:DBResponse(\\"[[TMDIClient]]", "CM_FILEPRINTPREVIEW", "CmPrintEnable", "", "ENABLER")
  124.     EV_COMMAND(CM_FILEPRINT, CmFilePrint),
  125.     EV_COMMAND(CM_FILEPRINTERSETUP, CmFilePrintSetup),
  126.     EV_COMMAND(CM_FILEPRINTPREVIEW, CmFilePrintPreview),
  127.     EV_COMMAND_ENABLE(CM_FILEPRINT, CmPrintEnable),
  128.     EV_COMMAND_ENABLE(CM_FILEPRINTERSETUP, CmPrintEnable),
  129.     EV_COMMAND_ENABLE(CM_FILEPRINTPREVIEW, CmPrintEnable),
  130. ##@OPT_APPL_DRAGDROP
  131. ##:DBResponse(\\"[[TMDIClient]]", "", "", "WM_DROPFILES", "")
  132.     EV_WM_DROPFILES,
  133. //{{[[TMDIClient]]RSP_TBL_END}}
  134. END_RESPONSE_TABLE;
  135.  
  136.  
  137. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  138. //////////////////////////////////////////////////////////
  139. // [[TMDIClient]]
  140. // ===========
  141. // Construction/Destruction handling.
  142. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  143. [[TMDIClient]]::[[TMDIClient]] (TModule* module)
  144.  : TMDIClient (module)
  145. {
  146. ##QUERY_WIND_STYLE [[StyleAttributes]]
  147. ##StyleAttributes != "" 3
  148.     // Override the default window style for TMDIClient.
  149. [[StyleAttributes]]
  150.  
  151. ##QUERY_WIND_BACKGRND [[BackgroundColor]]
  152. ##BackgroundColor != "" 3
  153.     // Change the window's background color
  154.     SetBkgndColor([[BackgroundColor]]);
  155.  
  156.     ChildCount = 0;
  157.  
  158.     // INSERT>> Your constructor code here.
  159.  
  160. }
  161.  
  162.  
  163. [[TMDIClient]]::~[[TMDIClient]] ()
  164. {
  165.     Destroy();
  166.  
  167.     // INSERT>> Your destructor code here.
  168.  
  169. }
  170.  
  171.  
  172. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  173. //////////////////////////////////////////////////////////
  174. // [[TMDIClient]]
  175. // ===========
  176. // MDIClient site initialization.
  177. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  178. void [[TMDIClient]]::SetupWindow ()
  179. {
  180.     // Default SetUpWindow processing.
  181.     TMDIClient::SetupWindow ();
  182.  
  183. ##--BEGIN-- !@OPT_APPL_DOCVIEW
  184. ##<<TApplication QUERY_CLASS_NAME [[TApplication]]
  185.     [[TApplication]] *theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
  186.  
  187. ##@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  188.     // Common file file flags and filters for Open/Save As dialogs.  Filename and directory are
  189.     // computed in the member functions CmFileOpen, and CmFileSaveAs.
  190.     theApp->FileData.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
  191. ##OPT_DV_RESET
  192. ##OPT_DV_NEXT
  193. ##QUERY_DV_DESCR [[Descr]]
  194. ##--BEGIN-- QUERY_DV_FILTER [[Filter]]
  195. ##(Filter != "*.*") && (Descr != "All Files (*.*)"
  196.     theApp->FileData.SetFilter("[[Descr]]|[[Filter]]|All Files (*.*)|*.*|");
  197. ##(Filter == "*.*") && (Descr == "All Files (*.*)"
  198.     theApp->FileData.SetFilter("All Files (*.*)|*.*|");
  199.  
  200. ##--END-- QUERY_DV_FILTER [[Filter]]
  201. ##--END-- !@OPT_APPL_DOCVIEW
  202. ##@OPT_APPL_DRAGDROP 2
  203.     // Accept files via drag/drop in the client window.
  204.     DragAcceptFiles(true);
  205. }
  206.  
  207.  
  208. ##--BEGIN-- !@OPT_APPL_DOCVIEW
  209. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  210. //////////////////////////////////////////////////////////
  211. // [[TMDIClient]]
  212. // ===========
  213. // Menu File New command
  214. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  215. void [[TMDIClient]]::CmFileNew ()
  216. {
  217. ##<<TMDIChild QUERY_WIND_CLIENT [[ClientClass]]
  218. ##--BEGIN-- <<*ClientClass QUERY_BASE_NAME [[BaseClient]]
  219. ##--BEGIN-- BaseClient != "TEditFile"
  220.     char    title[255];
  221.     char    numberStr[16];
  222.  
  223. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE
  224.     // Generate a title for the MDI child window.
  225.     if (GetModule()->LoadString(IDS_UNTITLED, title, sizeof(title))) {
  226.         wsprintf(numberStr, " - %d", ChildCount++);
  227.         strcat(title, numberStr);
  228.     } else
  229.         title[0] = '\0';
  230.  
  231. ##--END-- BaseClient != "TEditFile"
  232. ##--BEGIN-- BaseClient == "TEditFile"
  233.     char    title[255];
  234.  
  235. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE
  236.     // Generate a title for the MDI child window.
  237.     wsprintf(title, "%d", ChildCount++);
  238.  
  239. ##--END-- BaseClient "TEditFile"
  240. ##--BEGIN-- <<TMDIChild QUERY_CLASS_NAME [[TMDIChild]]
  241. ##BaseClient == "TEditFile"
  242.     [[TMDIChild]]* child = new [[TMDIChild]](*this, title, 0);
  243. ##BaseClient == "TListBox"
  244.     [[TMDIChild]]* child = new [[TMDIChild]](*this, title, 0);
  245. ##BaseClient == "TWindow"
  246.     [[TMDIChild]]* child = new [[TMDIChild]](*this, title, 0);
  247. ##--END-- <<TMDIChild QUERY_CLASS_NAME [[TMDIChild]]
  248. ##--END-- <<*ClientClass QUERY_BASE_NAME [[BaseClient]]
  249.  
  250. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE
  251.     // Associate ICON w/ this child window.
  252.     child->SetIcon(GetApplication(), IDI_DOC);
  253.  
  254. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE
  255.     // If the current active MDI child is maximize then this one should be also.
  256. ##<<TMDIChild QUERY_CLASS_NAME [[TMDIChild]]
  257.     [[TMDIChild]] *curChild = ([[TMDIChild]] *)GetActiveMDIChild();
  258.     if (curChild && (curChild->GetWindowLong(GWL_STYLE) & WS_MAXIMIZE))
  259.         child->Attr.Style |= WS_MAXIMIZE;
  260.  
  261.     child->Create();
  262. }
  263.  
  264.  
  265. void [[TMDIClient]]::OpenFile (const char *fileName)
  266. {
  267. ##<<TApplication QUERY_CLASS_NAME [[TApplication]]
  268.     [[TApplication]] *theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
  269.  
  270.     if (fileName)
  271.         strcpy(theApp->FileData.FileName, fileName);
  272.  
  273.     //
  274. ##<<TMDIChild QUERY_WIND_CLIENT [[TMDIChildClient]]
  275.     // Create a MDIChild window whose client is [[TMDIChildClient]].
  276.     //
  277. ##<<TMDIChild QUERY_CLASS_NAME [[TMDIChild]]
  278. ##<<TMDIChild QUERY_WIND_CLIENT [[ClientClass]]
  279. ##<<*ClientClass QUERY_BASE_NAME [[BaseClient]]
  280. ##--BEGIN-- TRUE
  281. ##BaseClient == "TEditFile"
  282.     [[TMDIChild]]* child = new [[TMDIChild]](*this, "", new [[ClientClass]](0, 0, 0, 0, 0, 0, 0, theApp->FileData.FileName));
  283. ##BaseClient == "TListBox" 2
  284.     [[ClientClass]] far *client = new [[ClientClass]](0, 0, 0, 0, 100, 100);
  285.     [[TMDIChild]]* child = new [[TMDIChild]](*this, theApp->FileData.FileName, client);
  286. ##BaseClient == "TWindow"
  287.     [[TMDIChild]]* child = new [[TMDIChild]](*this, theApp->FileData.FileName, new [[ClientClass]](0));
  288. ##--END-- TRUE
  289.  
  290. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE
  291.     // Associate ICON w/ this child window.
  292.     child->SetIcon(GetApplication(), IDI_DOC);
  293.  
  294. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE
  295.     // If the current active MDI child is maximize then this one should be also.
  296. ##<<TMDIChild QUERY_CLASS_NAME [[TMDIChild]]
  297.     [[TMDIChild]] *curChild = ([[TMDIChild]] *)GetActiveMDIChild();
  298.     if (curChild && (curChild->GetWindowLong(GWL_STYLE) & WS_MAXIMIZE))
  299.         child->Attr.Style |= WS_MAXIMIZE;
  300.  
  301.     child->Create();
  302.  
  303.     LoadTextFile();
  304. }
  305.  
  306.  
  307. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  308. //////////////////////////////////////////////////////////
  309. // [[TMDIClient]]
  310. // ===========
  311. // Menu File Open command
  312. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  313. void [[TMDIClient]]::CmFileOpen ()
  314. {
  315. ##<<TApplication QUERY_CLASS_NAME [[TApplication]]
  316.     [[TApplication]] *theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
  317.  
  318. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  319.     //
  320.     // Display standard Open dialog box to select a file name.
  321.     //
  322. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  323.     *(theApp->FileData.FileName) = 0;
  324.     if (TFileOpenDialog(this, theApp->FileData).Execute() == IDOK)
  325.         OpenFile();
  326. }
  327.  
  328.  
  329. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE
  330. // Used by ListBox client to read a text file into the list box.
  331. void [[TMDIClient]]::LoadTextFile ()
  332. {
  333.     char            buf[255+1];
  334.     ifstream        *inStream;
  335.  
  336. ##<<TApplication QUERY_CLASS_NAME [[TApplication]]
  337.     [[TApplication]] *theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
  338.  
  339. ##<<TMDIChild QUERY_CLASS_NAME [[TMDIChild]]
  340.     [[TMDIChild]]  *curChild = ([[TMDIChild]] *)GetActiveMDIChild();
  341.     TListBox        *client = TYPESAFE_DOWNCAST(curChild->GetClientWindow(), TListBox);
  342.  
  343. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE
  344.     // Only work if the client class is a TListBox.
  345.     if (client) {
  346.         client->ClearList();
  347.         inStream = new ifstream(theApp->FileData.FileName);
  348.         while (inStream->good()) {
  349.             inStream->getline(buf, sizeof(buf) - 1);
  350.             if (inStream->good())
  351.                 client->AddString(buf);
  352.         }
  353.  
  354. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE
  355.         // Return an error message if we had a stream error and it wasn't the eof.
  356.         if (inStream->bad() && !inStream->eof()) {
  357.             string msgTemplate(*GetModule(), IDS_UNABLEREAD);
  358.             char*  msg = new char[MAXPATH + msgTemplate.length()];
  359.             wsprintf(msg, msgTemplate.c_str(), *(theApp->FileData.FileName));
  360.             MessageBox(msg, GetApplication()->GetName(), MB_ICONEXCLAMATION | MB_OK);
  361.             delete msg;
  362.         }
  363.  
  364.         delete inStream;
  365.     }
  366. }
  367.  
  368.  
  369. ##--END-- !@OPT_APPL_DOCVIEW
  370. ##--BEGIN-- @OPT_APPL_PRINTING
  371. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  372. //////////////////////////////////////////////////////////
  373. // [[TMDIClient]]
  374. // ==========
  375. // Menu File Print command
  376. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  377. void [[TMDIClient]]::CmFilePrint ()
  378. {
  379. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  380.     //
  381.     // Create Printer object if not already created.
  382.     // 
  383. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  384. ##<<TApplication QUERY_CLASS_NAME [[TApplication]]
  385.     [[TApplication]] *theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
  386.     if (theApp) {
  387.         if (!theApp->Printer)
  388.             theApp->Printer = new TPrinter(GetApplication());
  389.  
  390. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  391.         //
  392.         // Create Printout window and set characteristics.
  393.         //
  394. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  395.         APXPrintOut printout(theApp->Printer, Title, GetActiveMDIChild()->GetClientWindow(), true);
  396.  
  397.         theApp->Printing++;
  398.  
  399. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  400.         //
  401.         // Bring up the Print dialog and print the document.
  402.         //
  403. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  404.         theApp->Printer->Print(GetWindowPtr(GetActiveWindow()), printout, true);
  405.  
  406.         theApp->Printing--;
  407.     }
  408. }
  409.  
  410.  
  411. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  412. //////////////////////////////////////////////////////////
  413. // [[TMDIClient]]
  414. // ==========
  415. // Menu File Print Setup command
  416. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  417. void [[TMDIClient]]::CmFilePrintSetup ()
  418. {
  419. ##<<TApplication QUERY_CLASS_NAME [[TApplication]]
  420.     [[TApplication]] *theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
  421.     if (theApp) {
  422.         if (!theApp->Printer)
  423.             theApp->Printer = new TPrinter(GetApplication());
  424.  
  425. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  426.         //
  427.         // Bring up the Print Setup dialog.
  428.         //
  429. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  430.         theApp->Printer->Setup(this);
  431.     }
  432. }
  433.  
  434.  
  435. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  436. //////////////////////////////////////////////////////////
  437. // [[TMDIClient]]
  438. // ==========
  439. // Menu File Print Preview command
  440. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  441. void [[TMDIClient]]::CmFilePrintPreview ()
  442. {
  443. ##<<TApplication QUERY_CLASS_NAME [[TApplication]]
  444.     [[TApplication]] *theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
  445.     if (theApp) {
  446.         if (!theApp->Printer)
  447.             theApp->Printer = new TPrinter(GetApplication());
  448.  
  449.         theApp->Printing++;
  450.  
  451.         PreviewWindow *prevW = new PreviewWindow(Parent, theApp->Printer, GetActiveMDIChild()->GetClientWindow(), "Print Preview", new TLayoutWindow(0));
  452.         prevW->Create();
  453.  
  454.         GetApplication()->BeginModal(GetApplication()->GetMainWindow());
  455.  
  456. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  457.         // We must destroy the preview window explicitly.  Otherwise, the window will not be destroyed until
  458.         // it's parent the MainWindow is destroyed.
  459.         prevW->Destroy();
  460.         delete prevW;
  461.  
  462.         theApp->Printing--;
  463.     }
  464. }
  465.  
  466.  
  467. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  468. //////////////////////////////////////////////////////////
  469. // [[TMDIClient]]
  470. // ==========
  471. // Menu enabler used by Print, Print Setup and Print Preview.
  472. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  473. void [[TMDIClient]]::CmPrintEnable (TCommandEnabler &tce)
  474. {
  475.     if (GetActiveMDIChild()) {
  476. ##<<TApplication QUERY_CLASS_NAME [[TApplication]]
  477.         [[TApplication]] *theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
  478.         if (theApp) {
  479. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  480.             // If we have a Printer already created just test if all is okay.
  481.             // Otherwise create a Printer object and make sure the printer
  482.             // really exists and then delete the Printer object.
  483. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  484.             if (!theApp->Printer) {
  485.                 theApp->Printer = new TPrinter(GetApplication());
  486.                 
  487.                 tce.Enable(theApp->Printer->GetSetup().Error == 0);
  488.             } else
  489.                 tce.Enable(theApp->Printer->GetSetup().Error == 0);
  490.         }
  491.     } else
  492.         tce.Enable(false);
  493. }
  494.  
  495.  
  496. ##--END-- @OPT_APPL_PRINTING
  497. ##--BEGIN-- @OPT_APPL_DRAGDROP
  498. void [[TMDIClient]]::EvDropFiles (TDropInfo)
  499. {
  500.     Parent->ForwardMessage();
  501. }
  502. ##--END-- @OPT_APPL_DRAGDROP
  503. >>[CPP]TMDIClient
  504.