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

Windows编程

开发平台:

Visual C++

  1. //THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF 
  2. //ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
  3. //THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A 
  4. // PARTICULAR PURPOSE.
  5. //
  6. // Copyright  1994-1996  Microsoft Corporation.  All Rights Reserved.
  7. //
  8. // PROGRAM: FVTEXT.H
  9. //
  10. // PURPOSE:   Classes that implement the CFileViewer object for integration
  11. // with the Windows 95 Explorer.  Necessary modifications for a
  12. // custom viewer marked with MODIFY 
  13. //
  14. // PLATFORMS: Windows 95
  15. //
  16. // SPECIAL INSTRUCTIONS: 
  17. //
  18. //DO NOT USE THESE GUIDS:  These are for this sample ONLY
  19. //File CLSID for the text compound file example:  this is nothing official.
  20. //Forward class references
  21. DEFINE_GUID(CLSID_SampleTextFile, 0x00021116, 0, 0, 0xC0,0,0,0,0,0,0,0x46);
  22. //MODIFY:  Define your custom FileViewer CLSID(s) here.
  23. DEFINE_GUID(CLSID_FileViewerText, 0x00021117, 0, 0, 0xC0,0,0,0,0,0,0,0x46);
  24. #ifndef _FVTEXT_H_
  25. #define _FVTEXT_H_
  26. class CImpIPersistFile;
  27. typedef class CImpIPersistFile *PIMPIPERSISTFILE;
  28. class CImpIFileViewer;
  29. typedef class CImpIFileViewer *PIMPIFILEVIEWER;
  30. //FVPROC.CPP
  31. //MODIFY:  Window procedures for frame and viewport windows
  32. long WINAPI FileViewerFrameProc(HWND, UINT, WPARAM, LPARAM);
  33. //Extra bytes for frame
  34. #define CBWNDEXTRAFRAME             sizeof(LPVOID)
  35. #define FVWL_OBJECTPOINTER          0
  36. /*
  37.  * MODIFY:  Change viewport window procedure and defintions
  38.  * to be specific to the file viewer in use.
  39.  */
  40. long WINAPI ViewportWndProc(HWND, UINT, WPARAM, LPARAM);
  41. //Extra bytes for viewport
  42. #define CBWNDEXTRAVIEWPORT          sizeof(LPVOID)
  43. #define VPWL_OBJECTPOINTER          0
  44. BOOL APIENTRY AboutProc(HWND, UINT, WPARAM, LPARAM);
  45. //Child window IDs
  46. #define ID_TOOLBAR                  50
  47. #define ID_STATUSBAR                51
  48. #define ID_VIEWPORT                 52
  49. //Options for CFileViewer::FontChange.
  50. typedef enum
  51.     {
  52.     VIEWFONT_SELECT=0,
  53.     VIEWFONT_INCREASESIZE,
  54.     VIEWFONT_DECREASESIZE
  55.     } VIEWFONTOPTION;
  56. /*
  57.  * Limits to font sizes for the Font dialog.  The increase and
  58.  * decrease buttons change the point size by different amounts
  59.  * (FONTSIZEDELTA*) depending on the size of the current font
  60.  * (where it falls in the FONTSIZETHRESHOLD*).  Note that these
  61.  * values have to be multiplied by logical_pixels_per_inch/72
  62.  * on the display to be accurate.  See CFileViewer::FontChange.
  63.  *
  64.  * Of course, there are better ways to do this that are font
  65.  * specific.  This way works well for stock fonts (Arial, Courier
  66.  * New, Times New Roman).
  67.  */
  68. #define FONTSIZETHRESHOLDMIN    4
  69. #define FONTSIZETHRESHOLDLOW    32
  70. #define FONTSIZETHRESHOLDMID    48
  71. #define FONTSIZETHRESHOLDMAX    120
  72. #define FONTSIZEDELTASMALL      2       //4 to 32pt
  73. #define FONTSIZEDELTAMEDIUM     8       //32 to 48pt
  74. #define FONTSIZEDELTALARGE      24      //48 to 120pt
  75. //FVTEXT.CPP, FVINIT.CPP
  76. /*
  77.  * MODIFY:  Change this CFileViewer object to be more specific to
  78.  * your implementations.  Specific parts are listed below.
  79.  *
  80.  * The CFileViewer object is implemented in its own class with its own
  81.  * IUnknown to support aggregation.  It contains two interface
  82.  * implementation objects (CImpIPersistFile and CImpIFileViewer)
  83.  * to implement the externally exposed interfaces.
  84.  */
  85. class CFileViewer : public IUnknown
  86.     {
  87.     //Make any contained interfaces your friends
  88.     friend class CImpIPersistFile;
  89.     friend class CImpIFileViewer;
  90.     friend long WINAPI FileViewerFrameProc(HWND, UINT, WPARAM, LPARAM);
  91.     friend long WINAPI ViewportWndProc(HWND, UINT, WPARAM, LPARAM);
  92.     protected:
  93.         //NOTE:  These members usually need no modification
  94.         ULONG               m_cRef;             //Object reference count
  95.         LPUNKNOWN           m_pUnkOuter;        //Controlling unknown
  96.         HINSTANCE           m_hInst;            //Module instance
  97.         PFNDESTROYED        m_pfnDestroy;       //To call on closure
  98.         LPFILEVIEWERSITE m_lpfsi;       // file viewer site
  99.         CLSID               m_clsID;            //CLSID of this FileViewer
  100.         LPSTR               m_pszPath;          //Path from IPersitFile::Load
  101.         DWORD               m_grfMode;          //Open mode for the file
  102.         BOOL                m_fLoadCalled;      //Load called already?
  103.         BOOL                m_fShowInit;        //ShowInitialize called?
  104.         BOOL                m_fClassReg;        //RegisterClass work?
  105.         BOOL                m_fPostQuitMsg;     // Should destroy post quit
  106.         HWND                m_hWnd;             //Main window
  107.         HWND                m_hWndOld;          // Old Main window.
  108.         HWND                m_hWndToolbar;      //Child windows
  109.         HWND                m_hWndStatus;
  110.         HWND                m_hWndViewport;
  111.         HACCEL              m_hAccel;
  112.         UINT                m_cyTools;          //Child window heights
  113.         UINT                m_cyStatus;
  114.         BOOL                m_fToolsVisible;    //Visible child windows.
  115.         BOOL                m_fStatusVisible;
  116.         PCStringTable       m_pST;              //Stringtable object
  117.         PCStatusHelper      m_pSH;              //For WM_MENUSELECT
  118.         //Interface implementations
  119.         PIMPIPERSISTFILE    m_pIPersistFile;
  120.         PIMPIFILEVIEWER     m_pIFileViewer;
  121.         LPFVSHOWINFO        m_pvsi;
  122.         /*
  123.          * MODIFY:  Change these to your own FileViewer specifics.
  124.          * The variables here are specific to text viewing.
  125.          */
  126.         HGLOBAL             m_hMemText;         //Loaded text.
  127.         HFONT               m_hFont;            //Current viewport font
  128.         int                 m_cyPPI;            //logical pix/inch
  129.         int                 m_xPos;             //Scroll positions
  130.         int                 m_yPos;
  131.     protected:
  132.         BOOL                FInitFrameControls(void);
  133.         HRESULT             FileLoad(void);
  134.         void                OnCommand(WORD, WORD, HWND);
  135.         void                ChildrenResize(void);
  136.         void                ViewportResize(void);
  137.         BOOL                FOpenAs(void);
  138.         LPSTR               PszToolTip(UINT);
  139.         //MODIFY:  These may be irrelevant for a custom viewer
  140.         void                ViewportScrollSet(void);
  141.         void                FontChange(VIEWFONTOPTION);
  142.         void                ReplaceWindowModeChange(void);
  143.         BOOL                DropFiles(HDROP);
  144.     public:
  145.         CFileViewer(LPUNKNOWN, HINSTANCE, PFNDESTROYED);
  146.         ~CFileViewer(void);
  147.         HRESULT             Init(void);        //Called from IClassFactory::CreateInstance
  148.         LPSTR               String(UINT);      //inline--see FVTEXT.CPP
  149.         LPVOID              MemAlloc(ULONG);   //IMalloc helpers
  150.         void                MemFree(LPVOID);
  151.         //IFileViewer implementataions (called from CImpIFileViewer)
  152.         STDMETHODIMP        FileShowInit(LPFILEVIEWERSITE lpfsi);
  153.         STDMETHODIMP        FileShow(LPFVSHOWINFO pvsi);
  154.         STDMETHODIMP        PrintTo(LPSTR, BOOL);
  155.         //Non-delegating object IUnknown interface
  156.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  157.         STDMETHODIMP_(ULONG) AddRef(void);
  158.         STDMETHODIMP_(ULONG) Release(void);
  159.     };
  160. typedef CFileViewer * PCFileViewer;
  161. /*
  162.  * Interface implementations for the CFileViewer object.
  163.  */
  164. //IPERFILE.CPP
  165. class CImpIPersistFile : public IPersistFile
  166.     {
  167.     private:
  168.         PCFileViewer    m_pObj;         //Back pointer to object
  169.         LPUNKNOWN       m_pUnkOuter;    //Controlling unknown
  170.     public:
  171.         CImpIPersistFile(PCFileViewer, LPUNKNOWN);
  172.         ~CImpIPersistFile(void);
  173.         //IUnknown members that delegate to m_pUnkOuter.
  174.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  175.         STDMETHODIMP_(ULONG) AddRef(void);
  176.         STDMETHODIMP_(ULONG) Release(void);
  177.         //IPersist members
  178.         STDMETHODIMP GetClassID(LPCLSID);
  179.         //IPersistFile members
  180.         STDMETHODIMP IsDirty(void);
  181.         STDMETHODIMP Load(LPCOLESTR, DWORD);
  182.         STDMETHODIMP Save(LPCOLESTR, BOOL);
  183.         STDMETHODIMP SaveCompleted(LPCOLESTR);
  184.         STDMETHODIMP GetCurFile(LPOLESTR *);
  185.     };
  186. //IFILEVW.CPP
  187. class CImpIFileViewer : public IFileViewer
  188.     {
  189.     private:
  190.         PCFileViewer    m_pObj;         //Back pointer to object
  191.         LPUNKNOWN       m_pUnkOuter;    //Controlling unknown
  192.     public:
  193.         CImpIFileViewer(PCFileViewer, LPUNKNOWN);
  194.         ~CImpIFileViewer(void);
  195.         //IUnknown members that delegate to m_pUnkOuter.
  196.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  197.         STDMETHODIMP_(ULONG) AddRef(void);
  198.         STDMETHODIMP_(ULONG) Release(void);
  199.         //IFileViewer members
  200.         STDMETHODIMP PrintTo(LPSTR, BOOL);
  201.         STDMETHODIMP ShowInitialize(LPFILEVIEWERSITE lpfsi);
  202.         STDMETHODIMP Show(LPFVSHOWINFO pvsi);
  203.     };
  204. #endif //_FVTEXT_H_