代码解释:智能设备的多平台 MFC 应用程序

来源:互联网 发布:ps淘宝详情页视频 编辑:程序博客网 时间:2024/05/02 12:19

无论是将 Visual Studio C++ 用于 Windows CE(移动)及其他流行的移动设备,还是使用嵌入式 Visual C++ 开发设备应用程序,您将发现针对智能设备的 C++ 多平台 MFC 应用程序向导可简化生成项目文件所需的大多数常见任务。某些文件包括资源文件及多平台项目配置文件。该向导还引入了 jumpstart 代码,使您能够专注于开发核心业务应用程序功能。

此演练帮助您熟悉由针对智能设备的多平台 MFC 应用程序向导自动生成的代码,这样您便能根据需要对应用程序进行轻松扩展和修改。

有关更多信息,请参见演练:为智能设备创建多平台 MFC 应用程序设备的 MFC 参考MFC Reference

智能设备 C++ 的多平台 MFC 应用程序代码清单

向导生成的代码包括以下部分:

  • include 部分。

    复制
    #include "stdafx.h"
  • stdafx.h。有关更多信息,请参见预编译头文件

    复制
    #include "MFCHello1.h"
    #include "MFCHello1Doc.h"
    #include "MFCHello1View.h"
  • // 调试配置。

    复制
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif

    IMPLEMENT_DYNCREATE(CMFCHello1View, CView)
  • MFC 消息映射和更具体的信息 BEGIN_MESSAGE_MAP

  • IMPLEMENT_DYNCREATE,请参见 IMPLEMENT_DYNCREATE

    复制
    BEGIN_MESSAGE_MAP(CMFCHello1View, CView)
    END_MESSAGE_MAP()
  • 构造代码。有关更多信息,请参见构造函数设计。有关异常处理,请参见 Handling Exceptions(处理异常)

    复制
    // CMFCHello1View construction/destruction
    CMFCHello1View::CMFCHello1View()
    {
    // TODO: add construction code here.
    }
    CMFCHello1View::~CMFCHello1View()
    {
    }
  • MFC PreCreateWindow

    复制
    BOOL CMFCHello1View::PreCreateWindow(CREATESTRUCT& cs)
    {
    // TODO: Modify the Window class or styles here by modifying
    // the CREATESTRUCT cs.

    return CView::PreCreateWindow(cs);
    }
  • 请记住,使用 CView::OnDraw 方法时,在屏幕上绘图(屏幕绘制)。使用该方法,您可以控制图形设备接口 (GDI),即通过作为参数提供的代码 CDC* pDC。切勿忘记取消对该代码的注释。例如,您可以在应用程序中为各项内容使用从文本到绘制动画游戏中的图形的全部 GDI 功能。在此 GDI 示例中,CDC::DrawTextCDC::DrawText 方法随后用于在由 CWnd::GetClientRect 定义的矩形内绘制 Hello World 文本。

  • BEGIN_MESSAGE_MAP.

  • CDC 类.

  • GetClientRect.

    复制
    // CMFCHello1View drawing
    void CMFCHello1View::OnDraw(CDC* pDC)
    {
    CMFCHello1Doc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);

    // TODO: add draw code for native data here.
    CRect rect;
    GetClientRect(&rect);
    // Length and string to draw are hard coded for simplicity of
    // example.
  • DrawText 及其他相关方法。有关更多信息,请参见 CDC Class

    复制
    pDC->DrawTextW(_T("Hello World"),11, &rect,1);
    // nCount ( set to 11) can be a –1, then
    //lpszString is assumed to be
    // a long pointer to a null-terminated string
    // and DrawText method automatically
    // computes the character count.
    }
    // CMFCHello1View diagnostics
    #ifdef _DEBUG
    void CMFCHello1View::AssertValid() const
    {
    CView::AssertValid();
    }
    #ifndef _WIN32_WCE
    void CMFCHello1View::Dump(CDumpContext& dc) const
    {
    CView::Dump(dc);
    }
    #endif // !_WIN32_WCE
    CMFCHello1Doc* CMFCHello1View::GetDocument() const
    // non-debug version is inline
    {
    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMFCHello1Doc)));
    return (CMFCHello1Doc*)m_pDocument;
    }
    #endif //_DEBUG
    // CMFCHello1View message handlers

由向导创建的自述文件中的可用信息

该应用程序向导已为您创建此 MFCHello1 应用程序。此应用程序不仅演示了使用 Microsoft 基础类的基本知识,而且还可作为编写应用程序的起点。

此处列出了生成的文件,以及每个文件中发现的内容摘要。这些文件共同构成 MFC 应用程序开发的 jumpstart 点。

一个示例使用了名称 HelloMFC。您可能想要使用自己的项目名称。

HelloMFC.vcproj

使用应用程序向导生成的 VC++ 项目的主项目文件。它包含生成文件的 Visual C++ 版本信息,以及有关用应用程序向导选择的平台、配置和项目功能的信息。

HelloMFC.h

应用程序的主头文件。它包括其他特定于项目的头文件,并声明 CMFCHello1App 应用程序类。

HelloMFC.cpp

应用程序的主源文件,该文件包含应用程序类 CMFCHello1App 的类定义。

HelloMFCppc.rc

当编译用于 Pocket PC platform 或支持同一用户界面模型的平台时,该项目使用的项目的所有 Microsoft Windows 资源的主资源文件列表。它包括存储在 RES 子目录中的图标、位图和光标。此文件可以直接在 Microsoft Visual C++ 中编辑。项目资源位于 2052。如果保留 .rc 文件,数据节中的定义将保留为它们所定义为的数值的十六进制版本,而不是定义的友好名称。

res/HelloMFCppc.rc2

此文件包含不是由 Microsoft Visual C++ 编辑的资源。您应将所有不可由此资源编辑器编辑的资源放置在此文件中。

HelloMFCsp.rc

当编译用于 Smartphone platform 或支持同一用户界面模型的平台时,该项目使用的项目的所有 Microsoft Windows 资源的主资源文件列表。它包括存储在 RES 子目录中的图标、位图和光标。此文件可以直接在 Microsoft Visual C++ 中编辑。项目资源位于 2052。如果保留 .rc 文件,数据节中的定义将保留为它们所定义为的数值的十六进制版本,而不是定义的友好名称。

res/HelloMFCsp.rc2

此文件包含不是由 Microsoft Visual C++ 编辑的资源。您应将所有不可由此资源编辑器编辑的资源放置在此文件中。

res/HelloMFC.ico

一个图标文件,用作应用程序的图标。此图标包含在主资源文件中。

MainFrm.h、MainFrm.cpp

包含框架类 CMainFrame 的文件,这些类从 CFrameWnd 派生,并控制所有的 SDI 框架功能。

应用程序向导还创建一个 MFC 文档类型和一个 MFC 视图:

  • HelloMFCDoc.h、HelloMFCDoc.cpp

    包含 HelloMFCDoc 类的文件。编辑这些文件,以添加特殊的文档数据,并实现文件保存和加载(使用 CMFCHello1Doc::Serialize)。

  • HelloMFCView.h、HelloMFCView.cpp

    包含 HelloMFCView 类的文件。HelloMFCView 对象用以查看 HelloMFCDoc 对象。

StdAfx.h、StdAfx.cpp

这两个文件用于生成名为 HelloMFC.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。

Resourceppc.h 和 Resourcesp.h

标准头文件,用于定义新的资源 ID。Microsoft Visual C++ 读取并更新此文件。

该应用程序向导使用 TODO: 指示可以添加到或自定义的源代码部分。

如果应用程序在共享 DLL 中使用 MFC,且应用程序使用的语言与操作系统的当前语言不同,则可能需要将相应本地化资源的 MFC80XXX.DLL 复制到应用程序的目录中。在此名称中,“XXX”代表语言缩写。例如,MFC80DEU.DLL 包含已翻译为德语的资源。否则,应用程序的某些 UI 元素将保留为操作系统的语言。

VS2005的菜单编辑器就是这样设计的,也就是在菜单编辑器中编辑的只是菜单的内容,这些内容是保存在rc文件中的,而菜单条是作为RCDATA保存在rc2资源文件中。在WM5.0中,无论是ppc中的菜单还是sp中的菜单,都是一样的,即支持左右软键,左右软键分别可以弹出一个菜单。所以,微软认为这个东西不是菜单,是工具条,而真正的菜单是左右软键弹出的那个东西。所以,在菜单编辑器中编辑的是左右软键弹出的菜单,而在rc2文件中保存的是工具条的定义。


Mobile的工具条和菜单两者是分开来定义的,一个定义工具条(rc2),一个定义菜单(rc),所以在VS2005中除了(EVC4.0好像可以自动创建)新增菜单外,还要手动创建rc2文件,如果采用MFC工程,那么rc2是工程自动产生,否则就要自己创建rc2文件。