第七章  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. fastjson解析json数组

    1.fastjson解析json数组(直接上代码) import java.util.ArrayList; import java.util.List; import com.alibaba.fast ...

  2. HDU 3351 Seinfeld 宋飞正传(水)

    题意: 给出一个串,串内只有大括号,问经过几次改变可使全部括号合法?改变指的是可以将某一方向的括号变成另一方向. 思路: 利用栈的特点,若出现成对的合法括号,直接删掉,留下那些不合法的成为一串.既然不 ...

  3. VMware安装win7系统

    1.创建一个虚拟机 2.配置iso映射文件   3.设置boot设置第一启动为cd   4.快速分区后重启电脑,然后选择[A]安装win7.  重启电脑后安装win7系统   搞定...  

  4. fiddle连接终端测试配置

    第一次做app,对app的数据要进行一些数据抓包和数据分析,知道客户端发送到服务器端的过程和逻辑,通过抓包了解和分析出错,前提要先连接fiddle

  5. appium---adb通过wifi连接手机

    前几天接到领导的安排,想要测试下apk的耗电量,可以通过手机adb命令进行监控手机电量的变化:但是这样如果通过USB连接手机的话,USB就会自动给手机进行充电,无法达到我们想要的结果,于是想到了通过w ...

  6. VC-基础-WebBrowser控件中弹出新网页窗口

    用webbrowser控件浏览网页时,常弹出新的网页窗口,若不做任何控制的话,会在默认浏览器(一般是IE)中打开,这样就在新的窗口打开了,原程序就很难控制了,且存在webbrowser控件和IE的se ...

  7. 通过cmd查看环境变量名对应的环境变量值

    在VS环境中通常要添加路径,不过基本都是按照往上提供的方法添加变量名形如:$(VC_IncludePath),但是如何通过cmd命令找到真正的路径呢 未完待续……

  8. java基础编程——获取栈中的最小元素

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)).   题目代码 /** * Created by YuKai Fan on 2018/9 ...

  9. c++ 软件下载 Dev cpp下载

    下载地址: 链接: https://pan.baidu.com/s/1hsiWQPY 密码: bdpn

  10. 牛客小白月赛5 I 区间 (interval) 【前缀和】

    链接:https://www.nowcoder.com/acm/contest/135/I 题目描述 Apojacsleam喜欢数组. 他现在有一个n个元素的数组a,而他要对a[L]-a[R]进行M次 ...