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

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

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




            //{{AFX_MSG_MAP(CScribbleDoc) 

            ON_MAND(ID_EDIT_CLEAR_ALL; OnEditClearAll) 

            ON_MAND(ID_PEN_THICK_OR_THIN; OnPenThickOrThin) 

            ON_UPDATE_MAND_UI(ID_EDIT_CLEAR_ALL; OnUpdateEditClearAll) 

            ON_UPDATE_MAND_UI(ID_PEN_THICK_OR_THIN; OnUpdatePenThickOrThin) 

            //}}AFX_MSG_MAP 

    END_MESSAGE_MAP() 



    不要去掉//{{ 和//}},否则下次ClassWizard 或WizardBar 不能正常工作。 



2。  CSRIBBLEDOC。H 



    class CScribbleDoc : public CDocument 

    { 

    。。。 

    // Generated message map functions 

    protected: 

            //{{AFX_MSG(CScribbleDoc) 

            afx_msg void OnEditClearAll(); 

            afx_msg void OnPenThickOrThin(); 

            afx_msg void OnUpdateEditClearAll(CCmdUI* pCmdUI); 

            afx_msg void OnUpdatePenThickOrThin(CCmdUI* pCmdUI); 

            //}}AFX_MSG 

    。。。 

    }; 



3。  RESOURCE。H 



    #define ID_PEN_THICK_OR_THIN            32772 

    #define ID_PEN_WIDTHS                   32773 



     (另一个项目ID_EDIT_CLEAR_ALL 已经在AFXRES。H 中定义了) 



                                                                                   597 


…………………………………………………………Page 660……………………………………………………………

                   第篇    深入  MFC  程式設計 



                   4。   SCRIBBLEDOC。CPP 



                       void CScribbleDoc::OnEditClearAll() 

                       { 

                              DeleteContents(); 

                              SetModifiedFlag();  // Mark the document as having been modified; for 

                                                     // purposes of confirming File Close。 

                              UpdateAllViews(NULL); 

                       } 



                       void CScribbleDoc::OnPenThickOrThin() 

                       { 

                              // Toggle the state of the pen between thin or thick。 

                              m_bThickPen = !m_bThickPen; 



                              // Change the current pen to reflect the new user…specified width。 

                              ReplacePen(); 

                       } 



                       void CScribbleDoc::ReplacePen() 

                       { 

                              m_nPenWidth = m_bThickPen? m_nThickWidth : m_nThinWidth; 



                              // Change the current pen to reflect the new user…specified width。 

                              m_penCur。DeleteObject(); 

                              m_penCur。CreatePen(PS_SOLID; m_nPenWidth; RGB(0;0;0)); // solid black 

                       } 



                       void CScribbleDoc::OnUpdateEditClearAll(CCmdUI* pCmdUI) 

                       { 

                              // Enable the mand user interface object (menu item or tool bar 

                              // button) if the document is non…empty; i。e。; has at least one stroke。 

                              pCmdUI…》Enable(!m_strokeList。IsEmpty()); 

                       } 



                       void CScribbleDoc::OnUpdatePenThickOrThin(CCmdUI* pCmdUI) 

                       { 

                              // Add check mark to Draw Thick Line menu item; if the current 

                              // pen width is 〃thick〃。 

                              pCmdUI…》SetCheck(m_bThickPen); 

                       } 



598 


…………………………………………………………Page 661……………………………………………………………

                                       第9章   訊息映射與命令繞行   



本章回顾 



   这一章主要为Scribble Step2 增加新的菜单命令项。在这个过程中我们使用了工具栏编 



   辑器和ClassWizard (或Wizardbar )等工具。工具的使用很简单,但是把消息的处理常 



   式加在什么地方却是关键。因此本章一开始先带你深入探索MFC 源代码,了解消息的 



   递送以及所谓Message Map 背后的意义,并且也解释了命令消息(WM_MAND) 特 



   异的绕行路线及其原因。 



   我在本章中挖出了许多MFC 源代码,希望藉由源代码的自我说明能力,加深你对消息 



   映射与消息绕行路径的了解。这是对MFC      「知其所以然」的重要关键。这个知识基础不 



   会因为MFC  的源代码更动而更动,我要强调的,是其原理。 



                                                            599 


…………………………………………………………Page 662……………………………………………………………

                第篇    深入  MFC  程式設計 



600 


…………………………………………………………Page 663……………………………………………………………

                                          10     MFC 

                                        第 章      與對話盒 



  10 

第  章 



               MFC 与对话框 



 上一章我们为Scribble 新增了一个【Pen 】菜单,其中第二个命令项【Pen Width。。。 】准 



 备用来提供一个对话框,让使用者设定笔的宽度。每一线条都可以拥有自己的笔宽。原 



 预设粗笔是5个图素宽,细笔是2个图素宽。 



 为了这样的目的,在对话框中放个Spin 控制组件是极佳的选择。Spin 就是那种有着上下 



 小三角形箭头、可搭配一个文字显示器的控制组件,有点像转轮,用来选择数字最合适: 



                                                           601 


…………………………………………………………Page 664……………………………………………………………

               第篇    深入  MFC  程式設計 



               但是,Scribble Step3 只是想示范如何在MFC 程序中经由菜单命令项唤起一个对话框, 



               并示范所谓的资料交换与资料检验(DDX/DDV)。所以,笔宽对话框中只选用两个小小 



               的Edit 控制组件而已。 



               本章还可以学习到如何利用对话框编辑器设计对话框的模板,并利用ClassWizard 制作 



               一个对话框类别,定义消息处理函数,把它们与对话框「绑」在一块儿。 



                    图10…1  【Pen Widths】对话框 



         对话框编辑器 



               把对话框函数在一旁,把所有程序烦恼在一旁,我们先享受一下Visual C++ 整合环 



               境中的对话框编辑器带来的对话框模板(Dialog Template)设计快感。 



               设计对话框模板,有两个重要的步骤,第一是从工具箱中选择控制组件(control,功能 



               各异的小小零组件)加到对话框中,第二是填写此一控制组件的标题、ID 、以及其它性 



               质。 



               以下就是利用对话框编辑器设计【Pen Widths 】对话框的过程。 



                  在Visual C++ 整合环境中选按【Insert/Resource 】命令项,并在随后而来的【Insert 

                



                 Resource 】对话框中,选择【resource types 】为Dialog。 



                  或是直接在Visual C++ 整合环境中按下工具栏的【New Dialog】按钮。 

                



                 



602 


…………………………………………………………Page 665……………………………………………………………

                                              10      MFC 

                                            第 章        與對話盒 



  Scribble。rc 文件会被打开,对话框编辑器出现,自动给我们一个空白对话框,内 



  含两个按钮,分别是【OK 】和【Cancel】。控制组件工具箱出现在画面右侧, 



  内含许多控制组件。 



 为了设定控制组件的属性,必须用到【Dialog Properties 】对话框。如果它最初 



  没有出现,只要以右键选按对话框的任何地方,就会跑出一份菜单,再选择其 



  中的! § Properties!  ¨,即会出现此对话框。按下对话框左上方的push…pin 钮(大 



  头针) 可以常保它浮现为最上层窗口。现在把对话框ID 改为 



  IDD_PEN_WIDTHS ,把标题改为〃Pen Widths〃。 



                                                                  603 


…………………………………………………………Page 666……………………………………………………………

                    第篇    深入  MFC  程式設計 



                       为对话框加入两个Edit 控制组件,两个Static 控制组件,以及一个按钮。 

                     



                      右键选按新增的按钮,在Property page  中把其标题改为〃Default〃,并把ID 



                       改为IDC_DEFAULT_PEN_ WIDTHS。 



                         

                     右键选按第一个Edit 控制组件, 在Property page  中把ID 改为 



                       IDC_THIN_PEN_ WIDTH。以同样的方式把第二个Edit 控制组件的ID 改为 



                      IDC   THICK  PEN   WIDTH 。 

                          _       _    _ 



604 


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