MFC深入浅出读书笔记第二部分2
第七章 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的更多相关文章
- MFC深入浅出读书笔记第二部分1
第六章 MFC程序的生死因果 MFC学习过程,这个方法不错,条例清晰. 1.CWinApp -- 取代WinMain地位 WinMain函数的功能由CWinApp的三个函数实现 virtual BO ...
- MFC深入浅出读书笔记第一部分
最近看侯捷的MFC深入浅出,简单总结一下. 第一章首先就是先了解一下windows程序设计的基础知识,包括win32程序开发基础,什么*.lib,*.h,*.cpp的,程序入口点WinMain函数,窗 ...
- MFC深入浅出读书笔记第三部分1
第八章 Document-View 深入探讨(总结) 1.Document Document 在MFC 的CDocument 里头被具体化.CDocument 本身并无任何具体数据,它只是提供一个空壳 ...
- 《javascript权威指南》读书笔记——第二篇
<javascript权威指南>读书笔记——第二篇 金刚 javascript js javascript权威指南 今天是今年的196天,分享今天的读书笔记. 第2章 词法结构 2.1 字 ...
- STL源码分析读书笔记--第二章--空间配置器(allocator)
声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...
- Getting Started With Hazelcast 读书笔记(第二章、第三章)
第二章 起步 本章就相当简单粗暴了,用一个个例子说明hazelcast怎么用. 1.map,set,list这些集合类都是开箱即用的,只要从Hazelcast的实例中获取一份就行. 2.增加了Mult ...
- Java Concurrency in Practice 读书笔记 第二章
第二章的思维导图(代码迟点补上):
- 《疯狂Java:突破程序员基本功的16课》读书笔记-第二章 对象与内存控制
Java内存管理分为两个方面:内存分配和内存回收.这里的内存分配特指创建Java对象时JVM为该对象在堆内存中所分配的内存空间.内存回收指的是当该Java对象失去引用,变成垃圾时,JVM的垃圾回收机制 ...
- Spring 3.x 实践 第一个例子(Spring 3.x 企业应用开发实战读书笔记第二章)
前言:工作之后一直在搞android,现在需要更多和后台的人员交涉,技术栈不一样,难免鸡同鸭讲,所以稍稍学习下. 这个例子取自于<Spring 3.x 企业应用开发实战>一书中的第二章,I ...
随机推荐
- C#值类型、引用类型的区别
在<C#类型简述>http://blog.csdn.net/letnet1981/article/details/48223831,中提到了值类型和引用类型,这里我们就来了解一下它们的区别 ...
- 查看mysql表大小
//先进去MySQL自带管理库:information_schema //自己的数据库:dbwww58com_kuchecarlib //自己的表:t_carmodelparamvalue mysql ...
- ASP.NET的三种开发模式
前言 ASP.NET 是一个免费的Web开发框架,是由微软在.NET Framework框架中所提供的,或者说ASP.NET是开发Web应用程序的类库,封装在System.Web.dll 文件中.AS ...
- HDU 1114 Piggy-Bank 猪仔储钱罐(完全背包)
题意: 给定一个存钱罐中要存硬币,知道空罐的重量和欲装满的重量,是否能装入?若能,打印最小价值.(注:能装的硬币重量一定刚刚好,里面的总价值要达到最小) 输入: 包含了T个测试例子,在第一行给出.接下 ...
- [转]超全!iOS 面试题汇总
转自:http://www.cocoachina.com/programmer/20151019/13746.html 1. Object-c的类可以多重继承么?可以实现多个接口么?Category是 ...
- HDU5171 矩阵快速幂
题目描述:http://acm.hdu.edu.cn/showproblem.php?pid=5171 算法: 可以先将数组a[]排序,然后序列 a1 , a2 , … , an 即为有序序列,则第一 ...
- linux 命令——41 ps(转)
Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...
- <已解决> Eclipse启动失败
参考:http://stackoverflow.com/questions/15404964/starting-eclipse-results-in-failed-to-create-java-vir ...
- OO第四单元总结
单元架构设计 本单元OO作业主要涉及两个过程,即先根据输入的elements数组建立UML存储模型,而后基于这个模型实现一系列查询判断功能.汲取上单元的经验,建模过程中模型数据容器的选择依据要求实现的 ...
- Java Web Application使Session永不失效(利用cookie隐藏登录)
在做 Web Application 时,因为 Web Project 有 session 自动失效的问题,所以如何让用户登录一次系统就能长时间运行三个月,就是个问题. 后来,看到 session 失 ...