コードの説明 : Hello World: スマート デバイス用マルチプラットフォーム MFC アプリケーション
更新 : 2007 年 11 月
Visual C++ を使用して Windows CE (Mobile) やその他のモバイル デバイスを対象とする場合でも、eMbedded Visual C++ を使用してデバイス アプリケーションを開発する場合でも、C++ スマート デバイス用マルチプラットフォーム MFC アプリケーション ウィザードを使用することで、プロジェクト ファイルを生成するための日常的タスクの大部分を簡略化できます。このようなファイルの中には、リソース ファイルとマルチプラットフォーム プロジェクト構成ファイルが含まれます。このウィザードにより、すぐに使用できるコードが生成されるので、中核となるビジネス アプリケーション機能の開発に集中できます。
このチュートリアルでは、スマート デバイス用マルチプラットフォーム MFC アプリケーション ウィザードによって自動生成されるコードについて説明します。これにより、必要に応じてアプリケーションを簡単に拡張したり修正したりできるようになります。
詳細については、「チュートリアル : スマート デバイス用マルチプラットフォーム MFC アプリケーションの作成」、「デバイス用の MFC リファレンス」、および「MFC リファレンス」を参照してください。
スマート デバイスの 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()
構築用コード。詳細については「コンストラクタのデザイン」を、例外処理については「例外処理 : コンストラクタの例外処理」を参照してください。
// 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: Graphical Device Interface) を制御できます (コード内の CDC* pDC)。忘れずにコメントから外してください。たとえば、アプリケーション内のアニメーション ゲームのテキストから描画グラフィックスにいたるまで、あらゆるものに GDI を活用できます。この GDI サンプルでは、CDC::DrawText メソッドを使用して、CWnd::GetClientRect で定義された四角形の中に "Hello World" というテキストを描画します。
-
// 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 クラス」を参照してください。
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 アプリケーションが作成されます。このアプリケーションは、Microsoft Foundation Class の基本的な使用方法を示すだけでなく、独自のアプリケーションを作成するための開始点にもなります。
ここでは、ウィザードで生成されるファイルの一覧を示し、各ファイルの概要を説明します。これらのファイルを開始点として、MFC アプリケーションを簡単に開発できます。
ここでは HelloMFC という名前を例として使用します。実際のプロジェクト名に置き換えて読んでください。
HelloMFC.vcproj
アプリケーション ウィザードで生成される Visual C++ プロジェクトの主要なプロジェクト ファイル。ファイルを生成した Visual C++ のバージョン情報と、アプリケーション ウィザードで選択したプラットフォーム、構成、およびプロジェクトの機能に関する情報が記述されています。
HelloMFC.h
アプリケーションのメイン ヘッダー ファイルです。その他のプロジェクト固有のヘッダーを含んでおり、CMFCHello1App アプリケーション クラスを宣言しています。
HelloMFC.cpp
アプリケーションのメイン ソース ファイルです。CMFCHello1App アプリケーション クラスのクラス定義を含みます。
HelloMFCppc.rc
プロジェクトのメイン リソース ファイル。Pocket PC プラットフォームや、同じユーザー インターフェイス モデルをサポートするプラットフォーム用のコンパイル時にプロジェクトによって使用される、すべての Microsoft Windows リソースの一覧です。RES サブディレクトリに格納されているアイコン、ビットマップ、カーソルを含みます。このファイルは、Microsoft Visual C++ 内で直接編集できます。プロジェクト リソースは 1033 に格納されます。.rc ファイルを保存すると、データ セクション内の定義が、定義の表示名ではなく、定義済みの 16 進数値のバージョンで保存されます。
res\HelloMFCppc.rc2
Microsoft Visual C++ で編集されないリソースを含むファイル。リソース エディタで編集できないリソースはすべてこのファイルに収めます。
HelloMFCsp.rc
プロジェクトのメイン リソース ファイル。Smartphone プラットフォームや、同じユーザー インターフェイス モデルをサポートするプラットフォーム用のコンパイル時にプロジェクトによって使用される、すべての Microsoft Windows リソースの一覧です。RES サブディレクトリに格納されているアイコン、ビットマップ、カーソルを含みます。このファイルは、Microsoft Visual C++ 内で直接編集できます。プロジェクト リソースは 1033 に格納されます。.rc ファイルを保存すると、データ セクション内の定義が、定義の表示名ではなく、定義済みの 16 進数値のバージョンで保存されます。
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 要素の一部が、オペレーティング システムの言語のまま残されることがあります。