home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / com / tutsamp / perclien / guidraw.h < prev    next >
C/C++ Source or Header  |  1997-08-05  |  8KB  |  183 lines

  1. /*+==========================================================================
  2.   File:      GUIDRAW.H
  3.  
  4.   Summary:   Include file for the CGuiDraw C++ class. A GuiDraw is a C++
  5.              object that displays and stores mouse movements as free-form
  6.              line drawing or "scribbling" in the client area of a separate
  7.              window. GuiDraw is anchored to the Windows GUI (Graphical
  8.              User Interface) environment. This GuiDraw object relies on a
  9.              virtual Drawing Paper object that is instantiated as a COM
  10.              object (a CODrawPage) in a separate In-process server,
  11.              PERDRAW, to store the "ink" data that is drawn.
  12.  
  13.              For a comprehensive tutorial code tour of GUIDRAW's contents
  14.              and offerings see the tutorial PERCLIEN.HTM file. For
  15.              more specific technical details on the internal workings see
  16.              the comments dispersed throughout the GUIDRAW source code.
  17.  
  18.   Classes:   CGuiDraw.
  19.  
  20.   Origin:    5-24-97: atrent - Editor inheritance from GUIPAPER.H in the
  21.              STOCLIEN source.
  22. ----------------------------------------------------------------------------
  23.   This file is part of the Microsoft COM Tutorial Code Samples.
  24.  
  25.   Copyright (C) Microsoft Corporation, 1997.  All rights reserved.
  26.  
  27.   This source code is intended only as a supplement to Microsoft
  28.   Development Tools and/or on-line documentation.  See these other
  29.   materials for detailed information regarding Microsoft code samples.
  30.  
  31.   THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
  32.   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  33.   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  34.   PARTICULAR PURPOSE.
  35. ==========================================================================+*/
  36.  
  37.  
  38. #if !defined(GUIDRAW_H)
  39. #define GUIDRAW_H
  40.  
  41.  
  42. #if defined(__cplusplus)
  43.  
  44. // Some compile-time constants for ink thickness in pixels.
  45. enum
  46. {
  47.   INK_THIN = 2,
  48.   INK_MEDIUM = 10,
  49.   INK_THICK = 20
  50. };
  51.  
  52.  
  53. /*C+C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C
  54.   Class:    CGuiDraw
  55.  
  56.   Summary:  Class to encapsulate the displayable Graphical User Interface
  57.             (GUI) for functioning drawing objects in separate windows.
  58.             Such a window has its own menu and window procedure. CGuiDraw
  59.             is derived from APPUTIL's CVirWindow and thus inherits all the
  60.             features and benefits of CVirWindow.
  61.  
  62.   Methods:  CGuiDraw
  63.               Constructor.
  64.             ~CGuiDraw
  65.               Destructor.
  66.             BOOL OpenWin(
  67.                    IStorage* pIStorage_Page,
  68.                    WCHAR* pwszPageTitle,
  69.                    WCHAR* pwszDataName);
  70.               Open the drawing window of this CGuiDraw object.
  71.             HRESULT TopWin(void);
  72.               Make this the topmost window on the screen.
  73.             HRESULT ResizeWin(WORD wWidth, WORD wHeight);
  74.               Resize the display window.
  75.             HRESULT ClearWin(void);
  76.               Clear display window but retain ink data.
  77.             HRESULT PaintWin(void);
  78.               Clear window and Repaint the window with ink data.
  79.             HRESULT InkSaving(BOOL bInkSaving);
  80.               Turn Ink data saving in on and off.
  81.             HRESULT InkWidth(SHORT nInkWidth);
  82.               Set current ink line width for drawing.
  83.             HRESULT InkColor(COLORREF crInkColor);
  84.               Set current ink color for drawing.
  85.             HRESULT InkStart(SHORT nX, SHORT nY);
  86.               Start ink drawing sequence.
  87.             HRESULT InkDraw(SHORT nX, SHORT nY);
  88.               Draw ink sequence data.
  89.             HRESULT InkStop(SHORT nX, SHORT nY);
  90.               Stop ink drawing sequence.
  91.             HRESULT Renumber(INT iPage);
  92.               Re-assign the current dynamic page number for this page.
  93.             HRESULT ReleasePage(void);
  94.               Release all substorages for this draw page.
  95.             HRESULT RestorePage(IStorage* pIStorage_Page);
  96.               Reopen all substorages for the draw page.
  97.             HRESULT Close(void);
  98.               Close this draw page window and it's open substorages.
  99.             HRESULT Save(void);
  100.               Save existing Ink Data to the page's substorage.
  101.             INT AskSave(void);
  102.               Check if new ink data, ask user, save if user says to.
  103.             HRESULT Delete(void);
  104.               Delete the entire substorage for this draw page. Close Window.
  105.             HRESULT Clear(void);
  106.               Clear content of this draw page; clear window.
  107.             COLORREF PickColor(void);
  108.               Common dialog. Ask user to choose new pen color.
  109. C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C-C*/
  110. class CGuiDraw : public CVirWindow
  111. {
  112.   public:
  113.     // Constructor and Destructor override those in CVirWindow.
  114.     CGuiDraw(HINSTANCE hInst, HWND hWndApp, INT iPage);
  115.     ~CGuiDraw(void);
  116.  
  117.     // The public CGuiDraw methods that extend CVirWindow.
  118.     HRESULT  OpenWin(
  119.                IStorage* pIStorage_Page,
  120.                WCHAR* pwszPageTitle,
  121.                WCHAR* pwszDataName);
  122.     HRESULT  TopWin(void);
  123.     HRESULT  ResizeWin(WORD wWidth, WORD wHeight);
  124.     HRESULT  ClearWin(void);
  125.     HRESULT  PaintWin(void);
  126.     HRESULT  InkSaving(BOOL bInkSaving);
  127.     HRESULT  InkWidth(SHORT nInkWidth);
  128.     HRESULT  InkColor(COLORREF crInkColor);
  129.     HRESULT  InkStart(SHORT nX, SHORT nY);
  130.     HRESULT  InkDraw(SHORT nX, SHORT nY);
  131.     HRESULT  InkStop(SHORT nX, SHORT nY);
  132.     HRESULT  Renumber(INT iPage);
  133.     HRESULT  ReleasePage(void);
  134.     HRESULT  RestorePage(IStorage* pIStorage_Page);
  135.     HRESULT  Close(void);
  136.     HRESULT  Save(void);
  137.     INT      AskSave(void);
  138.     HRESULT  Delete(void);
  139.     HRESULT  Clear(void);
  140.     COLORREF PickColor(void);
  141.  
  142.   protected:
  143.     LRESULT  WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam);
  144.  
  145.   private:
  146.     // Private methods.
  147.     HRESULT  Load(void);
  148.     LRESULT  DoCommand(WPARAM wParam, LPARAM lParam);
  149.     IConnectionPoint* GetConnectionPoint(REFIID riid);
  150.     HRESULT  ConnectSink(void);
  151.     HRESULT  DisconnectSink(void);
  152.  
  153.     // Private data members.
  154.     HWND       m_hWndApp;        // Handle of the parent app window.
  155.     RECT       m_WinRect;        // GuiDraw Window position rectangle.
  156.     HDC        m_hDC;            // GuiDraw window drawing device context.
  157.     HPEN       m_hPen;           // Handle to the drawing pen.
  158.     SHORT      m_nInkWidth;      // Current ink pen drawing width.
  159.     COLORREF   m_crInkColor;     // Current ink pen drawing color.
  160.     BOOL       m_bInkSaving;     // TRUE=>inking is to be saved.
  161.     BOOL       m_bInking;        // TRUE=>inking sequence in progress.
  162.     BOOL       m_bPainting;      // TRUE=>painting in progress.
  163.     POINT      m_OldPos;         // Old Position.
  164.     IStorage*  m_pIStorage_Root; // IStorage on the client's root storage.
  165.     IStorage*  m_pIStorage_Page; // IStorage on the page's drawing storage.
  166.     IDrawPage* m_pIDrawPage;     // IDrawPage on the CODrawPage COM object.
  167.     CLSID      m_CidDrawPage;    // The Class ID for CODrawPage objects.
  168.     WCHAR      m_wszDataName[PAGE_NAME_SIZE]; // Page DataName.
  169.     INT        m_iPage;          // Page Number of this text page.
  170.     WORD       m_wWidth;         // Window width.
  171.     WORD       m_wHeight;        // Window height.
  172.     TEXTMETRIC m_tm;             // Text metric for display of text using DC.
  173.     CHOOSECOLOR m_ChooseColor;   // Choose color dialog structure.
  174.     COLORREF   m_acrCustColors[16]; // Custom color array for Choose Color.
  175.     IUnknown*  m_pCODrawPageSink; // Interface to DrawPageSink COM object.
  176.     DWORD      m_dwDrawPageSink;  // DrawPageSink connection key.
  177. };
  178.  
  179.  
  180. #endif // __cplusplus
  181.  
  182. #endif // GUIDRAW.H
  183.