Поделиться через


Описание кода: Hello World. Многоплатформенное приложение MFC для смарт-устройств

Обновлен: Ноябрь 2007

При использовании как Visual C++ для мобильных устройств, работающих под управлением Windows CE (Mobile) и других операционных систем, так и embedded Visual C++ для разработки приложений устройств, мастер многоплатформенных приложений MFC для смарт-устройств на языке C++ упрощает большинство рутинных задач по созданию файлов проекта. Некоторые из файлов включают файлы ресурсов и файлы конфигурации многоплатформенного проекта. Так как мастер также представляет код начального приложения, можно уделить больше внимания разработке ключевых функций бизнес-приложения.

Так как это пошаговое руководство предназначено для ознакомления с кодом, который автоматически создается при использовании мастера многоплатформенных элементов управления ActiveX MFC для смарт-устройств, можно без труда расширять и изменять приложения для нужд разработчика.

Дополнительные сведения см. в разделах Пошаговое руководство. Создание многоплатформенного приложения MFC для смарт-устройств, Справочник по библиотеке MFC для устройств и MFC Reference.

Листинг кода для многоплатформенного приложения MFC для смарт-устройств C++

Код, созданный мастером, включает следующее:

  • Раздел 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 используется для отрисовки текста "Hello World" в прямоугольнике, определенном в CWnd::GetClientRect.

  • 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
    
    

Сведения, доступные в файле Readme, созданном мастером

Мастер приложения создает для разработчика это приложение MFCHello1. Это приложение не только демонстрирует основные принципы использования классов MFC, но и будет являться отправной точкой для написания собственного приложения.

Здесь отображаются созданные файлы вместе со сведениями о том, что находится в каждом файле. Вместе эти файлы составляют отправную точку для разработки собственных приложений MFC.

В этом примере используется имя HelloMFC. Может понадобиться использовать другое имя для этого проекта.

HelloMFC.vcproj

Основной файл проекта для проектов Visual C++ создан с помощью мастера приложений. В нем содержатся сведения о версии Visual C++, которая использовалась для создания файла, а также сведения о платформах, конфигурациях и функциональных возможностях проекта, выбранных в мастере приложений.

HelloMFC.h

Основной файл заголовка для приложения. В нем содержатся другие заголовки проекта и объявляется класс приложения CMFCHello1App.

HelloMFC.cpp

Основной исходный файл приложения содержит определение класса для класса приложения CMFCHello1App.

HelloMFCppc.rc

Листинг основного файла ресурсов Microsoft Windows проекта, которые используются проектом при компиляции для платформы Pocket PC или для платформы, которая поддерживает ту же модель пользовательского интерфейса. Сюда включены значки, растровые изображения и курсоры, которые хранятся в подкаталоге RES. Этот файл может быть изменен напрямую в Microsoft Visual C++. Ресурсы проекта в 1033. Если RC-файл сохранен, экземпляры, в разделе данных хранятся как шестнадцатеричные версии определенных для них числовых значений, а не как понятные имена определений.

res\HelloMFCppc.rc2

Файл, который содержит ресурсы, не изменяемые в Microsoft Visual C++. В этом файле необходимо разместить все ресурсы, которые не могут быть изменены с помощью редактора ресурсов.

HelloMFCsp.rc

Листинг основного файла ресурсов Microsoft Windows проекта, которые используются проектом при компиляции для платформы Smartphone или для платформы, которая поддерживает ту же модель пользовательского интерфейса. Сюда включены значки, растровые изображения и курсоры, которые хранятся в подкаталоге RES. Этот файл может быть изменен напрямую в Microsoft Visual C++. Ресурсы проекта в 1033. Если RC-файл сохранен, экземпляры, в разделе данных хранятся как шестнадцатеричные версии определенных для них числовых значений, а не как понятные имена определений.

res\HelloMFCsp.rc2

Файл, который содержит ресурсы, не изменяемые в Microsoft Visual C++. В этом файле необходимо разместить все ресурсы, которые не могут быть изменены с помощью редактора ресурсов.

res\HelloMFC.ico

Файл значков, используемый в качестве значка приложения. Этот значок включен в основной файл ресурсов.

MainFrm.h, MainFrm.cpp

Файлы, которые содержат класс frame под названием CMainFrame, который является производным из класса CFrameWnd и контролирует все функциональные возможности frame SDI.

Мастер приложений также создает один тип документа MFC и одно представление MFC:

  • HelloMFCDoc.h, HelloMFCDoc.cpp

    Файлы, которые содержат класс HelloMFCDoc. Измените эти файлы для добавления специальных данных документа и реализации сохранения и загрузки файлов (с помощью CMFCHello1Doc::Serialize).

  • HelloMFCView.h, HelloMFCView.cpp

    Файлы, которые содержат класс HelloMFCView. Объекты HelloMFCView используются для просмотра объектов HelloMFCDoc.

StdAfx.h, StdAfx.cpp

Файлы, используемые для построения предварительно скомпилированного файла заголовка (PCH), который называется HelloMFC.pch, и предварительно скомпилированный файл типов, который называется StdAfx.obj.

Resourceppc.h и Resourcesp.h

Стандартный файл заголовка, который определяет новые идентификаторы ресурсов. Microsoft Visual C++ считывает и обновляет этот файл.

Мастер приложений использует TODO: для указания частей исходного кода. которые можно добавить или настроить.

Если в приложении классы MFC используются в общей библиотеке DLL и в приложении используется язык, отличный от текущего языка операционной системы, может понадобиться скопировать соответствующую локализованную библиотеку ресурсов MFC80XXX.DLL в каталог приложения. В этом имени "XXX" означает аббревиатуру языка. Например, MFC80DEU.DLL содержит ресурсы, переведенные на немецкий язык. В противном случае, некоторые элементы пользовательского интерфейса будут отображаться на языке операционной системы.

См. также

Основные понятия

Примеры смарт-устройств