2007年10月09日

[009]原始的な描画プログラム

マウスでウインドウ内の2点をクリックするとその間に直線を引くという極めて原始的な描画プログラムを作ってみました。下図がそのスクリーンショットです。
Screenshot081.png
ソースです→LineDrawing1.tar.gz
解凍してできたディレクトリの中のLineDrawing1.prjをanjutaで開けば好きなように弄れる筈です。


ウィジットツリーとウィジットのプロパティ

前回同様、ウインドウに直接DrawingAreaウィジットを貼り付けています。
Screenshot085.png

[window1]
タイトル→「直線描画パート1」
シグナル→「destroy」
ハンドラ→「gtk_main_quit」

[drawingarea]
名前→「drawingarea」
イベント→「00000000000000010000」 (*註)
シグナル→「button_press_event」
ハンドラ→「on_drawingarea_button_press_event」


(*註)
ここは私が少々ハマッたポイントです。シグナルとハンドラを設定しただけではマウス関係のイベントは拾ってくれないようで、「共通」タブの中の「イベント」というプロパティをセットしてあげる必要があります。 まず、下図のように「共通」タブを選択してから、イベントの項目の右端にある「…」と書かれたボタンをクリックします。

Screenshot082.png


すると、下図のように「X-イベントの選択」というタイトルのウインドウが開きます。ここで”GDK_BUTTON_PRESS_MASK"を選択します。ちなみにCtrキーを押しながらクリックすれば複数の項目を選択することができます。「Ok」をクリックします。

Screenshot083.png

するとイベントの値が下図のように変わります。

Screenshot084.png



イベント処理

ソースファイルです→callbacks.c

button_press_eventはdrawingarea上でマウスのボタンが押されたときに発生するイベントです。1回目にボタンが押された際にその場所を直線の始点として記憶し、2回目にボタンが押されたときに直線を描画しています。



click_count++; click_count=click_count%2;
の部分がもしかしたら分かり難いかもしれませんが、カウントアップした後に2で割った余りを代入することで、click_countの値は0と1を交互に繰り返すことになります。

下のコードのようにswitch文の中でclick_countの値を変える方が意味が分かり易いかもしれません。

posted by knyakki at 16:02| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。