友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

深入浅出MFC第2版(PDF格式)-第294章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




#0143          CClientDC dc(this); 

#0144          OnPrepareDC(&dc); 

#0145          dc。DPtoLP(&point); 

#0146 

#0147          m_pStrokeCur = GetDocument()…》NewStroke(); 

#0148          // Add first point to the new stroke 

#0149          m_pStrokeCur…》m_pointArray。Add(point); 

#0150 

#0151          SetCapture();       // Capture the mouse until button up。 

#0152          m_ptPrev = point;   // Serves as the MoveTo() anchor point for the 

#0153                                // LineTo() the next point; as the user drags the 

#0154                                // mouse。 

#0155 

#0156          return; 

#0157  } 

#0158 

#0159  void CScribbleView::OnLButtonUp(UINT; CPoint point) 

#0160  { 

#0161          // Mouse button up is interesting in the Scribble application 

#0162          // only if the user is currently drawing a new stroke by dragging 

#0163          // the captured mouse。 

#0164 

#0165          if (GetCapture() != this) 

#0166                  return; // If this window (view) didn't capture the mouse; 

#0167                                  // then the user isn't drawing in this window。 



                                                                                       897 


…………………………………………………………Page 960……………………………………………………………

                   第五篇    附錄  



                   #0168 

                   #0169          CScribbleDoc* pDoc = GetDocument(); 

                   #0170 

                   #0171          CClientDC dc(this); 

                   #0172 

                   #0173          // CScrollView changes the viewport origin and mapping mode。 

                   #0174          // It's necessary to convert the point from device coordinates 

                   #0175          // to logical coordinates; such as are stored in the document。 

                   #0176          OnPrepareDC(&dc);  // set up mapping mode and viewport origin 

                   #0177          dc。DPtoLP(&point); 

                   #0178 

                   #0179          CPen* pOldPen = dc。SelectObject(pDoc…》GetCurrentPen()); 

                   #0180          dc。MoveTo(m_ptPrev); 

                   #0181          dc。LineTo(point); 

                   #0182          dc。SelectObject(pOldPen); 

                   #0183          m_pStrokeCur…》m_pointArray。Add(point); 

                   #0184 

                   #0185          // Tell the stroke item that we're done adding points to it。 

                   #0186          // This is so it can finish puting its bounding rectangle。 

                   #0187          m_pStrokeCur…》FinishStroke(); 

                   #0188 

                   #0189          // Tell the other views that this stroke has been added 

                   #0190          // so that they can invalidate this stroke's area in their 

                   #0191          // client area。 

                   #0192          pDoc…》UpdateAllViews(this; 0L; m_pStrokeCur); 

                   #0193 

                   #0194          ReleaseCapture();   // Release the mouse capture established at 

                   #0195                                 // the beginning of the mouse drag。 

                   #0196          return; 

                   #0197  } 

                   #0198 

                   #0199  void CScribbleView::OnMouseMove(UINT; CPoint point) 

                   #0200  { 

                   #0201          // Mouse movement is interesting in the Scribble application 

                   #0202          // only if the user is currently drawing a new stroke by dragging 

                   #0203          // the captured mouse。 

                   #0204 

                   #0205          if (GetCapture() != this) 

                   #0206                  return; // If this window (view) didn't capture the mouse; 

                   #0207                             // then the user isn't drawing in this window。 

                   #0208 

                   #0209          CClientDC dc(this); 

                   #0210          // CScrollView changes the viewport origin and mapping mode。 

                   #0211          // It's necessary to convert the point from device coordinates 

                   #0212          // to logical coordinates; such as are stored in the document。 

                   #0213          OnPrepareDC(&dc); 



898 


…………………………………………………………Page 961……………………………………………………………

                                                     附錄B    Scribble Step5  完整原始碼 



#0214          dc。DPtoLP(&point); 

#0215 

#0216          m_pStrokeCur…》m_pointArray。Add(point); 

#0217 

#0218          // Draw a line from the previous detected point in the mouse 

#0219          // drag to the current point。 

#0220          CPen* pOldPen = dc。SelectObject(GetDocument()…》GetCurrentPen()); 

#0221          dc。MoveTo(m_ptPrev); 

#0222          dc。LineTo(point); 

#0223          dc。SelectObject(pOldPen); 

#0224          m_ptPrev = point; 

#0225          return; 

#0226  } 

#0227 

#0228  void CScribbleView::OnUpdate(CView* /* pSender */; LPARAM /* lHint */; 

#0229          CObject* pHint) 

#0230  { 

#0231          // The document has informed this view that some data has changed。 

#0232 

#0233          if (pHint != NULL) 

#0234          { 

#0235                  if (pHint…》IsKindOf(RUNTIME_CLASS(CStroke))) 

#0236                  { 

#0237                          // The hint is that a stroke as been added (or changed)。 

#0238                          // So; invalidate its rectangle。 

#0239                          CStroke* pStroke = (CStroke*)pHint; 

#0240                          CClientDC dc(this); 

#0241                          OnPrepareDC(&dc); 

#0242                          CRect rectInvalid = pStroke…》GetBoundingRect(); 

#0243                          dc。LPtoDP(&rectInvalid); 

#0244                          InvalidateRect(&rectInvalid); 

#0245                          return; 

#0
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!