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


#0103 afx_msg void OnPenWidths(); 
#0104 //}}AFX_MSG 
#0105 DECLARE_MESSAGE_MAP() 
#0106 }; 
SCRIBBLEDOC。CPP 
#0001 #include 〃stdafx。h〃 
#0002 #include 〃Scribble。h〃 
#0003 
#0004 #include 〃ScribDoc。h〃 
#0005 #include 〃PenDlg。h〃 
#0006 
#0007 #ifdef _DEBUG 
#0008 #define new DEBUG_NEW 
#0009 #undef THIS_FILE 
#0010 static char THIS_FILE'' = __FILE__; 
#0011 #endif 
#0012 
#0013 ///////////////////////////////////////////////////////////////// 
#0014 // CScribbleDoc 
#0015 
#0016 IMPLEMENT_DYNCREATE(CScribbleDoc; CDocument) 
#0017 
#0018 BEGIN_MESSAGE_MAP(CScribbleDoc; CDocument) 
#0019 //{{AFX_MSG_MAP(CScribbleDoc) 
#0020 ON_MAND(ID_EDIT_CLEAR_ALL; OnEditClearAll) 
#0021 ON_MAND(ID_PEN_THICK_OR_THIN; OnPenThickOrThin) 
#0022 ON_UPDATE_MAND_UI(ID_EDIT_CLEAR_ALL; OnUpdateEditClearAll) 
#0023 ON_UPDATE_MAND_UI(ID_PEN_THICK_OR_THIN; OnUpdatePenThickOrThin) 
#0024 ON_MAND(ID_PEN_WIDTHS; OnPenWidths) 
#0025 //}}AFX_MSG_MAP 
#0026 END_MESSAGE_MAP() 
#0027 
#0028 ///////////////////////////////////////////////////////////////// 
#0029 // CScribbleDoc construction/destruction 
#0030 
#0031 CScribbleDoc::CScribbleDoc() 
#0032 { 
887 
…………………………………………………………Page 950……………………………………………………………
第五篇 附錄
#0033 // TODO: add one…time construction code here 
#0034 
#0035 } 
#0036 
#0037 CScribbleDoc::~CScribbleDoc() 
#0038 { 
#0039 } 
#0040 
#0041 BOOL CScribbleDoc::OnNewDocument() 
#0042 { 
#0043 if (!CDocument::OnNewDocument()) 
#0044 return FALSE; 
#0045 InitDocument(); 
#0046 return TRUE; 
#0047 } 
#0048 
#0049 ///////////////////////////////////////////////////////////////// 
#0050 // CScribbleDoc serialization 
#0051 
#0052 void CScribbleDoc::Serialize(CArchive& ar) 
#0053 { 
#0054 if (ar。IsStoring()) 
#0055 { 
#0056 ar 》 m_sizeDoc; 
#0061 } 
#0062 m_strokeList。Serialize(ar); 
#0063 } 
#0064 
#0065 //////////////////////////////////////////////////////////////// 
#0066 // CScribbleDoc diagnostics 
#0067 
#0068 #ifdef _DEBUG 
#0069 void CScribbleDoc::AssertValid() const 
#0070 { 
#0071 CDocument::AssertValid(); 
#0072 } 
#0073 
#0074 void CScribbleDoc::Dump(CDumpContext& dc) const 
#0075 { 
#0076 CDocument::Dump(dc); 
#0077 } 
#0078 #endif //_DEBUG 
888 
…………………………………………………………Page 951……………………………………………………………
附錄B Scribble Step5 完整原始碼 
#0079 
#0080 ///////////////////////////////////////////////////////////////// 
#0081 // CScribbleDoc mands 
#0082 
#0083 BOOL CScribbleDoc::OnOpenDocument(LPCTSTR lpszPathName) 
#0084 { 
#0085 if (!CDocument::OnOpenDocument(lpszPathName)) 
#0086 return FALSE; 
#0087 InitDocument(); 
#0088 return TRUE; 
#0089 } 
#0090 
#0091 void CScribbleDoc::DeleteContents() 
#0092 { 
#0093 while (!m_strokeList。IsEmpty()) 
#0094 { 
#0095 delete m_strokeList。RemoveHead(); 
#0096 } 
#0097 CDocument::DeleteContents(); 
#0098 } 
#0099 
#0100 void CScribbleDoc::InitDocument() 
#0101 { 
#0102 m_bThickPen = FALSE; 
#0103 m_nThinWidth = 2; // default thin pen is 2 pixels wide 
#0104 m_nThickWidth = 5; // default thick pen is 5 pixels wide 
#0105 ReplacePen(); // initialize pen according to current width 
#0106 
#0107 // default document size is 800 x 900 screen pixels 
#0108 m_sizeDoc = CSize(800;900); 
#0109 } 
#0110 
#0111 CStroke* CScribbleDoc::NewStroke() 
#0112 { 
#0113 CStroke* pStrokeItem = new CStroke(m_nPenWidth); 
#0114 m_strokeList。AddTail(pStrokeItem); 
#0115 SetModifiedFlag(); // Mark the document as having been modified; for 
#0116 // purposes of confirming File Close。 
#0117 return pStrokeItem; 
#0118 } 
#0119 
#0120 
#0121 
#0122 
#0123 ///////////////////////////////////////////////////////////////// 
#0124 // CStroke 
889 
…………………………………………………………Page 952……………………………………………………………
第五篇 附錄
#0125 
#0126 IMPLEMENT_SERIAL(CStroke; CObject; 2) 
#0127 CStroke::CStroke() 
#0128 { 
#0129 // This empty constructor should be used by serialization only 
#0130 } 
#0131 
#0132 CStrok
小说推荐
返回首页返回目录