第七章  MFC骨干程序

  所谓骨干程序就是指有AppWizard生成的MFC程序。如下图的层次关系是程序中常用的几个类,一定要熟记于心。

  

  1 Document/View应用程序

  CDocument存放资料内容,CView显示资料,并且负责最资料的编辑、修改。

  有关文件读写的动作在CDocument 的Serialize 函数进行,有关画面显示的动作在CView 的OnDraw 或OnPaint 函数进行。

  程序每打开一份文件(资料),就应该产生三份对象:
    1. 一份Document 对象,
    2. 一份View 对象,
    3. 一份CMDIChildWnd 对象(做为外框窗口)

  Document Template 用来管理上面程序生成的对象。如其中CMultiDocTemplate 的构造式参数如下:

 CMultiDocTemplate::CMultiDocTemplate(UINT nIDResource,      //资源ID
CRuntimeClass* pDocClass, //指向Document 对象
CRuntimeClass* pFrameClass,//指向CMDIChildWnd 对象
CRuntimeClass* pViewClass);//指向View 对象

  字符串资源(string)

  IDR_MAINFRAME   "\nScrib\nScrib\nScribble Files (*.scb)\n.SCB\nScribble.Document\nScrib Document"

  这是一个以'\n'分割的七个子字符串资源。每一个子字符串都可以在程序进行过程中取得,只要调用CDocTemplate::GetDocString 并在其第二参数中指定索引  值(1~7)即可。其中七个子字符串资源意义如下:

  string七个子字符串资源的出现位置如下:

  例子  

    1 主窗口的产生  

  构造MDI 主窗口,有两个步骤。第一个步骤是new 一个CMDIFrameWnd 对象,第二个步骤是调用其LoadFrame 函数。

  2 工具栏和状态列的诞生(Toolbar & Status bar)

  工具栏和状态列分别由CToolBar 和CStatusBar 掌管。两个对象隶属于主窗口,所以可以在CMainFrame中声明两个对象用来表示。

    CStatusBar m_wndStatusBar;
    CToolBar m_wndToolBar;

  然后在主窗口创建的时候初始化 工具栏和状态列,通过Create()与 LoadToolBar()函数以及Create()与 SetIndicators()函数

  3 鼠标拖放(Drag and Drop)

  实现:使用CreateWindowEx()创建窗口并指定第一个风格为WS_EX_ACCEPTFILES的窗口才能接受拖拽文件。在MFC中实现如下:

 BOOL CScribbleApp::InitInstance()
{
...
// Enable drag/drop open
m_pMainWnd->DragAcceptFiles();//愿意接受拖拽文件
// Enable DDE Execute open
EnableShellOpen();//实现双机打开文件
RegisterShellFileTypes(TRUE);//注册文件类型
...
}

  你可以拖拽任何类型的文件,但是只有你指定的才能响应,其他的则不能打开。

  4 消息映射 (Message Map)

  首先你应该在类别声明处加上DECLARE_MESSAGE_MAP 宏, 然后在.CPP 档中使用BEGIN_MESSAGE_MAP 和END_MESSAGE_MAP 两个宏,宏中间夹带  的就是「讯息与函数对映关系」。

  5 标准菜单File / Edit / View / Window / Help

  几乎所有MDI程序都有两组菜单。一组是当没有任何子窗口(文件窗口)存在时出现,另一组则是当有任何子窗口(文件窗口)存在时出现。而后者更加复杂多样,包含所有的文件操作。MFC将很多常用的菜单操作预先定义好了,直接使用就行。

  6 对话框

  每个程序的关于对话框都需要自己改写,加入自己的内容。作者,日期一类的。

MFC深入浅出读书笔记第二部分2的更多相关文章

  1. MFC深入浅出读书笔记第二部分1

    第六章 MFC程序的生死因果 MFC学习过程,这个方法不错,条例清晰. 1.CWinApp  -- 取代WinMain地位 WinMain函数的功能由CWinApp的三个函数实现 virtual BO ...

  2. MFC深入浅出读书笔记第一部分

    最近看侯捷的MFC深入浅出,简单总结一下. 第一章首先就是先了解一下windows程序设计的基础知识,包括win32程序开发基础,什么*.lib,*.h,*.cpp的,程序入口点WinMain函数,窗 ...

  3. MFC深入浅出读书笔记第三部分1

    第八章 Document-View 深入探讨(总结) 1.Document Document 在MFC 的CDocument 里头被具体化.CDocument 本身并无任何具体数据,它只是提供一个空壳 ...

  4. 《javascript权威指南》读书笔记——第二篇

    <javascript权威指南>读书笔记——第二篇 金刚 javascript js javascript权威指南 今天是今年的196天,分享今天的读书笔记. 第2章 词法结构 2.1 字 ...

  5. STL源码分析读书笔记--第二章--空间配置器(allocator)

    声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...

  6. Getting Started With Hazelcast 读书笔记(第二章、第三章)

    第二章 起步 本章就相当简单粗暴了,用一个个例子说明hazelcast怎么用. 1.map,set,list这些集合类都是开箱即用的,只要从Hazelcast的实例中获取一份就行. 2.增加了Mult ...

  7. Java Concurrency in Practice 读书笔记 第二章

    第二章的思维导图(代码迟点补上):

  8. 《疯狂Java:突破程序员基本功的16课》读书笔记-第二章 对象与内存控制

    Java内存管理分为两个方面:内存分配和内存回收.这里的内存分配特指创建Java对象时JVM为该对象在堆内存中所分配的内存空间.内存回收指的是当该Java对象失去引用,变成垃圾时,JVM的垃圾回收机制 ...

  9. Spring 3.x 实践 第一个例子(Spring 3.x 企业应用开发实战读书笔记第二章)

    前言:工作之后一直在搞android,现在需要更多和后台的人员交涉,技术栈不一样,难免鸡同鸭讲,所以稍稍学习下. 这个例子取自于<Spring 3.x 企业应用开发实战>一书中的第二章,I ...

随机推荐

  1. 触发OOM杀掉了mysql

    中午收到反馈平台所有账号全部无法登录,运维就是苦逼,饭都没吃就跑来处理紧急故障,先自己测试了下确实无法登录进系统,登录服务器检查,发现mysql数据库挂掉了,定位到了原因就赶紧重启mysql吧,结果启 ...

  2. 关于wp8.1 runtime模式下面的摄像头调用拍照问题和应用生命周期问题

    现在的msdn文档,还找不到详细的wp8.1的摄像头拍照文档,只有一个序列拍照,类似九连拍的文档,而且这文档感觉就是windows8.1搬过来应付的,wp8.1模式,只要有一个地方处理不好,手机就会死 ...

  3. #linux 命令使用 cp -未完结版

    下载了sublime 解压之后,想把文件夹放到opt目录,这里用命令cp将其复制过来 johnny@johnny-pc:~$ sudo cp -r ~/下载/Sublime_2.0.2 /opt/ [ ...

  4. json字符串转换成对象需要注意的问题

    json转换成对象的时候应该尽量避免出现特殊的符号,如“\”这样的字符在转义成数组的时候会被去除掉,最好的例子就是后台返回的内容为存储路径的JSON,这时候最好是把一个斜杠变为两个斜杠,如: [{&q ...

  5. POJ 2229 Sumsets(递推,找规律)

    构造,递推,因为划分是合并的逆过程,考虑怎么合并. 先把N展开成全部为N个1然后合并,因为和顺序无关,所以只和出现次数有关情况有点多并且为了避免重复,分类,C[i]表示序列中最大的数为2^i时的方案数 ...

  6. hdu-1757 A Simple Math Problem---矩阵快速幂模板题

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1757 题目大意: 求递推式第k项模m If x < 10 f(x) = x.If x > ...

  7. Android(java)学习笔记95:Android运行时异常"Binary XML file line # : Error inflating class"

    在原生Android下编译APK,编译没有问题,但是在运行的时候经常出现如标题所描述的异常:"Binary XML file line # : Error inflating class&q ...

  8. fmt - 简易的文本格式优化工具 simple optimal text formatter

    总览 (SYNOPSIS) ../src/fmt [-DIGITS] [OPTION]... [FILE]... 描述 (DESCRIPTION) 重新 格式化 文件 FILE(s) 中的 每一个 段 ...

  9. 2018.6.20 Java考试试题总结(Java语言基础与面向对象编程)最新版

    Java考试试题总结 一.单选题(每题1分 * 50 = 50分) 1.java程序的执行过程中用到一套JDK工具,其中javac.exe指( B ) A.java语言解释器 B.java字节码编译器 ...

  10. 2018.5.19 Oracle数据操作和管理表的综合练习

    --作业一.使用自己的用户登录,完成如下操作,并且创建5条测试数据 -- 创建学生表(stu),字段如下: -- 学号(stuID) -- 姓名(stuName) -- 性别(stuSex) -- 入 ...