Saturday, December 29, 2007

1.猫はWindowsプログラミングがわからん

DDL:Dynamic Link Library
WindowsシステムのAPI関数の実際の実行コードはgdi32.dllやkernel32.dllやuser32.dllに含まれている.

メッセージ駆動型プログラミング:プログラムはシステムからどのようなメッセージが送られてきたら何をすれば指定するプログラミング
イベント駆動型プログラミング:どのイベントが発生したら何を実行するか?

Win32APIで使われているデータ型:

データ型 意味
BOOL True or False
BYTE バイト(8ビットデータ)
CHAR 8ビットANSIキャラクタ
DWORD 32ビット符号なし整数
INT 32ビット符号付きの整数
LONG 32ビット符号付きの整数
WORD 16ビット符号なし整数

基本的なWindowsプログラムであれば,多くの場合,結合するライブラリを指定しなくてもリンカが自動でやってくれる.しかしツールバーやステータスバーなどを持つプログラムは特別にライブラリを指定する必要がある.

メニューやダイヤボックス(これらはリソースという)を持つプログラムでははリソーススクリプトを作成して,リソースコンパイラでコンパイルし,リンカで結合する必要がある.

WindowsプログラムはWinMain関数から出発.
CALLBACK修飾子が付いている関数は自分のプログラムにどの場所に出てこないこともあるが,これはシステムから呼ばれるものである.コールバック関数あるいはウィンドウプロシージャという.

int WINAPI WinMain(HINSTANCE hCurInst,
HINSTANCE hPrevInst,
LPSTR lpsCmdLine, int nCmdShow)

HINSTANCE:インスタンスハンドルと呼ばれ,インスタンスとはメモリ上のプログラムのこと.インスタンスハンドルはシステムがインスタンスを識別するための番号です.
hCurInst: Current instance
hPrevInst: Previous instance.Windowsでは同じプログラムを複数起動できる.16ビット時代はこの引数を見て,すでに自分自身が起動されているかどうかを知ることができたが,Win32 APでは常にNULL.互換性維持のため,無視してよし.

LPSTR lpsCmdLine
コマンドライン引数が格納される.ARGV...と同じ

int nCmdShow
ウィンドウの表示状態を指定する.WinMain開始,システムが表示状態を決定する(?),そのままメインウィンドウを作った後
ShowWindow(hWnd, nCmdShow);

WinMain関数の中身:

  • ウィンドウクラスの定義
  • ウィンドウクラスの登録
  • 登録したウィンドウクラスを元に,親ウィンドウを作成
  • メッセージループの作成

自分で作ったウィンドウに対してはウィンドウプロシージャと呼ばれる関数が必要.複数のウィンドウに対して同じウィンドウプロシージャを使うことができる.

実はWinMain関数はどのようなプログラムもほとんど同じ.プログラムのメインの部分はウィンドウプロシージャにある.ここでイベントが起きたときのプログラムの反応を書くからである.イベントが起きるとメッセージが届く.メッセージ処理ということになる.

その1.

No comments: