zoukankan      html  css  js  c++  java
  • MFC深入浅出读书笔记第二部分2

    第七章  MFC骨干程序

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

      

      1 Document/View应用程序

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

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

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

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

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

      字符串资源(string)

      IDR_MAINFRAME   " Scrib Scrib Scribble Files (*.scb) .SCB Scribble.Document Scrib Document"

      这是一个以' '分割的七个子字符串资源。每一个子字符串都可以在程序进行过程中取得,只要调用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中实现如下:

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

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

      4 消息映射 (Message Map)

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

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

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

      6 对话框

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

  • 相关阅读:
    《原創》實現禁止 WTL CTabView 中標籤的拖曳行為。 (Disable Dragging Operation of CTabView)
    《轉貼》ATL NTService 運作流程
    《轉貼》WTL 之 m_hWndMDIClient
    《原創》加強版的 C++ 字串型別
    《原創》建立最基礎的 Irrlicht 3D 引擎的應用框架。(for vc2008)
    《轉貼》關於 ios::app 與 ios::ate 簡易說明
    《轉貼》WTL for MFC programmer 系列文章
    《轉貼》以Virtual Inheritance及Template讓C++能實現C#中的sealed
    Oracle学习笔记(concat和substr)
    Oralce学习笔记(sql取一张表的数据插入另一张表)
  • 原文地址:https://www.cnblogs.com/songliquan/p/3282893.html
Copyright © 2011-2022 走看看