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


#0130 } 
#0131 
#0132 CStroke::CStroke(UINT nPenWidth) 
#0133 { 
#0134 m_nPenWidth = nPenWidth; 
#0135 m_rectBounding。SetRectEmpty(); 
#0136 } 
#0137 
#0138 void CStroke::Serialize(CArchive& ar) 
#0139 { 
#0140 if (ar。IsStoring()) 
#0141 { 
#0142 ar m_rectBounding; 
#0149 WORD w; 
#0150 ar 》》 w; 
#0151 m_nPenWidth = w; 
#0152 m_pointArray。Serialize(ar); 
#0153 } 
#0154 } 
#0155 
#0156 BOOL CStroke::DrawStroke(CDC* pDC) 
#0157 { 
#0158 CPen penStroke; 
#0159 if (!penStroke。CreatePen(PS_SOLID; m_nPenWidth; RGB(0;0;0))) 
#0160 return FALSE; 
#0161 CPen* pOldPen = pDC…》SelectObject(&penStroke); 
#0162 pDC…》MoveTo(m_pointArray'0'); 
#0163 for (int i=1; i 《 m_pointArray。GetSize(); i++) 
#0164 { 
#0165 pDC…》LineTo(m_pointArray'i'); 
#0166 } 
#0167 
#0168 pDC…》SelectObject(pOldPen); 
#0169 return TRUE; 
#0170 } 
890 
…………………………………………………………Page 953……………………………………………………………
附錄B Scribble Step5 完整原始碼 
#0171 void CScribbleDoc::OnEditClearAll() 
#0172 { 
#0173 DeleteContents(); 
#0174 SetModifiedFlag(); // Mark the document as having been modified; for 
#0175 // purposes of confirming File Close。 
#0176 UpdateAllViews(NULL); 
#0177 } 
#0178 
#0179 void CScribbleDoc::OnPenThickOrThin() 
#0180 { 
#0181 // Toggle the state of the pen between thin or thick。 
#0182 m_bThickPen = !m_bThickPen; 
#0183 
#0184 // Change the current pen to reflect the new user…specified width。 
#0185 ReplacePen(); 
#0186 } 
#0187 
#0188 void CScribbleDoc::ReplacePen() 
#0189 { 
#0190 m_nPenWidth = m_bThickPen? m_nThickWidth : m_nThinWidth; 
#0191 
#0192 // Change the current pen to reflect the new user…specified width。 
#0193 m_penCur。DeleteObject(); 
#0194 m_penCur。CreatePen(PS_SOLID; m_nPenWidth; RGB(0;0;0)); // solid black 
#0195 } 
#0196 
#0197 void CScribbleDoc::OnUpdateEditClearAll(CCmdUI* pCmdUI) 
#0198 { 
#0199 // Enable the mand user interface object (menu item or tool bar 
#0200 // button) if the document is non…empty; i。e。; has at least one stroke。 
#0201 pCmdUI…》Enable(!m_strokeList。IsEmpty()); 
#0202 } 
#0203 
#0204 void CScribbleDoc::OnUpdatePenThickOrThin(CCmdUI* pCmdUI) 
#0205 { 
#0206 // Add check mark to Draw Thick Line menu item; if the current 
#0207 // pen width is 〃thick〃。 
#0208 pCmdUI…》SetCheck(m_bThickPen); 
#0209 } 
#0210 
#0211 void CScribbleDoc::OnPenWidths() 
#0212 { 
#0213 CPenWidthsDlg dlg; 
#0214 // Initialize dialog data 
#0215 dlg。m_nThinWidth = m_nThinWidth; 
#0216 dlg。m_nThickWidth = m_nThickWidth; 
891 
…………………………………………………………Page 954……………………………………………………………
第五篇 附錄
#0217 
#0218 // Invoke the dialog box 
#0219 if (dlg。DoModal() == IDOK) 
#0220 { 
#0221 // retrieve the dialog data 
#0222 m_nThinWidth = dlg。m_nThinWidth; 
#0223 m_nThickWidth = dlg。m_nThickWidth; 
#0224 
#0225 // Update the pen that is used by views when drawing new strokes; 
#0226 // to reflect the new pen width definitions for 〃thick〃 and 〃thin〃。 
#0227 ReplacePen(); 
#0228 } 
#0229 } 
#0230 
#0231 void CStroke::FinishStroke() 
#0232 { 
#0233 // Calculate the bounding rectangle。 It"s needed for smart 
#0234 // repainting。 
#0235 
#0236 if (m_pointArray。GetSize()==0) 
#0237 { 
#0238 m_rectBounding。SetRectEmpty(); 
#0239 return; 
#0240 } 
#0241 CPoint pt = m_pointArray'0'; 
#0242 m_rectBounding = CRect(pt。x; pt。y; pt。x; pt。y); 
#0243 
#0244 for (int i=1; i 《 m_pointArray。GetSize(); i++) 
#0245 { 
#0246 // If
小说推荐
返回首页返回目录