2009年05月15日

第0x01回 "Window"sの基本はWindowから

Windowsでは、たくさんのウィンドウを表示し様々な処理を行います。
どのアプリケーションでも例外なく(※1)、ウィンドウを表示します。

そこで、まずはウィンドウを表示するところから、始めていく事にしましょう。

Windowsでは、ウィンドウの表示を行うために、『Win32API』と呼ばれる
ライブラリを用います。

Win32APIとは、プログラムからWindowsに対する要求を一手に担ってくれる
橋渡し的な存在で、これによりプログラマはWindowsの中身を知ることなく
プログラミングを行うことができます。

Win32APIでは、ウィンドウ表示の他に、メニューや画像などの描画、印刷、
マルチスレッドやプロセス生成といったことまで行うことができます。

(※1)
例外はあります。タスクに常駐するアプリケーションや、
そもそもウィンドウを持たないアプリケーションです。
実装にもよりますが、大抵はウィンドウをHide(隠す)ことにより、
ウィンドウがないアプリケーションを実現しています。

では、早速ウィンドウを表示するサンプルプログラムです。

sample001.cpp(ソースコードのみ)
sample001.zip(VS.NET 2008プロジェクト)


重要となる部分を説明していきます。


#include <windows.h>


Windowsのプログラムを作成するにあたり、windows.hは必須となるヘッダファイルです。
このヘッダの中に、Windowsプログラムに必要な定義が行われています。


int WINAPI WinMain( HINSTANCE   hInstance ,
HINSTANCE hPrevInstance ,
LPSTR lpCmdLine ,
int nCmdShow )


これは、C言語のコンソールプログラムにおけるmain()にあたる、プログラムのエントリーポイントになります。

第1引数でアプリケーションのインスタンスが渡されます。
これはアプリケーションをユニークに指定するために必要で、時折Win32API側でアプリケーションを特定するために必要とされます。

第4引数でウィンドウの表示設定が渡されます。
この表示設定とは、Windowsの実行ファイルのプロパティに設定されている、実行するときに「最大化で起動する」「最小化で起動する」などの設定が渡されます。
この値を用いて、要求どおりにShowWindow()するのが、Windowsでの行儀よいプログラムと言えます。



if( !RegisterClassEx( &wcl ) )
return -1; // 失敗


この部分でウィンドウクラスを登録します。
ウィンドウクラスとは、ウィンドウの概観を決めたテンプレートのようなもので、
後のウィンドウ作成時に、このテンプレートを指定することにより、ウィンドウを作成することができます。
ウィンドウクラスは使いまわしすることができるので、同じ概観のウィンドウを複数表示したい場合、
同じウィンドウクラスを指定することで同様のウィンドウを作成することもできます。



hWnd = CreateWindow(APP_NAME ,
APP_NAME ,
WS_OVERLAPPEDWINDOW ,
0 , 0 ,
200 , 150 ,
NULL ,
NULL ,
hInstance ,
0 );


この関数は、実際にウィンドウの作成を行います。
第3引数のスタイルには次のようなものがあります。

WS_CAPTION  	タイトルバーを持つウィンドウを作成します。
WS_MAXIMIZEBOX 最大化ボタンを持つウィンドウを作成します。
WS_MINIMIZEBOX 最小化ボタンを持つウィンドウを作成します。
WS_SYSMENU タイトルバーの中にコントロールメニューを持つウィンドウを作成します。必ずWS_CAPTIONスタイルを付けて指定します。
WS_HSCROLL 水平スクロールバーを持つウィンドウを作成します。
WS_VSCROLL 垂直スクロールバーを持つウィンドウを作成します。


複数指定するには、 WS_MINIMIZEBOX | WS_SYSMENU などと、or演算子を使ってつなげます。

CreateWindow()の戻り値として、HWNDが返ってきます。
これはウィンドウハンドルで、HWNDの実体は4バイトの整数値です。
Win32APIでは、時折ハンドルを返し、Windows内部をいじることなく操作させることがあります。
ハンドルとは、車などのハンドル、操作するものという意味合いです。
ポインタと似たようなイメージです。


ShowWindow( hWnd , nCmdShow );


ウィンドウは、作成しただけでは表示されません。
実際に表示を行うためには、上記の関数を呼び出し、ウィンドウの表示状態を変更しなければなりません。
ウィンドウを最大化、最小化などの状態にするのも、このShowWindow()を使用します。


この一連の操作を行うことに晴れてウィンドウを表示できるようになりました。
後半のメッセージ処理については、次回に説明したいと思います。

ちなみに、これらのWin32APIの関数仕様については、マイクロソフト社の公開しているMSDNで確認することができます。
細かい仕様などについて、調べたい場合に利用することをお勧めします。

MSDNホーム
http://msdn.microsoft.com/ja-jp/default.aspx


ラベル:ふわ猫
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。