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

更新:2007 年 11 月

无论是将 Visual C++ 用于 Windows CE (Mobile) 及其他移动设备,还是使用嵌入式 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()
    
    
  • 构造代码。有关更多信息,请参见构造函数设计,对于异常处理,请参见Exceptions: Exceptions in Constructors

    // 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::DrawText 方法随后用于在 CWnd::GetClientRect 定义的矩形中绘制“Hello World”文本。

  • BEGIN_MESSAGE_MAP.

  • CDC Class.

  • CWnd::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

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

HelloMFC.h

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

HelloMFC.cpp

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

HelloMFCppc.rc

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

res\HelloMFCppc.rc2

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

HelloMFCsp.rc

项目的主资源文件,其中列出了项目在针对 Smartphone 平台或支持相同用户界面模型的平台进行编译时所使用的全部 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 元素将保留为操作系统的语言。

请参见

概念

智能设备示例