home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c480 / 18.ddi / MFC / SAMPLES / SUPERPAD / PADVIEW.CP_ / PADVIEW.CP
Encoding:
Text File  |  1993-02-08  |  14.9 KB  |  550 lines

  1. // padview.cpp : implementation of the CPadView class
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and Microsoft
  9. // QuickHelp and/or WinHelp documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12.  
  13.  
  14.  
  15. #include "stdafx.h"
  16. #include "superpad.h"
  17. #include "padview.h"
  18. #include "tabstop.h"
  19.  
  20. #ifdef _DEBUG
  21. #undef THIS_FILE
  22. static char BASED_CODE THIS_FILE[] = __FILE__;
  23. #endif
  24.  
  25. /////////////////////////////////////////////////////////////////////////////
  26. // CPadView
  27.  
  28. IMPLEMENT_DYNCREATE(CPadView, CEditView)
  29.  
  30. BEGIN_MESSAGE_MAP(CPadView, CEditView)
  31.     //{{AFX_MSG_MAP(CPadView)
  32.     ON_WM_CREATE()
  33.     ON_COMMAND(ID_SET_TABSTOPS, OnSetTabStops)
  34.     ON_COMMAND(ID_CHOOSE_FONT, OnChooseFont)
  35.     ON_COMMAND(ID_WORD_WRAP, OnWordWrap)
  36.     ON_UPDATE_COMMAND_UI(ID_WORD_WRAP, OnUpdateWordWrap)
  37.     ON_WM_RBUTTONDOWN()
  38.     ON_COMMAND(ID_CHOOSE_PRINT_FONT, OnChoosePrintFont)
  39.     ON_COMMAND(ID_MIRROR_DISPLAY_FONT, OnMirrorDisplayFont)
  40.     ON_UPDATE_COMMAND_UI(ID_MIRROR_DISPLAY_FONT, OnUpdateMirrorDisplayFont)
  41.     ON_UPDATE_COMMAND_UI(ID_CHOOSE_PRINT_FONT, OnUpdateChoosePrintFont)
  42.     ON_WM_SIZE()
  43.     //}}AFX_MSG_MAP
  44.     ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
  45. END_MESSAGE_MAP()
  46.  
  47. UINT CPadView::m_nDefTabStops;
  48. UINT CPadView::m_nDefTabStopsOld;
  49. BOOL CPadView::m_bDefWordWrap;
  50. BOOL CPadView::m_bDefWordWrapOld;
  51. LOGFONT CPadView::m_lfDefFont;
  52. LOGFONT CPadView::m_lfDefFontOld;
  53. LOGFONT CPadView::m_lfDefPrintFont;
  54. LOGFONT CPadView::m_lfDefPrintFontOld;
  55.  
  56. /////////////////////////////////////////////////////////////////////////////
  57. // Static initialization/termination
  58.  
  59. static char BASED_CODE szSettings[] = "Settings";
  60. static char BASED_CODE szTabStops[] = "TabStops";
  61. static char BASED_CODE szFont[] = "Font";
  62. static char BASED_CODE szPrintFont[] = "PrintFont";
  63. static char BASED_CODE szHeight[] = "Height";
  64. static char BASED_CODE szWeight[] = "Weight";
  65. static char BASED_CODE szItalic[] = "Italic";
  66. static char BASED_CODE szUnderline[] = "Underline";
  67. static char BASED_CODE szPitchAndFamily[] = "PitchAndFamily";
  68. static char BASED_CODE szFaceName[] = "FaceName";
  69. static char BASED_CODE szSystem[] = "System";
  70. static char BASED_CODE szWordWrap[] = "WordWrap";
  71.  
  72. static void GetProfileFont(LPCSTR szSec, LOGFONT* plf)
  73. {
  74.     CWinApp* pApp = AfxGetApp();
  75.     plf->lfHeight = pApp->GetProfileInt(szSec, szHeight, 0);
  76.     if (plf->lfHeight != 0)
  77.     {
  78.         plf->lfWeight = pApp->GetProfileInt(szSec, szWeight, 0);
  79.         plf->lfItalic = (BYTE)pApp->GetProfileInt(szSec, szItalic, 0);
  80.         plf->lfUnderline = (BYTE)pApp->GetProfileInt(szSec, szUnderline, 0);
  81.         plf->lfPitchAndFamily = (BYTE)pApp->GetProfileInt(szSec, szPitchAndFamily, 0);
  82.         CString strFont = pApp->GetProfileString(szSec, szFaceName, szSystem);
  83.         strncpy((char*)plf->lfFaceName, strFont, sizeof plf->lfFaceName);
  84.         plf->lfFaceName[sizeof plf->lfFaceName-1] = 0;
  85.     }
  86. }
  87.  
  88. static void WriteProfileFont(LPCSTR szSec, const LOGFONT* plf, LOGFONT* plfOld)
  89. {
  90.     CWinApp* pApp = AfxGetApp();
  91.  
  92.     if (plf->lfHeight != plfOld->lfHeight)
  93.         pApp->WriteProfileInt(szSec, szHeight, plf->lfHeight);
  94.     if (plf->lfHeight != 0)
  95.     {
  96.         if (plf->lfHeight != plfOld->lfHeight)
  97.             pApp->WriteProfileInt(szSec, szHeight, plf->lfHeight);
  98.         if (plf->lfWeight != plfOld->lfWeight)
  99.             pApp->WriteProfileInt(szSec, szWeight, plf->lfWeight);
  100.         if (plf->lfItalic != plfOld->lfItalic)
  101.             pApp->WriteProfileInt(szSec, szItalic, plf->lfItalic);
  102.         if (plf->lfUnderline != plfOld->lfUnderline)
  103.             pApp->WriteProfileInt(szSec, szUnderline, plf->lfUnderline);
  104.         if (plf->lfPitchAndFamily != plfOld->lfPitchAndFamily)
  105.             pApp->WriteProfileInt(szSec, szPitchAndFamily, plf->lfPitchAndFamily);
  106.         if (strcmp(plf->lfFaceName, plfOld->lfFaceName) != 0)
  107.             pApp->WriteProfileString(szSec, szFaceName, (LPCSTR)plf->lfFaceName);
  108.     }
  109.     *plfOld = *plf;
  110. }
  111.  
  112. void CPadView::Initialize()
  113. {
  114.     CWinApp* pApp = AfxGetApp();
  115.     m_bDefWordWrap = pApp->GetProfileInt(szSettings, szWordWrap, 0);
  116.     m_bDefWordWrapOld = m_bDefWordWrap;
  117.     m_nDefTabStops = pApp->GetProfileInt(szSettings, szTabStops, 8*4);
  118.     m_nDefTabStopsOld = m_nDefTabStops;
  119.     GetProfileFont(szFont, &m_lfDefFont);
  120.     m_lfDefFontOld = m_lfDefFont;
  121.     GetProfileFont(szPrintFont, &m_lfDefPrintFont);
  122.     m_lfDefPrintFontOld = m_lfDefPrintFont;
  123. }
  124.  
  125. void CPadView::Terminate()
  126. {
  127.     CWinApp* pApp = AfxGetApp();
  128.     if (m_nDefTabStops != m_nDefTabStopsOld)
  129.         pApp->WriteProfileInt(szSettings, szTabStops, m_nDefTabStops);
  130.     if (m_bDefWordWrap != m_bDefWordWrapOld)
  131.         pApp->WriteProfileInt(szSettings, szWordWrap, m_bDefWordWrap);
  132.     WriteProfileFont(szFont, &m_lfDefFont, &m_lfDefFontOld);
  133.     WriteProfileFont(szPrintFont, &m_lfDefPrintFont, &m_lfDefPrintFontOld);
  134. }
  135.  
  136. /////////////////////////////////////////////////////////////////////////////
  137. // CPadView construction/destruction
  138.  
  139. CPadView::CPadView()
  140. {
  141.     m_nTabStops = m_nDefTabStops;
  142.     m_bRecreating = FALSE;
  143. }
  144.  
  145. BOOL CPadView::PreCreateWindow(CREATESTRUCT& cs)
  146. {
  147.     if (!CEditView::PreCreateWindow(cs))
  148.         return FALSE;
  149.  
  150.     if (m_bDefWordWrap)
  151.         cs.style &= ~(WS_HSCROLL|ES_AUTOHSCROLL);
  152.  
  153.     return TRUE;
  154. }
  155.  
  156. int CPadView::OnCreate(LPCREATESTRUCT lpcs)
  157. {
  158.     if (CEditView::OnCreate(lpcs) != 0)
  159.         return -1;
  160.     if (m_lfDefFont.lfHeight != 0)
  161.     {
  162.         m_font.CreateFontIndirect(&m_lfDefFont);
  163.         SetFont(&m_font);
  164.     }
  165.     if (m_lfDefPrintFont.lfHeight != 0)
  166.     {
  167.         m_fontPrint.CreateFontIndirect(&m_lfDefPrintFont);
  168.         SetPrinterFont(&m_fontPrint);
  169.     }
  170.     return 0;
  171. }
  172.  
  173. void CPadView::PostNcDestroy()
  174. {
  175.     if (m_bRecreating)
  176.     {
  177.         m_bRecreating = FALSE;
  178.         return;
  179.     }
  180.     CEditView::PostNcDestroy();
  181. }
  182.  
  183. /////////////////////////////////////////////////////////////////////////////
  184. // CPadView Word Wrap support
  185.  
  186. BOOL CPadView::IsWordWrap() const
  187. {
  188.     return (GetStyle() & ES_AUTOHSCROLL) == 0;
  189. }
  190.  
  191. BOOL CPadView::SetWordWrap(BOOL bWordWrap)
  192. {
  193.     bWordWrap = !!bWordWrap;    // make sure ==TRUE || ==FALSE
  194.     if (IsWordWrap() == bWordWrap)
  195.         return FALSE;
  196.  
  197.     // preserve original control's state.
  198.     CFont* pFont = GetFont();
  199.     int nLen = GetBufferLength();
  200.     char FAR* pSaveText = new far char[GetBufferLength()+1];
  201.     GetWindowText(pSaveText, nLen+1);
  202.  
  203.     // create new edit control with appropriate style and size.
  204.     DWORD dwStyle = dwStyleDefault & ~(ES_AUTOHSCROLL|WS_HSCROLL|WS_VISIBLE);
  205.     if (!bWordWrap)
  206.         dwStyle |= ES_AUTOHSCROLL|WS_HSCROLL;
  207.  
  208.     CWnd* pParent = GetParent();
  209.     CRect rect;
  210.     GetWindowRect(rect);
  211.     pParent->ScreenToClient(rect);
  212.     CWnd* pFocus = GetFocus();
  213.  
  214.     UINT nID = GetDlgCtrlID();
  215.     CFrameWnd* pFrame = GetParentFrame();
  216.     ASSERT(pFrame != NULL);
  217.     CView* pActiveView = pFrame->GetActiveView();
  218.  
  219.     HWND hWnd = ::CreateWindow("edit", NULL, dwStyle,
  220.         rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top,
  221.         pParent->m_hWnd, (HMENU)nID,
  222.         (HINSTANCE)m_segText, NULL);
  223.  
  224.     if (hWnd == NULL)
  225.     {
  226.         delete[] pSaveText;
  227.         return FALSE;
  228.     }
  229.  
  230.     // set the window text to nothing to make sure following set doesn't fail
  231.     SetWindowText(NULL);
  232.  
  233.     // restore visual state
  234.     ::SetWindowText(hWnd, pSaveText);
  235.     delete[] pSaveText;
  236.     if (pFont != NULL)
  237.     {
  238.         ASSERT(pFont->m_hObject != NULL);
  239.         ::SendMessage(hWnd, WM_SETFONT, (WPARAM)pFont->m_hObject, 0);
  240.     }
  241.     UINT nTabStops = m_nTabStops;
  242.     ::SendMessage(hWnd, EM_SETTABSTOPS, 1, (LPARAM)(LPINT)&nTabStops);
  243.     ::GetClientRect(hWnd, &rect);
  244.     ::SetWindowPos(hWnd, NULL, 0, 0, 0, 0,
  245.         SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_NOZORDER|SWP_SHOWWINDOW);
  246.     ::SetWindowPos(hWnd, NULL, 0, 0, 0, 0,
  247.         SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_NOZORDER|SWP_DRAWFRAME);
  248.     ::UpdateWindow(hWnd);
  249.  
  250.     // destroy old and attach new.
  251.     ASSERT(m_hWnd != NULL);
  252.     ASSERT(!m_bRecreating);
  253.     SetWindowPos(NULL, 0, 0, 0, 0,
  254.         SWP_HIDEWINDOW|SWP_NOREDRAW|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|
  255.         SWP_NOZORDER);
  256.     m_bRecreating = TRUE;
  257.     DestroyWindow();
  258.     ASSERT(!m_bRecreating); // should be reset in PostNcDestroy()
  259.     ASSERT(m_hWnd == NULL);
  260.     SubclassWindow(hWnd);
  261.     ASSERT(m_hWnd == hWnd);
  262.  
  263.     // restore rest of state...
  264.     GetEditCtrl().LimitText(nMaxSize);
  265.     if (pFocus == this)
  266.         SetFocus();
  267.     if (pActiveView == this)
  268.         pFrame->SetActiveView(this);
  269.  
  270.     ASSERT_VALID(this);
  271.     return TRUE;
  272. }
  273.  
  274. /////////////////////////////////////////////////////////////////////////////
  275. // CPadView Printing support
  276.  
  277. void CPadView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
  278. {
  279.     CEditView::OnBeginPrinting(pDC, pInfo);
  280.     if (!pInfo->m_bPreview)
  281.         return;
  282.  
  283.     CWaitCursor wait;
  284.  
  285.     const char* pszFileName = GetDocument()->GetPathName();
  286.     BOOL bForceSysTime = strchr(pszFileName, '.') == NULL;
  287.     CTime timeSys = CTime::GetCurrentTime();
  288.     CFileStatus status;
  289.     CFile::GetStatus(pszFileName, status);
  290.  
  291.     if (dlgPageSetup.m_iHeaderTime != 0 || bForceSysTime)
  292.         m_timeHeader = timeSys;
  293.     else
  294.         m_timeHeader = status.m_mtime;
  295.  
  296.     if (dlgPageSetup.m_iFooterTime != 0 || bForceSysTime)
  297.         m_timeFooter = timeSys;
  298.     else
  299.         m_timeFooter = status.m_mtime;
  300.  
  301.     pInfo->m_nCurPage = 0xFFFF;
  302.     OnPrepareDC(pDC, pInfo);
  303.  
  304.     UINT nIndex = LOWORD(GetEditCtrl().GetSel());
  305.     UINT nCurPage = 1;
  306.     while (nCurPage < (UINT)m_aPageStart.GetSize())
  307.     {
  308.         if (nIndex < m_aPageStart[nCurPage])
  309.             break;
  310.         nCurPage++;
  311.     }
  312.     pInfo->m_nCurPage = nCurPage;
  313.     pInfo->SetMaxPage(m_aPageStart.GetSize());
  314.     m_nPreviewPage = nCurPage;
  315. }
  316.  
  317. void
  318. CPadView::OnPrint(CDC *pDC, CPrintInfo* pInfo)
  319. {
  320.     // get string to show as "filename" in header/footer
  321.     const char* pszFileName = GetDocument()->GetPathName();
  322.     if (pszFileName[0] == 0)
  323.         pszFileName = GetDocument()->GetTitle();
  324.  
  325.     // go thru global CPageSetupDlg to format the header and footer
  326.     CString strHeader;
  327.     dlgPageSetup.FormatHeader(strHeader, m_timeHeader, pszFileName,
  328.         pInfo->m_nCurPage);
  329.     CString strFooter;
  330.     dlgPageSetup.FormatFooter(strFooter, m_timeFooter, pszFileName,
  331.         pInfo->m_nCurPage);
  332.  
  333.     TEXTMETRIC tm;
  334.     pDC->GetTextMetrics(&tm);
  335.     int cyChar = tm.tmHeight;
  336.     CRect rectPage = pInfo->m_rectDraw;
  337.  
  338.     // draw and exclude space for header
  339.     if (!strHeader.IsEmpty())
  340.     {
  341.         pDC->TextOut(rectPage.left, rectPage.top, strHeader);
  342.         rectPage.top += cyChar + cyChar / 4;
  343.         pDC->MoveTo(rectPage.left, rectPage.top);
  344.         pDC->LineTo(rectPage.right, rectPage.top);
  345.         rectPage.top += cyChar / 4;
  346.     }
  347.  
  348.     // allow space for footer
  349.     pInfo->m_rectDraw = rectPage;
  350.     if (!strFooter.IsEmpty())
  351.         pInfo->m_rectDraw.bottom -= cyChar + cyChar/4 + cyChar/4;
  352.  
  353.     // draw body text
  354.     CEditView::OnPrint(pDC, pInfo);
  355.  
  356.     // draw footer
  357.     if (!strFooter.IsEmpty())
  358.     {
  359.         rectPage.bottom -= cyChar;
  360.         pDC->TextOut(rectPage.left, rectPage.bottom, strFooter);
  361.         rectPage.bottom -= cyChar / 4;
  362.         pDC->MoveTo(rectPage.left, rectPage.bottom);
  363.         pDC->LineTo(rectPage.right, rectPage.bottom);
  364.         rectPage.bottom -= cyChar / 4;
  365.     }
  366. }
  367.  
  368. void
  369. CPadView::OnScrollTo(CDC*, CPrintInfo* pInfo, POINT)
  370. {
  371.     UINT nPage = pInfo->m_nCurPage;
  372.     ASSERT(nPage < (UINT)m_aPageStart.GetSize());
  373.     if (nPage != m_nPreviewPage)
  374.     {
  375.         UINT nIndex = m_aPageStart[nPage];
  376.         GetEditCtrl().SetSel((int)nIndex, (int)nIndex);
  377.     }
  378. }
  379.  
  380. /////////////////////////////////////////////////////////////////////////////
  381. // CPadView Font Handling
  382.  
  383. void CPadView::OnChooseFont()
  384. {
  385.    // get current font description
  386.    CFont* pFont = GetFont();
  387.    LOGFONT lf;
  388.    if (pFont != NULL)
  389.        pFont->GetObject(sizeof(LOGFONT), &lf);
  390.    else
  391.        ::GetObject(GetStockObject(SYSTEM_FONT), sizeof(LOGFONT), &lf);
  392.  
  393.     CFontDialog dlg(&lf, CF_SCREENFONTS|CF_INITTOLOGFONTSTRUCT);
  394.     if (dlg.DoModal() == IDOK)
  395.     {
  396.         // switch to new font.
  397.         m_font.DeleteObject();
  398.         if (m_font.CreateFontIndirect(&lf))
  399.         {
  400.             CWaitCursor wait;
  401.             SetFont(&m_font);
  402.             m_lfDefFont = lf;
  403.         }
  404.     }
  405. }
  406.  
  407. static void ScaleLogFont(LPLOGFONT plf, const CDC& dcFrom, const CDC& dcTo)
  408.     // helper to scale log font member from one DC to another!
  409. {
  410.     plf->lfHeight = MulDiv(plf->lfHeight,
  411.         dcTo.GetDeviceCaps(LOGPIXELSY), dcFrom.GetDeviceCaps(LOGPIXELSY));
  412.     plf->lfWidth = MulDiv(plf->lfWidth,
  413.         dcTo.GetDeviceCaps(LOGPIXELSX), dcFrom.GetDeviceCaps(LOGPIXELSX));
  414. }
  415.  
  416. void CPadView::OnChoosePrintFont()
  417. {
  418.     CWaitCursor wait;
  419.     CFont* pFont = GetPrinterFont();
  420.     LOGFONT lf;
  421.     LPLOGFONT plf = NULL;
  422.     if (pFont != NULL)
  423.     {
  424.         pFont->GetObject(sizeof(LOGFONT), &lf);
  425.         plf = &lf;
  426.     }
  427.  
  428.     // magic to get printer dialog that would be used if we were printing!
  429.     CPrintDialog dlgPrint(FALSE);
  430.     if (!AfxGetApp()->GetPrinterDeviceDefaults(&dlgPrint.m_pd))
  431.     {
  432.         AfxMessageBox(IDP_ERR_GET_DEVICE_DEFAULTS);
  433.         return;
  434.     }
  435.     wait.Restore();
  436.     HDC hdcPrint = dlgPrint.CreatePrinterDC();
  437.     if (hdcPrint == NULL)
  438.     {
  439.         AfxMessageBox(IDP_ERR_GET_PRINTER_DC);
  440.         return;
  441.     }
  442.  
  443.     CDC dcScreen;
  444.     dcScreen.Attach(::GetDC(NULL));
  445.     CDC dcPrint;
  446.     dcPrint.Attach(hdcPrint);
  447.  
  448.     if (plf != NULL)
  449.     {
  450.         // need to map initial logfont to screen metrics.
  451.         ::ScaleLogFont(plf, dcPrint, dcScreen);
  452.     }
  453.  
  454.     // now bring up the dialog since we know the printer DC
  455.     CFontDialog dlg(plf, CF_PRINTERFONTS, &dcPrint);
  456.     if (dlg.DoModal() == IDOK)
  457.     {
  458.         // map the resulting logfont back to printer metrics.
  459.         lf = dlg.m_lf;
  460.         ::ScaleLogFont(&lf, dcScreen, dcPrint);
  461.  
  462.         m_fontPrint.DeleteObject();
  463.         if (m_fontPrint.CreateFontIndirect(&lf))
  464.         {
  465.             SetPrinterFont(&m_fontPrint);
  466.             m_lfDefPrintFont = lf;
  467.         }
  468.     }
  469.     //NOTE: destructor will call dcPrint.DeleteDC
  470.  
  471.     ::ReleaseDC(NULL, dcScreen.Detach());
  472. }
  473.  
  474. void CPadView::OnMirrorDisplayFont()
  475. {
  476.     SetPrinterFont(NULL);
  477.     m_lfDefPrintFont.lfHeight = 0;
  478. }
  479.  
  480. void CPadView::OnUpdateChoosePrintFont(CCmdUI* pCmdUI)
  481. {
  482.     pCmdUI->SetCheck(GetPrinterFont() != NULL);
  483. }
  484.  
  485. void CPadView::OnUpdateMirrorDisplayFont(CCmdUI* pCmdUI)
  486. {
  487.     pCmdUI->SetCheck(GetPrinterFont() == NULL);
  488. }
  489.  
  490. /////////////////////////////////////////////////////////////////////////////
  491. // CPadView Tab Stops
  492.  
  493. void CPadView::OnSetTabStops()
  494. {
  495.     CSetTabStops dlg;
  496.     dlg.m_nTabStops = m_nTabStops/4;
  497.     if (dlg.DoModal() == IDOK)
  498.     {
  499.         CWaitCursor wait;
  500.         SetTabStops(dlg.m_nTabStops*4);
  501.         m_nDefTabStops = m_nTabStops;
  502.     }
  503. }
  504.  
  505. /////////////////////////////////////////////////////////////////////////////
  506. // CPadView Word Wrap
  507.  
  508. void CPadView::OnUpdateWordWrap(CCmdUI* pCmdUI)
  509. {
  510.     pCmdUI->SetCheck(IsWordWrap());
  511. }
  512.  
  513. void CPadView::OnWordWrap()
  514. {
  515.     CWaitCursor wait;
  516.     SetWordWrap(!IsWordWrap());
  517.     m_bDefWordWrap = IsWordWrap();
  518. }
  519.  
  520. /////////////////////////////////////////////////////////////////////////////
  521. // CPadView commands
  522.  
  523. void CPadView::OnRButtonDown(UINT, CPoint)
  524. {
  525.     GetParentFrame()->BringWindowToTop();
  526. }
  527.  
  528. void CPadView::OnSize(UINT nType, int cx, int cy)
  529. {
  530.     CWaitCursor wait;
  531.     CEditView::OnSize(nType, cx, cy);
  532. }
  533.  
  534. /////////////////////////////////////////////////////////////////////////////
  535. // CPadView diagnostics
  536.  
  537. #ifdef _DEBUG
  538. void CPadView::AssertValid() const
  539. {
  540.     CEditView::AssertValid();
  541. }
  542.  
  543. void CPadView::Dump(CDumpContext& dc) const
  544. {
  545.     CEditView::Dump(dc);
  546. }
  547. #endif //_DEBUG
  548.  
  549. /////////////////////////////////////////////////////////////////////////////
  550.