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

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * DOCUMENT.CPP
  3.  * Patron Chapter 1
  4.  *
  5.  * Implementation of the CPatronDoc derivation of CDocument that
  6.  * manages pages for us.
  7.  *
  8.  * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
  9.  *
  10.  * Kraig Brockschmidt, Microsoft
  11.  * Internet  :  kraigb@microsoft.com
  12.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  13.  */
  14. #include "patron.h"
  15. #include <memory.h>
  16. #include <dlgs.h>       //Pring Dlg button IDs
  17. /*
  18.  * CPatronDoc::CPatronDoc
  19.  * CPatronDoc::~CPatronDoc
  20.  *
  21.  * Constructor Parameters:
  22.  *  hInst           HINSTANCE of the application.
  23.  *  pFR             PCFrame of the frame object.
  24.  *  pAdv            PCDocumentAdviseSink to notify on events.
  25.  */
  26. CPatronDoc::CPatronDoc(HINSTANCE hInst, PCFrame pFR
  27.     , PCDocumentAdviseSink pAdv)
  28.     : CDocument(hInst, pFR, pAdv)
  29.     {
  30.     m_pPG=NULL;
  31.     m_lVer=VERSIONCURRENT;
  32.     return;
  33.     }
  34. CPatronDoc::~CPatronDoc(void)
  35.     {
  36.     if (NULL!=m_pPG)
  37.         delete m_pPG;
  38.     return;
  39.     }
  40. /*
  41.  * CPatronDoc::Init
  42.  *
  43.  * Purpose:
  44.  *  Initializes an already created document window.  The client
  45.  *  actually creates the window for us, then passes that here for
  46.  *  further initialization.
  47.  *
  48.  * Parameters:
  49.  *  pDI             PDOCUMENTINIT containing initialization
  50.  *                  parameters.
  51.  *
  52.  * Return Value:
  53.  *  BOOL            TRUE if the function succeeded, FALSE otherwise.
  54.  */
  55. BOOL CPatronDoc::Init(PDOCUMENTINIT pDI)
  56.     {
  57.     //Change the stringtable range to our customization.
  58.     pDI->idsMin=IDS_DOCUMENTMIN;
  59.     pDI->idsMax=IDS_DOCUMENTMAX;
  60.     //Do default initialization
  61.     if (!CDocument::Init(pDI))
  62.         return FALSE;
  63.     //Pages are created when we get a Load later.
  64.     return TRUE;
  65.     }
  66. /*
  67.  * CPatronDoc::FMessageHook
  68.  *
  69.  * Purpose:
  70.  *  Processes WM_SIZE for the document so we can resize the Pages
  71.  *  window.
  72.  *
  73.  * Parameters:
  74.  *  <WndProc Parameters>
  75.  *  pLRes           LRESULT * in which to store the return
  76.  *                  value for the message.
  77.  *
  78.  * Return Value:
  79.  *  BOOL            TRUE to prevent further processing,
  80.  *                  FALSE otherwise.
  81.  */
  82. BOOL CPatronDoc::FMessageHook(HWND hWnd, UINT iMsg, WPARAM wParam
  83.     , LPARAM lParam, LRESULT *pLRes)
  84.     {
  85.     UINT        dx, dy;
  86.     RECT        rc;
  87.     *pLRes=0;
  88.     //Eat to prevent flickering
  89.     if (WM_ERASEBKGND==iMsg)
  90.         return TRUE;
  91.     if (WM_SIZE==iMsg && NULL!=m_pPG)
  92.         {
  93.         dx=LOWORD(lParam);
  94.         dy=HIWORD(lParam);
  95.         if (SIZE_MINIMIZED!=wParam)
  96.             {
  97.             //Resize Pages window to fit the new document size.
  98.             GetClientRect(hWnd, &rc);
  99.             m_pPG->RectSet(&rc, FALSE);
  100.             }
  101.         }
  102.     /*
  103.      * We return FALSE even on WM_SIZE so we can let the default
  104.      * procedure handle maximized MDI child windows appropriately.
  105.      */
  106.     return FALSE;
  107.     }
  108. /*
  109.  * CPatronDoc::Clear
  110.  *
  111.  * Purpose:
  112.  *  Sets all contents in the document back to defaults with no
  113.  *  filename.
  114.  *
  115.  * Paramters:
  116.  *  None
  117.  *
  118.  * Return Value:
  119.  *  None
  120.  */
  121. void CPatronDoc::Clear(void)
  122.     {
  123.     //Completely reset the pages
  124.     m_pPG->New();
  125.     CDocument::Clear();
  126.     m_lVer=VERSIONCURRENT;
  127.     return;
  128.     }
  129. /*
  130.  * CPatronDoc::Load
  131.  *
  132.  * Purpose:
  133.  *  Loads a given document without any user interface overwriting
  134.  *  the previous contents of the editor.
  135.  *
  136.  * Parameters:
  137.  *  fChangeFile     BOOL indicating if we're to update the window
  138.  *                  title and the filename from using this file.
  139.  *  pszFile         LPTSTR to the filename to load.  Could be NULL
  140.  *                  for an untitled document.
  141.  *
  142.  * Return Value:
  143.  *  UINT            An error value from DOCERR_*
  144.  */
  145. UINT CPatronDoc::Load(BOOL fChangeFile, LPTSTR pszFile)
  146.     {
  147.     RECT        rc;
  148.     //We don't support opening anything yet.
  149.     if (NULL!=pszFile)
  150.         return DOCERR_NONE;
  151.     //Attempt to create our contained Pages window.
  152.     m_pPG=new CPages(m_hInst);
  153.     GetClientRect(m_hWnd, &rc);
  154.     if (!m_pPG->Init(m_hWnd, &rc, WS_CHILD | WS_VISIBLE
  155.         , ID_PAGES, NULL))
  156.         return DOCERR_NOFILE;
  157.     //Go initialize the Pages for the default printer.
  158.     if (!PrinterSetup(NULL, TRUE))
  159.         return DOCERR_COULDNOTOPEN;
  160.     Rename(NULL);
  161.     //Go create an initial page.
  162.     m_pPG->PageInsert(0);
  163.     FDirtySet(FALSE);
  164.     return DOCERR_NONE;
  165.     }
  166. /*
  167.  * CPatronDoc::NewPage
  168.  *
  169.  * Purpose:
  170.  *  Creates a new page in the document's pages control after the
  171.  *  current page.
  172.  *
  173.  * Parameters:
  174.  *  None
  175.  *
  176.  * Return Value:
  177.  *  UINT            Index of the new page.
  178.  */
  179. UINT CPatronDoc::NewPage(void)
  180.     {
  181.     FDirtySet(TRUE);
  182.     return m_pPG->PageInsert(0);
  183.     }
  184. /*
  185.  * CPatronDoc::DeletePage
  186.  *
  187.  * Purpose:
  188.  *  Deletes the current page from the document.
  189.  *
  190.  * Parameters:
  191.  *  None
  192.  *
  193.  * Return Value:
  194.  *  UINT            Index of the now current page.
  195.  */
  196. UINT CPatronDoc::DeletePage(void)
  197.     {
  198.     FDirtySet(TRUE);
  199.     return m_pPG->PageDelete(0);
  200.     }
  201. /*
  202.  * CPatronDoc::NextPage
  203.  *
  204.  * Purpose:
  205.  *  Shows the next page in the pages window.
  206.  *
  207.  * Parameters:
  208.  *  None
  209.  *
  210.  * Return Value:
  211.  *  UINT            Index of the new page.
  212.  */
  213. UINT CPatronDoc::NextPage(void)
  214.     {
  215.     UINT        iPage;
  216.     iPage=m_pPG->CurPageGet();
  217.     return m_pPG->CurPageSet(++iPage);
  218.     }
  219. /*
  220.  * CPatronDoc::PreviousPage
  221.  *
  222.  * Purpose:
  223.  *  Shows the previous page in the pages window.
  224.  *
  225.  * Parameters:
  226.  *  None
  227.  *
  228.  * Return Value:
  229.  *  UINT            Index of the new page.
  230.  */
  231. UINT CPatronDoc::PreviousPage(void)
  232.     {
  233.     UINT        iPage;
  234.     //If iPage is zero, then we wrap around to the end.
  235.     iPage=m_pPG->CurPageGet();
  236.     return m_pPG->CurPageSet(--iPage);
  237.     }
  238. /*
  239.  * CPatronDoc::FirstPage
  240.  *
  241.  * Purpose:
  242.  *  Shows the first page page in the pages window.
  243.  *
  244.  * Parameters:
  245.  *  None
  246.  *
  247.  * Return Value:
  248.  *  UINT            Index of the new page.
  249.  */
  250. UINT CPatronDoc::FirstPage(void)
  251.     {
  252.     return m_pPG->CurPageSet(0);
  253.     }
  254. /*
  255.  * CPatronDoc::LastPage
  256.  *
  257.  * Purpose:
  258.  *  Shows the last page in the pages window.
  259.  *
  260.  * Parameters:
  261.  *  None
  262.  *
  263.  * Return Value:
  264.  *  UINT            Index of the last page.
  265.  */
  266. UINT CPatronDoc::LastPage(void)
  267.     {
  268.     return m_pPG->CurPageSet(NOVALUE);
  269.     }