「Windows API/図形の描画」の版間の差分

削除された内容 追加された内容
編集の要約なし
訂正
153 行
 
 
== 構造体は無印C言語とやや異なる ==
WindowsAPIでは、構造体の宣言場所(いわゆる「グローバル領域」、コード冒頭の変数宣言などの場所)と、構造体の代入場所(wWinMain関数ブロック内など)とは、離れざるを得ない。
構造体を定義する場合、(C言語ではmain関数より上でも構造体の型宣言が出来たのと同様に)WindowsAPIプログラミングでもwWinMain関数よりも上の位置でも構造体の型の宣言はできる。そして、C言語と同様に、構造体の各要素への代入はmain関数など個別の関数側でしか行えない制約がある。
 
なぜなら (WindowsAPIの)wWinMain 関数と (無印C言語の)main関数との仕組みが、違うからである。
 
wWinMain 関数ブロックで構造体の型を宣言しても、wWinMain 関数はアプリ起動イベント専用の'''ローカル'''な関数なので、他のイベント(たとえば画面描画の関数など)の関数ブロックからは原則的に、その構造体の型を呼び出せなくなってしまうので、まったく実用的では無くなる。
 
しかし、一方でもしもグローバル領域で宣言した構造体ならば、その構造体は画像描画の関数などの全てのイベントで(構造体を)呼び出せる。
 
 
しかし、グローバル領域では、代入などの操作が出来ないので、構造体の各要素の初期値の代入すら出来ない。
 
このため、代入などは wWinMain 関数ブロック内で行う必要があるという制約がある。
 
 
そして、この制約は、WinodowsAPIにおいては、wWinMain関数周辺にコードが膨大にある状況では、構造体の宣言と初期値代入が離れるのは、とても構造体のコードが一覧しづらくなり不便である。
 
なのしかし、不便あるが特別他に簡便な方法が少理由の無ので、しぎりたなく、構造体の宣言はwWinMain関数側、グローバル領域一括して宣言と行い、構造体の各要素への初期値代入などをしてしまうのが簡便はwWinMain関数ブロックなど行うことになる。