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

VC语言6.0程序设计从入门到精通-第21章

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




读者是可能第一次接触到  MFC  编程,因此首先对工程及工作区的概念及创建方法进行了介 

绍。在此基础上通过 AppWizard  工具一步步地创建出的基于单文档(SDI )的 HelloMFC  应 

用程序,并对其工程文件的组成及作用进行了说明。针对 HelloMFC 应用程序,介绍了类向 

导(ClassWizard )工具的基本用法,接着对程序的运行过程以及应用类(CWinApp )的几个 

主要的成员函数进行了解释。由于 HelloMFC  是基于文档视图结构的,接下来对该结构的文 

档类和视图类的各自作用及相互之间的关系分别进行了说明,同时对经常用到的单文档 

 SDI)和多文档(MDI )结构进行了对比。针对框架结构中不可缺少主窗口类(CMainFrame ) 

( 

和子窗口类(CChildFrame ),本章也对它们的功能和使用方法进行了介绍,同时介绍了在框 

架窗口使用频率很高的工具栏(Toolbar )和状态栏(StatusBar)也介绍了创建过程和使用方 

法,电子时钟(在状态栏中创建一个电子时钟 )例程演示了自定义状态栏的使用方法。最后, 

对应用程序框架中的主要对象的关系及相互访问情况进行了总结。  

   本章阐述的应用程序框架是对话框、控件、文件操作及 Visual  C++高级编程的基础,希 

望读者能够仔细阅读推敲,并在后面章节的学习过程中能够反复翻阅体会,以便达到对 MFC 

应用程序框架的深刻理解。  



                                                           ·41 ·  


…………………………………………………………Page 51……………………………………………………………

            第 3 章    菜单与加速键  

            第 3 章    菜单与加速键  



   菜单是 Windows 程序界面的重要元素,程序的各种操作和功能都是通过单击菜单项完成 

的。一个设计合理、功能完善的菜单能极大地方便用户的使用。加速键是菜单的辅助功能, 

程序使用者可以通过快捷键直接访问常用的菜单选项。本章就介绍在程序中创建菜单和加速 

键的方法。  



3。1    消息与事件  



   Windows 应用程序是通过消息驱动的,因此消息和事件是Windows 程序设计的核心概念。 

本节将简要介绍消息和事件的处理过程,为以后的编程实践打下基础。  



3。1。1    事件驱动机制  



   在生活中,人们都会对外界发生的各种各样的和自身相关的刺激做出一定的反应,这就 

是所谓的应激性。Windows 系统中也有类似的应激性,也就是本小节要介绍的概念—事件 

驱动机制。  

   Windows 作为一个以图形界面为主的操作系统,主要面向与用户的交互。这个特点决定 

了在 Windows 上面运行的程序大部分都要以等待用户输入,并根据用户输入做出相应的操作 

为主要运行方式 。因此,用户输入是 Windows 系统中消息和事件的一个主要来源。根据用户 

输入做出相应的操作,这个过程称为消息处理的过程。同时 Windows 系统也将系统和程序, 

程序和程序之间的相互作用,抽象为另外一类消息和事件。这样程序在运行中与系统环境的 

相互作用就体现为接收消息,然后对消息进行处理。这就是事件驱动机制的主要内涵。  

   Windows 下的应用程序的主要工作是进行消息的循环处理,通过循环等待消息的到来和 

事件的发生,然后对不同的消息和事件运行相关的代码,完成相应的操作。  



3。1。2    消息和消息映射  



   Windows 系统中的程序大部分都是通过消息和事件驱动的。为了完成各种功能,Windows 

提供了大量的消息。这些消息主要有 3 种类型。  

   o  标准 Windows 消息:消息名以 WM_ 为前缀的消息(也有例外,如控件通知消息 

    WM_MAND ),例如  WM_SIZE (改变窗口大小消息)、WM_MOVE (移动窗口 

    消息)等。  

   o  控件通知消息:由列表框、按钮等控件或子窗口发给其父窗口的通知消息 ,以 

    WM_MAND 为消息名,消息中包含有控件通知代码,用以区分不同的控件通知 


…………………………………………………………Page 52……………………………………………………………

                                                                                  第 3 章    菜单与加速键  



        消息。  

     o  命令消息:命令消息也以 WM_MAND 为消息名,在消息中包含有命令的标识符, 

        用以区分不同的命令。命令消息主要来自菜单、工具栏和加速键。其中菜单和加速键 

        消息将是本章要学习的内容。  

     上面的这 3 类消息在 MFC  中有统一的处理框架,即消息映射机制。消息映射机制将消 

息及其处理函数表示成一一对应的表,并对这张表进行分析处理。 

                                                                           CCmdTarget 类的派生类用 

于存放消息映射机制,使用消息映射必须在源程序中加入以下两方面内容:  

     (1)在类的头文件中加入如下语句:  



     DECLARE_MESSAGE_MAP()  



     例如在类 CTestApp 的头文件 TestApp。h 中有如下代码段:  



     class CTestApp : public CWinApp  



     {  



     public:  



          CTestApp();  



       



     // Overrides  



          // ClassWizard generated virtual function overrides  



          //{{AFX_VIRTUAL(CTestApp)  



          public:  



          virtual BOOL InitInstance();  



          //}}AFX_VIRTUAL  



       



     // Implementation  



          //{{AFX_MSG(CTestApp)  



          afx_msg void OnAppAbout();  



                // NOTE the ClassWizard will add and remove member functions here。  



                // DO NOT EDIT what you see in these blocks of generated code !  



          //}}AFX_MSG  



          DECLARE_MESSAGE_MAP()  



     };  



     DECLARE_MESSAGE_MAP()就添加在 CTestApp 类的定义程序块的末尾。  

     (2 )在类的实现文件中加入消息映射表:  



     BEGIN_MESSAGE_MAP(类名;  父类名)    



           ……  



           消息映射表项  



           ……  



     END_MESSAGE_MAP()  



     在 CTestApp 类的实现文件 TestApp。cpp 的开头、常量定义的后面,就有如下消息映射表 

的代码:  



     /////////////////////////////////////////////////////////////////////////////  



                                                                                                   ·43 ·  


…………………………………………………………Page 53……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通      



    // CTestApp  



      



    BEGIN_MESSAGE_MAP(CTestApp; CWinApp)  



        //{{AFX_MSG_MAP(CTestApp)  



        ON_MAND(ID_APP_ABOUT; OnAppAbout)  



            // NOTE the ClassWizard will add and remove mapping macros here。  



            //        DO NOT EDIT what you see in these blocks of generated code!  



        //}}AFX_MSG_MAP  



        // Standard file based document mands  



        ON_MAND(ID_FILE_NEW; CWinApp::OnFileNew)  



        ON_MAND(ID_FILE_OPEN; CWinApp::OnFileOpen)  



        // Standard print setup mand  



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