2007年6月5日火曜日

mainじゃなくてWinMainなんやね!

仕事で.NET2.0を使ってるんですが、
もうちょと詳しくウィンドウアプリケーションを知っておこうと
C言語にてwindowを作ってみる。
もちろんコンパイラはMinGWのgccコンパイラです。
過去の日記でインストールした時にwinapi関連のライブラリも
インストールできているのでそのまま使います。

で…ネットを検索しまくって
こんなヘッダーをインクルードして。
#include <windows.h>

こんな関数がエントリーポイントになっていると知る。
int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR szCmdLine,
int iCmdShow);

そして、意味不明な大文字の型が…
WINAPI 良くわかりません。とりあえずおまじないと思って書いておく
HINSTANCE:void*をtypedefしたやつやった。
     「インスタンスハンドル」やねんて
PSTR:strっていうぐらいやから文字列の型「wchar*」or「char*」をtypedefしたもの
   UNICODEを使えるか使えないかで場合分けしてある

んで各引数の説明
HINSTANCE hInstance
:実行したプログラムを識別するためのもの

HINSTANCE hPrevInstance
:すんごい昔に多重起動を確認するために使われていた今はNULLしか入ってこない

PSTR szCmdLine
:コマンドラインで実行した時の引数、今までも同じものあったからこれは大丈夫かな

int iCmdShow
:ウィンドウの初期表示方法です ウィンドウを生成する時に使うそうな…


以下のコードを書いて簡単に呼び出してみた
メッセージボックスが表示されておしまい。
-------
#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR szCmdLine,
int iCmdShow)
{
MessageBox (NULL, TEXT("text"), TEXT("caption"), MB_OK);
return 0;
}

-------

TEXT()はマクロでUNICODE対応の場合は文字列の先頭に「L」を付ける

例TEXT("text")
 ⇒UNICODE対応 ⇒ L"text"
 ⇒UNICODE非対応 ⇒ "text"

まだウィンドウは作成できず…

0 件のコメント:

ラベル