home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic 4 Unleashed / Visual_Basic_4_Unleashed_SAMS_Publishing_1995.iso / european / simple.cp_ / simple.cp
Text File  |  1995-10-05  |  6KB  |  225 lines

  1. /*---------------------------------------------------------------------------
  2. ** module:            SIMPLE (Application)
  3. ** file:                simple.cpp
  4. ** description:    This is a simple word processor which uses the Text-Contol
  5. **                        VBX together with the Borland Object Windows Library (OWL).
  6. **
  7. ** copyright:        ⌐ DBS GmbH 1994
  8. ** version:            1.0 /r 1.02
  9. **                     Text-Control TXL.DLL version 3.3
  10. **                        VBX Version TX4VBL.VBX 2.10
  11. ** compiler:        Borland C++ version 4.0
  12. ** author:            Heiner Suhr
  13. **
  14. ** changes:
  15. **     26.06.1994    Hei        started
  16. **-------------------------------------------------------------------------*/
  17. #include <owl\owlpch.h>
  18. #include <owl\applicat.h>
  19. #include <owl\framewin.h>
  20. #include <owl\opensave.h>
  21. #include <owl\vbxctl.h>
  22. #include "simple.rc"
  23.  
  24. // Status Bar, Ruler and ButtonBar height (in pixels)
  25. #define STATUSBAR_HEIGHT 25
  26. #define BUTTONBAR_HEIGHT 30
  27. #define RULER_HEIGHT 35
  28.  
  29. // Page dimensions (in twips)
  30. #define PAGE_HEIGHT 15840    // 11 inch
  31. #define PAGE_WIDTH    12240    // 8.5 inch
  32.  
  33. //
  34. // Main window class definition.
  35. //
  36. class TMyWindow : public TWindow, public TVbxEventHandler {
  37.  
  38.     public:
  39.         TMyWindow(TWindow *parent = 0);
  40.  
  41.     protected:
  42.         TVbxControl *TextControl, *StatusBar, *ButtonBar, *Ruler;
  43.         TOpenSaveDialog::TData   FilenameData;
  44.  
  45.  
  46.         void SetupWindow();
  47.  
  48.         // Message response functions
  49.         void CmFileNew();
  50.         void CmFileOpen();
  51.         void CmFileSaveAs();
  52.  
  53.         void CmEditCut();
  54.         void CmEditCopy();
  55.         void CmEditPaste();
  56.         void CmEditDelete();
  57.  
  58.         void EvSize(UINT, TSize&);
  59.         void EvErrorCode(VBXEVENT far *event);
  60.  
  61.  
  62.     DECLARE_RESPONSE_TABLE(TMyWindow);
  63. };
  64.  
  65. DEFINE_RESPONSE_TABLE2(TMyWindow, TWindow, TVbxEventHandler)
  66.  
  67.     // File menu
  68.     EV_COMMAND(CM_FILENEW, CmFileNew),
  69.     EV_COMMAND(CM_FILEOPEN, CmFileOpen),
  70.     EV_COMMAND(CM_FILESAVEAS, CmFileSaveAs),
  71.  
  72.     // Edit menu
  73.     EV_COMMAND(CM_EDITCUT, CmEditCut),
  74.     EV_COMMAND(CM_EDITCOPY, CmEditCopy),
  75.     EV_COMMAND(CM_EDITPASTE, CmEditPaste),
  76.     EV_COMMAND(CM_EDITDELETE, CmEditDelete),
  77.  
  78.     // VBX Events
  79.     EV_VBXEVENTNAME(10, "ErrorCode", EvErrorCode),
  80.  
  81.     EV_WM_SIZE,
  82. END_RESPONSE_TABLE;
  83.  
  84. //
  85. // Constructor for the main window. Creates a Text-Control, status bar,
  86. // button bar and ruler. The final position and size is determined when
  87. // the Size event is processed.
  88. //
  89. TMyWindow::TMyWindow(TWindow *parent)
  90.     : FilenameData(OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST,
  91.                                 "TX Files (*.tx)|*.tx|All Files (*.*)|*.*|",
  92.                                 0, "", "*")
  93. {
  94.     Init(parent, 0, 0);
  95.     StatusBar = new TVbxControl(this, 20, "Tx4vbl.vbx", "TXStatusBar", "", 0, 0, 0, 100, 0);
  96.     TextControl = new TVbxControl(this, 10, "Tx4vbl.vbx", "TextControl", "", 0, 0, 100, 100, 0);
  97.     ButtonBar = new TVbxControl(this, 30, "Tx4vbl.vbx", "TXButtonBar", "", 0, 0, 100, 100, 0);
  98.     Ruler = new TVbxControl(this, 40, "Tx4vbl.vbx", "TXRuler", "", 0, 0, 100, 100, 0);
  99. }
  100.  
  101. //
  102. // SetupWindow member function of the main window. This is used to connect
  103. // the Text-Control to its tools and set the focus to the Text-Control.
  104. //
  105. void TMyWindow::SetupWindow()
  106. {
  107.     TWindow::SetupWindow();
  108.  
  109.     // Connect TextControl to tools
  110.     TextControl->SetProp("StatusBar", "TXStatusBar");
  111.     TextControl->SetProp("ButtonBar", "TXButtonBar");
  112.     TextControl->SetProp("Ruler", "TXRuler");
  113.     TextControl->SetFocus();
  114.  
  115.     // Set page size and enable scrollbars
  116.     TextControl->SetProp("PageHeight", PAGE_HEIGHT);
  117.     TextControl->SetProp("PageWidth", PAGE_WIDTH);
  118.  
  119.     // For Borland C++ versions < 4.5, property values must be
  120.     // specified in pixels:
  121.     // TextControl->SetProp("PageHeight", VBXTwp2PixX(PAGE_HEIGHT));
  122.     // TextControl->SetProp("PageWidth", VBXTwp2PixY(PAGE_WIDTH));
  123.  
  124.     TextControl->SetProp("ScrollBars", 3);
  125.  }
  126.  
  127. //
  128. // File menu commands
  129. //
  130. void TMyWindow::CmFileNew()
  131. {
  132.     TextControl->SetProp("Text", "");
  133. }
  134.  
  135. void TMyWindow::CmFileOpen()
  136. {
  137.     HFILE hFile=0;
  138.     OFSTRUCT of;
  139.  
  140.     if (TFileOpenDialog(this, FilenameData).Execute() != IDOK) {
  141.         if (FilenameData.Error != 0) {   // 0 value means user selected Cancel
  142.             char  msg[50];
  143.             wsprintf(msg, "File Open Error #%ld", FilenameData.Error);
  144.             MessageBox(msg, "WARNING", MB_OK|MB_ICONSTOP);
  145.         }
  146.     } else {
  147.         hFile = OpenFile(FilenameData.FileName, &of, OF_READ);
  148.         TextControl->SetProp("Load", hFile);
  149.         _lclose(hFile);
  150.     }
  151. }
  152.  
  153. void TMyWindow::CmFileSaveAs()
  154. {
  155.     HFILE hFile=0;
  156.     OFSTRUCT of;
  157.  
  158.     if (TFileSaveDialog(this, FilenameData).Execute() != IDOK) {
  159.         if (FilenameData.Error != 0) {   // 0 value means user selected Cancel
  160.             char  msg[50];
  161.             wsprintf(msg, "File Save Error #%ld", FilenameData.Error);
  162.             MessageBox(msg, "WARNING", MB_OK|MB_ICONSTOP);
  163.         }
  164.     } else {
  165.         hFile = OpenFile(FilenameData.FileName, &of, OF_CREATE);
  166.         TextControl->SetProp("Save", hFile);
  167.         _lclose(hFile);
  168.     }
  169. }
  170.  
  171. //
  172. // Edit menu commands
  173. //
  174. void TMyWindow::CmEditCut()             { TextControl->SetProp("Clip", 1); }
  175. void TMyWindow::CmEditCopy()             { TextControl->SetProp("Clip", 2); }
  176. void TMyWindow::CmEditPaste()            { TextControl->SetProp("Clip", 3); }
  177. void TMyWindow::CmEditDelete()        { TextControl->SetProp("Clip", 4); }
  178.  
  179. //
  180. // Size  event. Move and resize all of the 4 controls so that
  181. // they fill the entire window.
  182. //
  183. void TMyWindow::EvSize(UINT SizeType, TSize& Size)
  184. {
  185.     ButtonBar->SetWindowPos(NULL, 0, 0,
  186.         Size.cx, BUTTONBAR_HEIGHT, SWP_NOZORDER);
  187.     Ruler->SetWindowPos(NULL, 0, BUTTONBAR_HEIGHT,
  188.         Size.cx, RULER_HEIGHT, SWP_NOZORDER);
  189.     TextControl->SetWindowPos(NULL, 0, BUTTONBAR_HEIGHT + RULER_HEIGHT,
  190.         Size.cx, Size.cy - (BUTTONBAR_HEIGHT + RULER_HEIGHT + STATUSBAR_HEIGHT),
  191.         SWP_NOZORDER);
  192.     StatusBar->SetWindowPos(NULL, 0, Size.cy - STATUSBAR_HEIGHT,
  193.         Size.cx, STATUSBAR_HEIGHT, SWP_NOZORDER);
  194. }
  195.  
  196. void TMyWindow::EvErrorCode(VBXEVENT far *event)
  197. {
  198.     char     sz[50];
  199.     WORD     wErrorCode;
  200.  
  201.     wErrorCode = VBX_EVENTARGNUM(event, short, 0);
  202.     wsprintf(sz, "Text-Control Error Code %x", wErrorCode);
  203.     MessageBox(sz);
  204. }
  205.  
  206. //
  207. // Application class.
  208. //
  209. class TMyApp : public TApplication {
  210.     public:
  211.         TMyApp() : TApplication() {}
  212.  
  213.         void InitMainWindow()
  214.         {
  215.             MainWindow = new TFrameWindow(0, "Text-Control Demo", new TMyWindow);
  216.             MainWindow->AssignMenu("COMMANDS");
  217.         }
  218. };
  219.  
  220. int OwlMain(int /*argc*/, char* /*argv*/ [])
  221. {
  222.     TBIVbxLibrary vbxLib;     // constructing this loads & inits the library
  223.     return TMyApp().Run();
  224. }
  225.