2. ウィンドウの表示

-節の内容-

MAPILを使ったプログラムの最初の例として、ウィンドウを表示させます。
ウィンドウ表示のためには、1節で紹介したリソースの取得が必要不可欠です。
ここでリソースの取得のソースコードも示すので、是非その流れをつかんでください。


-サンプルコード-

//-----------------------------------------------------
// ファイル名 : main.cpp
// 更新日 : 2011.10.29 (Sat) 9:31
// 作成者 : ぬっち
// 概要 : 「2. ウィンドウの表示」のサンプルファイル。
//-----------------------------------------------------

//-----------------------------------------------------
// インクルード
//-----------------------------------------------------

#include <MAPIL/MAPIL.h>

//-----------------------------------------------------
// メイン関数
//-----------------------------------------------------

int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow )
{
	// MAPILライブラリの機能を使えるようにする。
	using namespace MAPIL;

	// GUIデバイスの作成。
	IGUIDevice guiDev = CreateGUIDevice( GUI_API_WIN32API );

	// GUIファクトリーの作成。
	GUIFactory* pGUIFactory = CreateGUIFactory( guiDev );

	// ウィンドウリソースの取得。
	IWindow window = pGUIFactory->CreateWnd( TSTR( "Window" ) );

	// ウィンドウの作成。
	window->Create( TSTR( "MAPIL Sample" ), 640, 480 );

	// メインループ
	while( !window->ProcessMessage() ){
	}

	// 後始末。
	SafeDelete( pGUIFactory );

	return 0;
}

ソースコード
main.cpp


-サンプルコードの説明-

最初のサンプルの説明となりますので、1つ1つ説明をしていきたいと思います。
最初にinclude文ですが、MAPILライブラリを使用する際、このヘッダファイルを含めれば、MAPILライブラリの全機能を使うことが出来るようになります。
個々のヘッダファイルをインクルードすることはもちろん可能ですが、面倒な人はこれだけで大丈夫です。
続いてメイン関数です。
メイン関数では、mainの代わりに、Win32API特有のWinMainを使用しています。
Win32APIについて詳しく知らない方は、メイン関数をこのように記述すると覚えておけばよいでしょう。
次に、
using namespace MAPIL
により、MAPILが提供する機能に簡単にアクセスできるようにしています。
C++を知っている方は、この記述は問題ないかと思います。
続いて、
IGUIDevice guiDev = CreateGUIDevice( GUI_API_WIN32API );
により、GUIのデバイスを作成しています。
CreateGUIDeviceの引数には、使いたいGUIのAPIを指定します。
Windowで開発される方は、このままでよいでしょう。
GUIFactory* pGUIFactory = CreateGUIFactory( guiDev );
を呼び出すことで、GUIのコンポーネントを作成するアクセス手段を提供する、GUIファクトリーを作成します。
引数には先程作成した、IGUIDevice型のGUIデバイスを渡す必要があります。
得られた、GUIファクトリーから、
IWindow window = pGUIFactory->CreateWnd( TSTR( "Window" ) );
を呼び出すことによって、ウィンドウのリソースをGUIファクトリーから作成することが出来ます。
GUIファクトリーのCreateWndの引数には、そのリソースを識別する文字列を渡します。
文字列は、好きに決めてもらって構いません。
ここでは、Windowとしました。
なおTSTRは、Unicode形式とマルチバイト形式の両方に対応するようにするためのマクロですが、文字形式がわからない方は、このようにすればよいと思っていれば問題ありません。
ウィンドウの作成の手順は、
window->Create( TSTR( "MAPIL Sample" ), 640, 480 );
を呼び出すことによって完了します。
第1引数にウィンドウ名(ウィンドウの左上に表示される名前)を渡し、第2、第3引数にそれぞれ作成するウィンドウの横幅と縦幅をpixel単位で渡します。
以上により、ウィンドウを作成することが出来ますが、現在のままではアプリケーション起動後すぐに終了してしまいますので、無限ループを作ってあげます。
しかしアプリケーションはイベント駆動方式ですので、ただ単に無限ループを作るだけでなく、
window->ProcessMessage()
を毎回呼び出すことで、イベントを取り扱うようにします。
ProcessMessageが0以外を返したら、アプリケーションの終了を意味しているので、whileの条件文では、そのような処理を行っています。
これにより、×ボタンを押すと、正常にアプリケーションが終了するようになります。
最後に、
SafeDelete( pGUIFactory );
を呼び出していますが、GUIファクトリークラスは自動的にメモリ解放を行わないため、この処理により、メモリ解放を行うようにしています。
ウィンドウやデバイスは、自動的にメモリ解放を行うため、このような操作は必要ありません。


-実行結果-

上記のサンプルを実行すると、真っ白なウィンドウが表示されます。
×ボタンを押すことで、プログラムを終わらせることが出来ます。

2節 サンプル 実行結果

inserted by FC2 system