GUIDRAW.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:8k
源码类别:

Windows编程

开发平台:

Visual C++

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