gtkmmをサポートするプロジェクトを立ち上げる

始めるには

まず、Visual Studioで新しいプロジェクトを立ち上げます。ファイルメニューからNew Projectを選んでください(Figure J.1, “メニューからNew Projectを選択する”)。次に、New ProjectウィンドウからWin32 and Console Applicationを選択してください(Figure J.2, “Win32 Console Applicationを選択する”)。このときプロジェクトに名前と場所を付けます。この例ではプロジェクトの名前はgtkmm_test、場所はC:\workとなっています。

Figure J.1. メニューからNew Projectを選択する

メニューからNew Projectを選択する


Figure J.2. Win32 Console Applicationを選択する

Win32 Console Applicationを選択する


Figure J.3. アプリケーションの設定を確かめる

アプリケーションの設定を確かめる


Finishをクリックして新しいWin32コンソールプロジェクトを作成してください。このプロジェクトをgtkmmを使うように設定していきましょう。

Figure J.4. Visual Studioで新しいプロジェクトを作ったところ

Visual Studioで新しいプロジェクトを作ったところ


main()関数を修正する

この作業で一番最初にしなくてはいけないことはmain()関数を修正することです。Visual Studioではmain関数として翻訳可能版の_tmain()を使うことが多いです。これはこれで悪くありませんが、プロジェクトの移植性がなくなってしまいます。gtkmmの目的のひとつは移植性の高いアプリケーションフレームワークを提供することです。ですから、_tmain()は除去し、古き良きmain()で置き換えてください。お母さんもこっちを使っていました。

Figure J.5. main()関数を修正する

main()関数を修正する


stdafx.hを修正する

次はstdafx.hプリコンパイル済みヘッダファイルを変更します。この文章を書いている時点では、Windowsプログラマの多くがプリコンパイル済みヘッダの仕組みに馴れています。しかし、UNIXプログラマはそうではありません。プリコンパイル済みヘッダのサポートはつい最近GCC(version 3.4以降)に取り入れられました。ですからオープンソースプロジェクトではほとんど用いられていません。UNIXプログラマならばすぐにこのプリコンパイル済みヘッダ機能を無効化してしまうでしょうが、その前にすこし考えてください。正しくプリコンパイル済みヘッダを使用することは素晴らしいコンパイルタイムの短縮をもたらします(gtkmmを使うときでも)。プロジェクトの開発において何時間も節約することが出来るのです。

Figure J.6, “stdafx.hを修正する”のように、デフォルトのstdafx.hを変更してください。ここではgtkmm.hヘッダファイルも追加しています。移植性を上げるために#pragma onceを除去し、標準的な#ifdefインクルードガードで置き換えてください。同様にtchar.hも除去してください。アドバイスですが、ここにgtkmmに関連する全てのヘッダ(libglademm.h, libxml++など)を置いたほうがいいでしょう。こうするとプロジェクトのコンパイル速度は大幅にスピードアップするはずです。

Figure J.6. stdafx.hを修正する

stdafx.hを修正する

単純なウィンドウを生成するコードを追加する

次に簡単なgtkmmコードをmain()関数に追加します。画像の例はChapter 3, 基礎のものです。

Figure J.7. 単純なgtkmmプログラム

単純なgtkmmプログラム

gtkmm用のMSVCプロパティファイルを追加する

次のステップはgtkmm付属のMSVCプロパティファイル(Property File)を追加することです。2005年度版のVisual Studioではプロパティファイルを使用してプロジェクトに設定を追加できます。プロパティファイルは様々な種類のビルド設定(定義、インクルードパス、リンクパス、ライブラリなど)を持ち、これを利用して簡単にサードパーティのパッケージをビルドすることができます。プロジェクトにプロパティファイルが追加されると、プロジェクトはファイルにある全てのビルド設定を受け継ぎます。プロジェクトを移動可能(相対パスにも絶対パスにも移動できるという意味)にするには、gtkmm付属のプロパティファイル(通常はC:\Gtk\MSVC\にあります)をコピーし、プロジェクトのディレクトリ(ここではC:\work\gtkmm_test)に貼り付けてください。

Figure J.8. gtkmm付属のVisual Stuioプロパティファイル

gtkmm付属のVisual Stuioプロパティファイル

次に、プロパティファイルをプロジェクトに追加します。これはプロパティマネージャ(Property Manager)で行います。ソリューションエクスプローラのタブをクリックして行ってください(xref linkend="figure-msvc-property-manager" />)。

Figure J.9. プロパティマネージャ(左ペーン、タブが円で囲まれている)

プロパティマネージャ(左ペーン、タブが円で囲まれている)

Debug | Win32フォルダを右クリックし、既存のプロパティシートの追加(Add Existing Property Sheet)を選びます。ファイルブラウザでgtkmm-2.4d.vspropsを選択してください。次に、Release | Win32フォルダを右クリックし、やはり既存のプロパティシートの追加を選びます。今度はファイルブラウザでgtkmm-2.4.vspropsを選択します。うまく行けばプロパティマネージャはFigure J.11, “gtkmmプロパティファイルを追加したプロパティマネージャ”のようになるはずです。

Figure J.10. 既存のプロパティシートに追加する

既存のプロパティシートに追加する

Figure J.11. gtkmmプロパティファイルを追加したプロパティマネージャ

gtkmmプロパティファイルを追加したプロパティマネージャ

プロジェクトの設定を変更する

この時点で作業はほとんど終わりです。最後に、プロジェクトプロパティ(Project Properties)ページで設定を少々変更します。このページを見るため一番簡単な方法はソリューションエクスプローラのプロジェクトの名前のところを右クリックし、Propertiesメニューアイテムをクリックします(Figure J.12, “プロジェクトプロパティを開く”)。

Figure J.12. プロジェクトプロパティを開く

プロジェクトプロパティを開く

最初にすることは$(NoInherit)オプションをリンカ設定から除去しますFigure J.13, “$(NoInherit)フラグを除去”。左のツリーからリンカページに移り、Configuration Propertiesを開き、リンカ(Linker)、Inputをクリックします。$(NoInherit)トークンをAdditional Dependenciesから除去します。これをDebugReleaseモードの両方で行うのを忘れないでください。

Figure J.13. $(NoInherit)フラグを除去

$(NoInherit)フラグを除去

この段階でアプリケーションをビルド、実行することができます。しかし、ビルドするとgtkmmのヘッダは無害ですが警告を出力するはずです。便利なことに、この警告は同じくプロジェクト設定ダイアログを使って無視することができます。ダイアログ左のツリーからConfiguration Propertiesを開き、C/C++Advancedをクリックします。ここでFigure J.14, “警告4250を無視する”のように、Disable Specific Warningsフィールドに4250を入力してください。これもDebugReleaseモードの両方で行うのを忘れないでください。うまく出来たらOKを押してください。

Figure J.14. 警告4250を無視する

警告4250を無視する

Windowsコンソールについて

アプリケーションをビルド、実行すると、何もないシンプルなGtk+ウィンドウが現れます。ここでさらにコンソールウィンドウもポップアップされるはずです。コンソールウィンドウはgtkmmアプリケーションをデバッグするのに大変便利なものです。Gtk+の警告の多くはこのコンソールだけに出力されるからです(Windowsプログラマならお馴染みのOutputDebugString()TRACE()とは異なります)。

ですが、アプリケーションをリリースする段階ではコンソールをポップアップさせたくないはずです。これを行うにはリンカ設定をふたつ修正します。プロパティページ左のツリーからConfiguration Propertiesを開き、LinkerSystemを開きます。ここでSubsystemフィールドの値をCONSOLEからWINDOWSに変更してください Figure J.15, “SubsystemをWindowsにしてコンソールを無効化する”。こうすればアプリケーションを起動したときにコンソールウィンドウを生成するのを無効化できます。さらにこうした場合はアプリケーションのエントリポイントも変えなくていけません。左のツリーからAdvancedを選び、Entry Pointフィールドを変更、mainCRTStartup(大文字小文字に気をつけてください)としてください Figure J.16, “Windowsプログラムがmain()を使うように正しいエントリポイントを設定する”

開発者のなかには、Debugモードのときはコンソールを有効に、Releaseモードのときは無効にしておくのが便利だと考える人がいます。これとは違って両方のモードで同じ設定にしたほうがいいと考える人もいます。これは完全に開発者の好みの問題です。うまく設定できたらOkを押してください。

Figure J.15. SubsystemをWindowsにしてコンソールを無効化する

SubsystemをWindowsにしてコンソールを無効化する

Figure J.16. Windowsプログラムがmain()を使うように正しいエントリポイントを設定する

Windowsプログラムがmain()を使うように正しいエントリポイントを設定する

以上で全てを説明しました。この初期設定をセットアップすれば、その他のVisual Studioプロジェクトと同様に、gtkmmアプリケーションを修正、ビルド、実行することができるでしょう。