• 读书笔记:MFC单文档应用程序结构分析 拓荒者


        真的开始学习VC++了,感觉还是有点吃力。之前的知识几乎全部忘掉了,要重新开始。不过还好,语法基础还是有的,不用费多大力气。面向对象的知识还是有的,不用重新学习,只需要了解一下就可以了。指针的知识也差不了多少,边用边学吧。今天开始重新进军VC++的殿堂,希望从此打开我的C++学习大门。这个八月的目标:熟悉MFC的单文档、多文档和对话框应用程序,了解MFC下的控件使用。一点一点开始吧~~Keep Moving……

    第一步:新建一个MFC的单文档应用程序

        很简单,打开VC 6.0(惭愧,都这个时间了,我还在使用6.0~~),“文件”—> “新建”—> “工程”—> “MFC AppWizard(exe)”,然后输入工程名称,下一步的时候选择“单文档”,再下一步、下一步……完成即可。

        我新建的工程名称是Writer,这里先说明一下,下面的分析中都会出现。

    第二步:主要程序类分析

    1、应用程序类 CWriterApp

        CWriterApp类继承于CWinApp,负责管理整个应用程序。每一个MFC Windows应用程序对应一个CWinApp派生类的对象,这个对象可以在Writer.cpp中找到。

        应用程序CWriterApp的一个重要初始化函数InitInstance,它用于初始化应用程序。在这个方法的是现在中,有这样一段代码,用来注册单文档的文档窗口、SDI架构主窗体和视图窗口:

    CSingleDocTemplate* pDocTemplate;
    pDocTemplate = new CSingleDocTemplate(
        IDR_MAINFRAME,
        RUNTIME_CLASS(CWriterDoc),
        RUNTIME_CLASS(CMainFrame),       // main SDI frame window
        RUNTIME_CLASS(CWriterView));
    AddDocTemplate(pDocTemplate);

        这段代码指明了文档类、架构类和视图类,从而构造了一个单文档视图结构的应用程序。

    2、文档类CWriterDoc

        文档类是用来存取数据的。其中的Seriallize方法可以存取数据。

    3、视图类CWriterView

        视图类负责显示程序数据及用户才操作。可以理解为程序和用户的接口(UI),这个接口设计的好坏直接影响到用户的体验。ps. 非常貌似UI的概念。

        在这个类中,最常用的函数是OnDraw,这个函数的作用是重绘文档显示的内容,当窗口首次生成、改变大小、拖动的时候,程序都会调用这个方法来重绘界面。另外一个常用的函数是GetDocumnet,这个函用来获取文档的指针,便于访问文档中的数据。函数OnDraw的代码如下:

    void CWriterView::OnDraw(CDC* pDC)
    {
        CWriterDoc* pDoc = GetDocument();
        ASSERT_VALID(pDoc);
        // TODO: add draw code for native data here
    }

        在这个函数中,首先调用GetDocument函数获取到一个文档指针,从而通过pDoc 访问文档中的数据。

    4、框架窗口类 CMainFrame

        框架窗口类负责管理窗口中的菜单、工具栏、状态栏等。通常在OnCreat函数中创建工具栏、状态栏……代码不再贴出。

    ps. 添加一个事件:“视图”—> “建立类向导”,在弹出的窗口中选择工程、选择类名称,在Messages中选择要添加的消息,选中后点击“Add Function”完成添加, 再点击“Edit Code”进行代码编辑。这里所添加的是消息映射(Message Maps),在Windows编程中,就是所谓的事件。

    作者:独钓寒江
    来源:草屋&拾荒 - 独钓寒江的技术博客
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    2021年9月 北京、西安两地,高薪诚聘 .NET工程师,请私信联系!
    如果认为此文对您有帮助,别忘了支持一下哦!
    声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。转载时请在文章页面明显位置给出原文链接。
  • 相关阅读:
    python接口自动化(二十七) requests-html支持JavaScript渲染页面
    python接口自动化(二十六) requests-html爬虫框架
    python接口自动化(二十五) urlencode编码%E7%94%9F%E6%B4%BB与解码
    python接口自动化(二十四) 参数关联和JSESSIONID(上个接口返回数据作为下个接口请求参数)
    python笔记2--lxml.etree爬取html内容
    python笔记1--lxml.etree解析html
    python接口自动化(二十三) data和json参数传参,怎么区分呢?
    牛客网-用来作弊的药水(快速幂取模)
    牛客网-psd面试(最长公共子序列&回文串)
    牛客网-强迫症的序列(思维)
  • 原文地址:https://www.cnblogs.com/youring2/p/1797010.html
Copyright © 2020-2023  润新知