《深入浅出MFC第2版(PDF格式)》第289章


CCreateContext* pContext) 
#0065 { 
#0066 return m_wndSplitter。Create(this; 
#0067 2; 2; // TODO: adjust the number of rows; columns 
#0068 CSize(10; 10); // TODO: adjust the minimum pane size 
#0069 pContext); 
#0070 } 
SCRIBBLEDOC。H 
#0001 ///////////////////////////////////////////////////////////////// 
#0002 // class CStroke 
#0003 // 
#0004 // A stroke is a series of connected points in the scribble drawing。 
884 
…………………………………………………………Page 947……………………………………………………………
附錄B Scribble Step5 完整原始碼 
#0005 // A scribble document may have multiple strokes。 
#0006 
#0007 class CStroke : public CObject 
#0008 { 
#0009 public: 
#0010 CStroke(UINT nPenWidth); 
#0011 
#0012 protected: 
#0013 CStroke(); 
#0014 DECLARE_SERIAL(CStroke) 
#0015 
#0016 // Attributes 
#0017 protected: 
#0018 UINT m_nPenWidth; // one pen width applies to entire stroke 
#0019 public: 
#0020 CArray m_pointArray; // series of connected points 
#0021 CRect m_rectBounding; // smallest rect that surrounds all 
#0022 // of the points in the stroke 
#0023 // measured in MM_LOENGLISH units 
#0024 // (0。01 inches; with Y…axis inverted) 
#0025 public: 
#0026 CRect& GetBoundingRect() { return m_rectBounding; } 
#0027 
#0028 // Operations 
#0029 public: 
#0030 BOOL DrawStroke(CDC* pDC); 
#0031 void FinishStroke(); 
#0032 
#0033 public: 
#0034 virtual void Serialize(CArchive& ar); 
#0035 }; 
#0036 
#0037 ///////////////////////////////////////////////////////////////// 
#0038 
#0039 class CScribbleDoc : public CDocument 
#0040 { 
#0041 protected: // create from serialization only 
#0042 CScribbleDoc(); 
#0043 DECLARE_DYNCREATE(CScribbleDoc) 
#0044 
#0045 // Attributes 
#0046 protected: 
#0047 // The document keeps track of the current pen width on 
#0048 // behalf of all views。 We"d like the user interface of 
#0049 // Scribble to be such that if the user chooses the Draw 
#0050 // Thick Line mand; it will apply to all views; not just 
885 
…………………………………………………………Page 948……………………………………………………………
第五篇 附錄
#0051 // the view that currently has the focus。 
#0052 
#0053 UINT m_nPenWidth; // current user…selected pen width 
#0054 BOOL m_bThickPen; // TRUE if current pen is thick 
#0055 UINT m_nThinWidth; 
#0056 UINT m_nThickWidth; 
#0057 CPen m_penCur; // pen created according to 
#0058 // user…selected pen style (width) 
#0059 public: 
#0060 CTypedPtrList m_strokeList; 
#0061 CPen* GetCurrentPen() { return &m_penCur; } 
#0062 
#0063 protected: 
#0064 CSize m_sizeDoc; 
#0065 public: 
#0066 CSize GetDocSize() { return m_sizeDoc; } 
#0067 
#0068 // Operations 
#0069 public: 
#0070 CStroke* NewStroke(); 
#0071 
#0072 // Overrides 
#0073 // ClassWizard generated virtual function overrides 
#0074 //{{AFX_VIRTUAL(CScribbleDoc) 
#0075 public: 
#0076 virtual BOOL OnNewDocument(); 
#0077 virtual void Serialize(CArchive& ar); 
#0078 virtual BOOL OnOpenDocument(LPCTSTR lpszPathName); 
#0079 virtual void DeleteContents(); 
#0080 //}}AFX_VIRTUAL 
#0081 
#0082 // Implementation 
#0083 protected: 
#0084 void ReplacePen(); 
#0085 
#0086 public: 
#0087 virtual ~CScribbleDoc(); 
#0088 #ifdef _DEBUG 
#0089 virtual void AssertValid() const; 
#0090 virtual void Dump(CDumpContext& dc) const; 
#0091 #endif 
#0092 
#0093 protected: 
#0094 void InitDocument(); 
#0095 
#0096 // Generated message map functions 
886 
…………………………………………………………Page 949……………………………………………………………
附錄B Scribble Step5 完整原始碼 
#0097 protected: 
#0098 //{{AFX_MSG(CScribbleDoc) 
#0099 afx_msg void OnEditClearAll(); 
#0100 afx_msg void OnPenThickOrThin(); 
#0101 afx_msg void OnUpdateEditClearAll(CCmdUI* pCmdUI); 
#0102 afx_msg void OnUpdatePenThickOrThin(CCmdUI* pCmdUI); 
#0103 afx_msg void OnPenWidt
小说推荐
返回首页返回目录