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

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

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




                           } 

                       } 

                       //如果我们不能解释hint 内容(也就是说它不是我们所预期的 



638 


…………………………………………………………Page 701……………………………………………………………

                                            第 11 章    View 功能之加強與重繪效率之提昇 



               对象),那就让整个窗口重绘吧(把整个窗口设为无效区)。 

   // CStroke  

     Invalidate(TRUE); 

     return; 

 } 



为什么OnUpdate 之中要调用OnPrepareDC?这关系到滚动条,我将在介绍分裂窗口时再 



说明。另,GetBoundingRect 动作如下: 



 CRect& GetBoundingRect() { return m_rectBounding; } 



 OnDraw 函数也为了高效能重绘动作之故,做了以下修改。阴影部份是与Scribble Step3 



 不同之处: 



 // SCRIBVW。CPP 

 void CScribbleView::OnDraw(CDC* pDC) 

 { 

     CScribbleDoc* pDoc = GetDocument(); 

     ASSERT_VALID(pDoc); 



     // 取得窗口的无效区。如果是在打印状态情况下,则取 

     // printer DC 的截割区(clipping region)。 

     CRect rectClip; 

     CRect rectStroke; 

     pDC…》GetClipBox(&rectClip); 



     // 

     // 注意:CScrollView::OnPrepare 已经在OnDraw 被调用之前先一步 

     // 调整了DC 原点,用以反应出目前的卷动位置。关于CScrollView, 

     // 下一节就会提到。 



     //调用CStroke::DrawStroke 完成无效区中各线条的绘图动作 

     CTypedPtrList& strokeList = pDoc…》m_strokeList; 

     POSITION pos = strokeList。GetHeadPosition(); 

     while (pos != NULL) 

     { 

         CStroke* pStroke = strokeList。GetNext(pos); 

         rectStroke = pStroke…》GetBoundingRect(); 

         if (!rectStroke。IntersectRect(&rectStroke; &rectClip)) 

             continue; 

         pStroke…》DrawStroke(pDC); 

     } 

 } 



                                                                                       639 


…………………………………………………………Page 702……………………………………………………………

               第篇    深入  MFC  程式設計 



          可卷动的窗口:CScrollView 



                到目前为止我们还没有办法观察一张比窗口还大的图,因为我们没有滚动条。 



                一个View 窗口没有滚动条,是很糟糕的事,因为通常Document 范围大而观景窗范围小。 



                我们不能老让Document 与View 窗口一样大。一个具备滚动条的View 窗口更具有「观 



                景窗」的意义。 



                                         Document 



                電腦資訊 ,是個洠в袀惱淼念I域 。「洠в袀惱怼沟囊馑迹褪谴蠹译S時可能歸零 ,任何永 

                                                   IQ    EQ 

                遠有機會爬到任何的頭。而切的成功,不是靠  ,是靠  。 



                                                               View1 



                EQ 這個字眼最近引起大颍齽印N沂窃诖蠹s兩個月前與位讀友見面,從他口第次聽到的。 

                這位朋友是 ENT 執業醫師(ENT 者,ear/nose/throat 是也),他在專業以外的第素養,以及 

                追求新知的熱情,著實讓我感動。對於醫界沉痾的剴切直言,更讓執筆無責任書評的我,有吾 

                道不孤之感,呵呵。會拿起封了八個月的筆,與這位讀友的席談實有許多關係。 



                ◆根魚刺             View2 



                葉醫師,我的這位讀友,對我提到最近的本奇特小書:資訊游俠列傳、無責任書評2、我的 

                電腦探索,並以種不勝幽然的口吻說:「看到這些年紀輕輕的小輩們頭角崢嶸,自己學個 

                Visual Basic                 。。。 

                        卻心力支絀,實在有莫大的打擊 」。侯捷是這本書的唯交集,本應遵循 

                 「瓜田不迹模畈徽凇怪庞枺欢乙嘤懈~刺鯁在我的喉結裡。 



                這本書裡頭,資訊游俠列傳是個男對九個男的探索(別铡畷耍皇乔樯膶W);無 

                責任書評2是個「讀書懷獨行君子之節」的的技術評論與文關懷,非常私,十分另 

                類。我的電腦探索則是十個男對電腦資訊的深情告白。如果以結婚為分水嶺,劃分男與男 

                孩,那麼第本書其實是「個男與九個男孩」對電腦的深情告白。 

                。。。 



                      图11…5a 一个具备滚动条的View 窗口更具 「观景窗」的意义 



               如果你有SDK 程序设计经验,你就会知道设计一个可卷动的窗口是多么烦琐的事(文 



               字的卷动还算好,图形的卷动更惨)。MFC  当然不可能对此一般性功能坐视不管,事实 



               上它已设计好一个CScrollView,其中的滚动条有实时卷动(边拉卷动杆边跑)的效果。 



               基本上要使View 窗口具备滚动条,你必须做到下列事情: 



640 


…………………………………………………………Page 703……………………………………………………………

                                    第 11 章    View 功能之加強與重繪效率之提昇 



                               Document 



                         200 

                                  450 

                 270 



                                                    垂 

                             目前垂直位置= 200 

                                                    直 

                 300                                滚 

                             目前水平位置 =270            动 

                                                    条 

                             水平頁大小= 450             范 

           900                                       围 

                                                    900 



                          水平滚动条范围 = 800 

                                             垂 

                                             直 

                                             頁 

                                             大 

                                             小 

                                             300 



                                   800 



                图11…5b 滚动条View 窗口与Document 之间的关系 



  定义Document 大小。如果没有大小,Framework 就没有办法计算滚动条尺寸, 



  以及卷动比例。这个大小可以是常数,也可以是个储存在每一Document  中的 



  变量,随着执行时期变动。 



   以CScrollView 取代CView。 



  只要Document  的大小改变,就将尺寸传给CScrollView 的SetScrollSizes  函 



  式。如果程序设定Document 为固定大小(本例就是如此),那么当然只要一 



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