第2版」のサンプルプログラム「X-Draw」のページです。ケーススタディ2:ドローツールのデータ構造」で扱ったドローツールです。本の中では、データ構造の検討のみを行い、shape.hというヘッダファイルを作成していますが、このページでは、それを元にした実際に動作するプログラムを配布します。Windows専用です。X-Drawの画面X-Drawの画面はこんな感じです。ダウンロードとコンパイルソースのダウンロードはこちらから。xdraw.zipコンパイラにはgccを使用しています。リンカにld、Windowsのリソースコンパイルのためにwindresが必要なので、私はMinGWを使用しています。上記のコマンドが揃っていれば、展開したファイルのトップにあるバッチファイルbuild.batを実行することで、コンパイル可能です。実行形式として、xdraw.exeが生成されます。実行するとコマンドプロンプトが表示されますが、これは、printf()でデバッグライト等入れるのを容易にするためです。不要な場合は、build.batの末尾のオプション「-console」を外してください。上部のボタンの機能は以下の通りです。このボタンをクリックすると「選択モード」になり、マウスで図形をクリックするか、ドラッグして矩形で囲むことで図形を選択できます。Ctrlキーを押しながらクリックすると、複数選択も可能です。図形を選択した状態でドラッグすることで、図形を移動できます。このボタンをクリックすると「直線描画モード」になり、マウスのドラッグで直線を引くことができます。ポリライン変形ボタン。このボタンをクリックすると「ポリライン変形モード」になります。このモードでは、既存のポリライン(折れ線)の頂点をドラッグすることで頂点の移動、ポリラインの辺をドラッグすることで頂点の追加、頂点で右クリックすることで頂点の削除ができます。このボタンをクリックすると「長方形描画モード」になり、マウスのドラッグで長方形を描画できます。このボタンをクリックすると「楕円描画モード」になり、マウスのドラッグで楕円を描画できます。塗りつぶし長方形描画ボタン。このボタンをクリックすると「塗りつぶし長方形描画モード」になり、マウスのドラッグで中を塗りつぶした長方形を描画できます。塗りつぶし楕円描画ボタン。このボタンをクリックすると「塗りつぶし楕円描画モード」になり、マウスのドラッグで中を塗りつぶした楕円を描画できます。このボタンをクリックすると、色選択のダイアログが表示されます。塗りつぶし色設定ボタン。このボタンをクリックすると、色選択のダイアログが表示されます。色を選択し、「OK」をクリックすることで、以後描画する塗りつぶし長方形、塗りつぶし楕円の塗りつぶしの色を変更できます。図形を選択後このボタンをクリックすると、選択した図形が削除されます。図形を選択後このボタンをクリックすると、選択した図形がグループ化されます。グループ化された図形を選択後このボタンをクリックすると、グループが解除されます。図形を選択後このボタンをクリックすると、選択した図形が前面に移動します。図形を選択後このボタンをクリックすると、選択した図形が背面に移動します。プログラムについてこのプログラムは、以下のような構成になっています。ユーザ座標系での描画機能を提供する、汎用の描画ライブラリ「DRW」。X-Drawの画面(GUI)を作成する「GUI」。上記以外の、アプリケーションとしてのX-Drawのソース。DRWとGUIはディレクトリを分けています。以下がファイル構成です。「プライベートヘッダファイル」「パブリックヘッダファイル」という言葉については、本を参照してください。モジュールDRWのプライベートヘッダファイルです。DRWの描画対象である「キャンバス」関連のソースです。ポリライン、矩形、楕円等の描画ルーチンです。イベント受付のメインループです。モジュールGUIのプライベートヘッダファイルです。Windows特有の概念である「リソース」を定義するリソースファイルです。ここでは、メニューバーのビットマップファイルを定義しています。リソースに対しIDを付与するためのヘッダファイルです。Windowsの作法だと思っておいてください。メニューバーに表示するボタンの画像です。不思議な仕様だと思いますが、Windowsのメニューバーでは、ボタン画像を「つなげたひとつの画像」で与えます。X-Drawのウインドウを作成するソース一式です。モジュールDRWのパブリックヘッダファイルです。モジュールGUIのパブリックヘッダファイルです。DRWのパブリックヘッダファイルのうち、Windowsに依存した部分です。本でも登場している、図形を定義するヘッダファイルです。X-Drawのソース内で共有するヘッダファイルです。メインルーチンや、いくつかのイベントハンドラを含みます。ポリラインについて、描画、それを含む最小範囲の算出、座標からの選択、移動といった処理を行います。長方形について、描画、それを含む最小範囲の算出、座標からの選択、移動といった処理を行います。楕円について、描画、それを含む最小範囲の算出、座標からの選択、移動といった処理を行います。直線の描画中のイベントを処理するソースです。長方形の描画中のイベントを処理するソースです。楕円の描画中のイベントを処理するソースです。ポリライン変形中のイベントを処理するソースです。図形選択のイベントを処理するソースです。図形全般についての処理を含んでいます。全体で使用する便利ルーチンです。ビルド用のバッチファイルです。