WindowsAPI


さてさて、メッセージを表示しただけじゃ話にならないね。
ウインドウを出してなんぼです。
と!いうことで今回はウインドウを作成します。

〜ウインドウを作る〜

ウインドウを作る関数 CreateWindow 関数があるので、それを使うだけです。
文字を出すにはprintf()だったでしょ?
あれと同じように、ウインドウを作りたければCreateWindow関数を使えばいいんです。

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance,
			HINSTANCE hPrevInstance,
			PSTR lpCmdLine,
			int nCmdShow){

	HWND hwnd;

	hwnd = CreateWindow(TEXT("STATIC") , TEXT("こんちは世界!") ,
						WS_OVERLAPPEDWINDOW |WS_VISIBLE ,
						200 , 200 , 200 , 200 , NULL , NULL ,hInstance , NULL);
	
	MessageBox(hwnd,TEXT("OK?"),TEXT("OK?"),MB_OK);

	return 0;
}

大切なのはCreateWindow関数です。
これがウインドウを作ってくれるよう頼む関数なわけです。引数にはどういうウインドウを作るのかを書きます。
横長なのか、どのへんに表示するのかとか。そういったことです。

引数の( あっ細かく読まなくていいよ。順番に覚えていこう。 )

   1つ目はウインドウのクラスです。クラスって言っても今はわけわかんないかもしれません。
      最初っからウインドウズにはいくつかウインドウが用意されています。
      STATICって言うのはベタなウインドウです。今回はただウインドウを出したいだけなのでこれを選びました

   2つ目はウインドウの名前。タイトルバーにこれが表示されたりします。

   3つ目はウインドウの種類や状態を選ぶもの。 今 WS_OVERLAPPEDWINDOW と WS_VISIBLE が選ばれています
      or( | ) で沢山のものを選ぶことができます。
      OVERLAPPEDWINDOW はいくつかのウインドウスタイルのパッケージで 最大化やサイズ変更ができるウインドウの一般的な機能を持ってます。
      VISIBLE というのは作られた段階で目に見える状態にする っていみです。 これをつけないと目に見えないウインドウができちゃいます。

   4、5つ目は スクリーン上でのウインドウの位置。ウインドウの左上がスクリーンのどこなのかを示します。0,0ってやったら
      画面の左上にぴったりくっついた状態で現れるはずです。

   6、7つ目はウインドウのサイズです。正確にはウインドウと言うより 白いキャンパスであるクライアント領域のサイズです。
      200,300ってやれば 横200縦300のクライアント領域が作られ、それにタイトルバーや他のボタンがくっついてきます。

   8つ目は親ウインドウの指定です。後々紹介。今回はNULL

   9つ目はメニューの指定です。これも後々。今回はNULL

   10つ目はインスタンスハンドルを指定します。インスタンスハンドルってのは簡単に言うとソフトを管理する番号です。
      WinMainの1つ目の引数になっていますね?実行したときに「君は○○番ね」と言われるわけです。
      このプログラムでウインドウを作るんだから、このウインドウはこのプログラムのものです って宣言するわけです。

   11つ目は・・・NULLでいいよ。今は。

と、られつしましたけど。基本的に自分が選ぶのは。
1、ウインドウのクラス
2、ウインドウの名前
3、ウインドウのスタイル
4、ウインドウの位置とサイズ

この4つです。簡単でしょう?
実行するとこんなのが出てきますね。

ウインドウを作ることができました!!
世界に初めて出てきた僕のウインドウ!
おめでとうございます。元気な男の子です。

えっ?MessageBoxが邪魔だって?
だってこれがないとウインドウ作った後、すぐにreturn に行ってしまってプログラムが終了しちゃうんだもん。
でも本当はこれですらよくないプログラムなんです。
本当は作ったウインドウはちゃんと破棄してからプログラムを終了しなきゃいけないんだけど。
このプログラムでは破棄をしていない。
この辺は次回あたりへ持ち越しです。
とりあえずウインドウが作れた。

〜HWND〜

HWND って変な型がありますね?
これはウインドウのハンドルを保存するための型です。
ハンドルってのは・・・ん〜 なんていえばいいのかな
ポインタみたいなものです。識別番号?出席番号?
このウインドウをウインドウ番号を保存するもの って感じでしょうか。

例えばウインドウを2個作って文字を表示するとして どっちに表示するのかどうやって指定すると思う?
ウインドウを指定するために使うのがウインドウハンドルでそれを保存するのがHWND型です。
hwnd = CreateWindow()
ってなってますね。
ウインドウを作るのに成功したら そのウインドウのハンドルがHWND型の変数hwndに入ります。
これで、今後このウインドウに文字を出そうと思ったらhwndを指定してやれば
「ああ、このウインドウね」って区別することができるでしょ?

ちなみに HWND ってのは 「ハンドルだよ!ウインドウの!」ってことで HWND(Handle WiNDow)みたいな感じです。
ウインドウズが提供するこのいろいろな型は、見慣れると法則があるのです(ハンガリー記法だっけな?)
じゃあ WinMain関数の HINSTANCEは?もう どういう意味なのかなんとなくわかるはず。

 

まとめ

HWND CreateWindow(クラス、名前、スタイル、位置x、位置y、サイズx、サイズy、親ウインドウハンドル、メニューハンドル、インスタンスハンドル、)
  自分で設定したウインドウを ウインドウズに作ってもらいます。成功したらそのウインドウを表すウインドウハンドルを返してきます

 

ホームへ