#0244 InvalidateRect(&rectInvalid); #0245 return; #0246 } #0247 } #0248 // We can"t interpret the hint; so assume that anything might #0249 // have been updated。 #0250 Invalidate(TRUE); #0251 return; #0252 } #0253 #0254 void CScribbleView::OnInitialUpdate() #0255 { #0256 SetScrollSizes(MM_LOENGLISH; GetDocument()…》GetDocSize()); #0257 CScrollView::OnInitialUpdate(); #0258 } #0259 899 …………………………………………………………Page 962…………………………………………………………… 第五篇 附錄 #0260 void CScribbleView::OnPrint(CDC* pDC; CPrintInfo* pInfo) #0261 { #0262 if (pInfo…》m_nCurPage == 1) // page no。 1 is the title page #0263 { #0264 PrintTitlePage(pDC; pInfo); #0265 return; // nothing else to print on page 1 but the page title #0266 } #0267 CString strHeader = GetDocument()…》GetTitle(); #0268 #0269 PrintPageHeader(pDC; pInfo; strHeader); #0270 // PrintPageHeader() subtracts out from the pInfo…》m_rectDraw the #0271 // amount of the page used for the header。 #0272 #0273 pDC…》SetWindowOrg(pInfo…》m_rectDraw。left;…pInfo…》m_rectDraw。top); #0274 #0275 // Now print the rest of the page #0276 OnDraw(pDC); #0277 } #0278 #0279 void CScribbleView::PrintTitlePage(CDC* pDC; CPrintInfo* pInfo) #0280 { #0281 // Prepare a font size for displaying the file name #0282 LOGFONT logFont; #0283 memset(&logFont; 0; sizeof(LOGFONT)); #0284 logFont。lfHeight = 75; // 3/4th inch high in MM_LOENGLISH #0285 // (1/100th inch) #0286 CFont font; #0287 CFont* pOldFont = NULL; #0288 if (font。CreateFontIndirect(&logFont)) #0289 pOldFont = pDC…》SelectObject(&font); #0290 #0291 // Get the file name; to be displayed on title page #0292 CString strPageTitle = GetDocument()…》GetTitle(); #0293 #0294 // Display the file name 1 inch below top of the page; #0295 // centered horizontally #0296 pDC…》SetTextAlign(TA_CENTER); #0297 pDC…》TextOut(pInfo…》m_rectDraw。right/2; …100; strPageTitle); #0298 #0299 if (pOldFont != NULL) #0300 pDC…》SelectObject(pOldFont); #0301 } #0302 #0303 void CScribbleView::PrintPageHeader(CDC* pDC; CPrintInfo* pInfo; #0304 CString& strHeader) #0305 { 900 …………………………………………………………Page 963…………………………………………………………… 附錄B Scribble Step5 完整原始碼 #0306 // Print a page header consisting of the name of #0307 // the document and a horizontal line #0308 pDC…》SetTextAlign(TA_LEFT); #0309 pDC…》TextOut(0;…25; strHeader); // 1/4 inch down #0310 #0311 // Draw a line across the page; below the header #0312 TEXTMETRIC textMetric; #0313 pDC…》GetTextMetrics(&textMetric); #0314 int y = …35 textMetric。tmHeight; // line 1/10th inch below text #0315 pDC…》MoveTo(0; y); // from left margin #0316 pDC…》LineTo(pInfo…》m_rectDraw。right; y); // to right margin #0317 #0318 // Subtract out from the drawing rectange the space used by the header。 #0319 y …= 25; // space 1/4 inch below (top of) line #0320 pInfo…》m_rectDraw。top += y; #0321 } PENDLG。H #0001 class CPenWidthsDlg : public CDialog #0002 { #0003 // Construction #0004 public: #0005 CPenWidthsDlg(CWnd* pParent = NULL); // standard constructor #0006 #0007 // Dialog Data #0008 //{{AFX_DATA(CPenWidthsDlg) #0009 enum { IDD = IDD_PEN_WIDTHS }; #0010 int m_nThinWidth; #0011 int m_nThickWidth; #0012 //}}AFX_DATA #0013 #0014 #0015 // Overrides #0016 // ClassWizard generated virtual function overrides #0017 //{{AFX_VIRTUAL(CPenWidthsDlg) #0018 protected: #0019 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support #0020 //}}AFX_VIRTUAL #0021 #0022 // Implementation #0023 protected: #0024 #0025 // Generated message map functions #0026 //{{AFX_MSG(CPenWidthsDlg) #0027 afx_msg void OnDefaultPenWidths(); 901 …………………………………………………………Page 964…………………………………………………………… 第五篇 附錄 #0028 //}}AFX_MSG #0029 DECLARE_MESSAGE_MAP() #0030 }