Home>プログラミング講座>Mac C 講座> 第四回 マウス〜クリック

Mac C 講座 第四回 マウス〜クリック


 今回は前回予告した通り、それぞれの処理をやります。
 つまり、「それぞれの処理1.マウスの処理」です。
 結構濃い内容になるので頑張ってください。

***処理の流れ***

 まず、どこでクリックされたかという情報をとりだします。返ってくる値としては、システムウィンドウ(めったに使いませんが、サポートしておく必要があります。システム側に処理を任せる関数を呼びだすだけです。)、ウインドウの中、ドラッグ領域(ウインドウのタイトル部)、クローズボックス、グローボックス(ウインドウの右下部の四角い部分)、ズームボックスなどです。そして、それぞれのするべき処理(後述)、言い換えれば、ユーザーが望む処理をします。


(図1 ドラッグ領域)

 (図2 クローズボックス)

 (図3 グローボックス)

 (図4 ズームボックス)

 今回のソースコードは、この前のソースコードからmouseDownの部分だけを取り出し、それに、マウス関連の関数を新たに作ったものとなります。なお、プロトタイプ宣言等は省略します。あしからず。

 では、ソースコードに行ってみよう!



void	EventLoop( void )
{
	EventRecord*	event;
	char		theChar;
	
	event = (EventRecord*)NewPtr( sizeof( EventRecord ) );
	
	while( !gDone )
	{
		WaitNextEvent( everyEvent, event, 20L, NULL );
		
		switch( event->what )
		{
			case	mouseDown :
				HandleMouseDown( event );
				break;
		}
	}
}

void	HandleMouseDown( EventRecord* event )
{
	WindowPtr	window;
	short		thePart;
	GrafPtr		oldPort;
	long		windSize;

	thePart = FindWindow( event->where, &window );
		//ウインドウの中でクリックされたか、そうなら、
		//どのウインドウのどこでクリックされたかなどの
		//情報をthePartに入れる。
	switch( thePart )
	{
		case	inSysWindow :
			SystemClick( event, window );
				//システムに処理を任せる。
			break;
		case	inContent :
			SelectWindow( window ); 
				//複数のウインドウがある場合、ウインドウを選択
				//し、アクティブな状態にします。
				//また、その他のクリック処理などもします。
				//(ここはプログラム次第なので記述しません。)
			break;
		case	inDrag :
			DragWindow( window, event->where, &qd.screenBits.bounds );
				//ウインドウを動かす関数ですが、最後の引数は、
				//動かすことを可能にする領域。この状態では、画面
				//上はすべて動かせるようになっています。
			break;
		case	inGoAway :
			if( TrackGoAway( window, event->where ) )
			{
				DisposeWindow( window );
			}
				//TrackGoAwayでクローズボックスのうえで、マウ
				//スが放されていたか(違う場所にマウスを動か
				//したらクローズボックスの色が元に戻りますよね)
				//を調べ、そうだったら、そのウインドウを破棄し
				//ます。破棄した後のwindowを参照するとバスエ
				//ラーもしくはそれに準ずる障害が発生しますので、
				//参照しないでください。
			break;
		//case	inGrow :
			//うーん。サイズの変更なんてめったにやらないからいい
			//や。もし、どうしてもサイズの変更がしたいのなら、参
			//考書を買うか、K仲川氏のページとかマック素人プログ
			//ラマの会とかを参考にしてください。内容は結構面倒く
			//さいです。
			//break;
		//case	inZoomIn :
		//case	inZoomOut :
			//ウインドウの右上の方にあるいつも9:00の時計みた
			//いなボタン見たいなものの処理ですが、inGrowと
			//同じ理由で省略。
			//break;
	}
}

 実は、マウス処理からもメニューにアクセスできなきゃいけないんだけど、今回は略。メニューの回を作ります。

 それにしても、こんなにコメントだらけにする必要はあったのだろうか?


[<前の回へ] [次の回へ>]


[Mac C講座]
[プログラミング講座]
[Home]