本章では、Motif と Microsoft Windows の両方で、図 12-1 に示す簡単なアプリケーションを作成する方法について説明します。さらに、 本章の最後の 「ソースの共有化」では、コールバックファイルを UNIX と Microsoft Windows で共有する方法を示します。
この学習では、アプリケーションのメインウィンドウとサブダイアログをまとめる 方法について説明します。さらに、ユーザーインタフェースの構築に加えて、リンクやコールバックを使用 し、ピックスマップなどのリソースを設定します。また、描画領域にメニューをポップアップする方法も示 します。さらに、これらすべてを Microsoft Windows に移植します。
読者は Sun WorkShop Visual の基本的な使用法に精通しているものとします。したがって、この学習用の完成した階層が収められている デザインファイルは、あらかじめ Sun WorkShop Visual に添付されています。手順 2 の説明に従ってこのファイルを開いても、指示に従って階層を自分で構築してもかまいません。
起動方法については、「Microsoft Windows モードでの起動」を参照してください。
$VISUROOT/src/examples/tutorial/windows.xd
ここで、VISUROOT は、インストールした Sun WorkShop Visual のルートディレクトリです。
注 - 自分で階層を構築する場合には、手順 3〜手順 17 を実行してください。
この階層を図 12-2 に示します。
その他のウィジェットには名前を付ける必要はありません。[ウィジェットクラス][ 番号] という形式の名前 (たとえば「button1」) が、Sun WorkShop Visual によってデフォルトで割り当てられます。
メニューバーの完成した階層を図 12-3 に示します。
完成したスクロールウィンドウ階層を図 12-4 に示します。
ウィジェットを適切な場所に移動し、アタッチメントを指定する必要があります。 この操作については、第 4 章「配置エディタ」を参照してください。
フォームウィジェットは (まだ C++ クラスにしていないため) Microsoft Windows コードには生成されませんが、アタッチメントと位置については、生成コード内で Sun WorkShop Visual によって計算と処理が行われます。このようにして、サイズ変更動作は変わることなく保持されます。詳細 については、「マネージャウィジェットとその配置」を参照してください。
このサブダイアログの完成した階層を図 12-6 に示します。
ウィジェットを適切な場所に移動し、アタッチメントを指定する必要があります。 ダイアログのサイズにあわせてラベルのサイズを変更するには、たとえば、ラベルの下部をボタンの先頭に 接続し、他のすべての端をフォームの側面に接続します。この操作については、第 4 章「配置エディタ」を参照してください。
手順 2 で用意されているデザインファイルを開いた場合でも、この保存操作は行なってください。ここで保存する ファイルの名前は MyWinApp.xd とします。
ここで、サブダイアログを閉じる「close」ボタンにコールバック・メソッドを追加 し、メインアプリケーションシェルのファイルメニューの「exit_b」にコールバック・メソッドを追加しま す。
注 - Motif 専用のアプリケーションでは、ボタンからアプリケーションを閉じるコールバックを追加する必要はありま せん。sub_form の「自動アンマネージ」リソースを「はい」に設定するだけで十分です。一方、Microsoft Windows の場合には、コールバックを追加する必要があります。
リンクを追加して、メインウィンドウからサブダイアログが表示されるようにしま す。Sun WorkShop Visual では、Motif と Microsoft Windows の両方で機能するリンクを実装するコードを生成できます。リンクを作成するときに考慮すべき Microsoft Windows での制限事項については、「リンクの使用」を参照してください。ダイアログでのリンクの設定方法については、「リンク」を参照してください。
これを行うには、ツールバーのボタンを押すか、または「ウィジェット」メニュー から「リンク編集」を選択してください。ツールバー上のリンク編集ボタンについては、図 2-1 を参照してください。
なお、宛先ウィジェットとしてメニューボタンが選択されているときには、追加ボ タンがピンク色になります。表示、非表示、マネージ、およびアンマネージのリンクは、Motif のメニューボタンでのみ有効です。有効化と無効化のリンクは、Motif と Microsoft Windows の両方のメニューボタンで有効です。ただし、現在選択されているメニューボタンは、この学習での宛先ウ ィジェットではありません。
「リンク編集」ダイアログ内の「ウィジェット」というテキストボックスには、Abo ut ダイアログのシェルである「sub_shell」が追加されています。
次に、メインアプリケーションシェルの「subd_pixmap」から同じリンクを追加しま す。
選択したウィジェットが「リンク元」ウィジェットとなるよう、ダイアログを再表 示する必要があります。さもなければ、これは「リンク先」ウィジェットとなります。
どの言語で生成する場合も、描画領域ウィジェットにポップアップメニューを追加 すると便利です。学習の次の段階では、その追加方法を示します。Sun WorkShop Visual ではメニューをポップアップするコードを自動生成しないため、特別なコードを少し記述する必要がありま す。Motif と Microsoft Windows ではメニューのポップアップ方法が異なるため、プラットフォームごとにコードを変えることが必要です。 コードの追加については後述します。最初に、コールバックを設定しなければなりません。
「入力」コールバックタイプにはアスタリスク (*) が付いており、このコールバックは Microsoft Windows 版のアプリケーションに使用できないことを示します。
表示方法としてには、描画領域上でダブルクリックするのが最も簡単です。
Motif XP ライブラリには、Microsoft Windows の描画モデルや入力モデルを模倣したものはありません。したがって、Microsoft Windows のリストはメッセージハンドラを対象としています。
これにより、対応する Microsoft Windows メッセージへの応答で呼び出される、適切な Microsoft Windows メッセージハンドラと、該当するコールバックスタブが生成されます。
メニューをポップアップするためのスタブの記入方法については、「スタブへの記入」を参照してください。
Sun WorkShop Visual は、Motif と Microsoft Windows に対するリソースファイルを生成します。Motif では、そのウィジェットによる制御が広い範囲で可能です。Microsoft Windows でのリソースも存在しますが、Motif/X リソースに比べると制御可能な範囲が限られています。Microsoft Windows リソースは、実行可能ファイルにコンパイルして組み込まれます。したがって、Motif の場合とは異なり、Microsoft Windows でリソースを変更するということは、アプリケーションを再コンパイルすることになります。
このアプリケーション例には、文字列、ピックスマップ、およびキーボードのリソ ースがあります。最初に、ラベル、ボタン、およびシェルの文字列を設定します。
これを図 12-9 に示します。
これら 3 つのメニューを図 12-10 に示します。
現在、デザイン領域にはこのサブダイアログの階層が表示されています。
The quick brown fox
jumped over
the lazy dog
そのためには、シェルの子であるフォームのリソースパネルで「タイトル」という テキストボックスに入力してください。完成したダイアログを図 12-11 に示します。
デザインにピックスマップを使用している場合には、ピックスマップはコード生成 時に、Sun WorkShop Visual によって Windows のビットマップに自動変換されます。このことを示すため、ボタンの 1 つにピックスマップラベルを指定します。
これにより、ピックスマップセレクタのダイアログが表示されます。
ピックスマップオブジェクトの作成方法と使い方については、「ピックスマップの選択」を参照してください。
MS-DOS (および Microsoft Windows) の場合のファイル名は、拡張子の前部分が 8 バイトを超えてはならないことに注意してください。Sun WorkShop Visual は、Microsoft Windows モードでは、ピックスマップをバインドした名前がファイルのベース名として使われます。そのため、ファ イル名が 8 バイトを超えないように注意してください。
以上でアプリケーションのデザインが終了しました。以降の学習では、UNIX と Microsoft Windows 用のコードの生成方法、および各プラットフォームでのアプリケーションの構築方法を示します。
Sun WorkShop Visual でのアプリケーション・ユーザーインタフェースのデザインが終わったので、Motif および Microsoft Windows コードを生成することができます。コードを生成したら、2 つのアプリケーションの構築準備ができたことになります。この節では、コールバックスタブへの記入方法 も含めて、操作の詳細について説明します。
この学習では、Motif 用と Microsoft Windows 用に 2 つの異なるアプリケーションを生成する必要があります。これらのアプリケーションは、上書きしたり、不 正なヘッダーファイルをインクルードすることのないよう、2 つの別のディレクトリに生成してください。この学習では、ソースファイルの共有化は行いません。これに ついては 「ソースの共有化」を参照してください。
ファイル名フィールドには、Sun WorkShop Visual の保存ファイル名に基づく名前が与えられています。
「コード生成」ダイアログの最上部には、ベースディレクトリの名前を入力するテ キスト領域があります。すべてのファイル名は、このベースディレクトリからの相対パスで入力します。ベ ースディレクトリを確認するには「...」ボタンを使用してください。
混乱を避けるには、Motif XP コードと Microsoft Windows MFC コードを別々のディレクトリに生成してください。
「コード」テキストボックスの横にある「オプション」というボタンを押してくだ さい。
変更が保存され、「C++ コードのオプション」ダイアログが閉じます。
そのためには、「生成」ダイアログの最下部にある、「オプション」というラベル のついたボタンを押します。
便宜上、この学習ではすべてのリソース設定が「ハードコード」されます。実際の アプリケーションでは、リソース設定を別個のリソースファイル内に生成するのが普通です。
Sun WorkShop Visual のインストール方法と構成方法によっては、Motif XP コードにアクセスするためにメークファイル (Makefile) を編集する必要が生じる場合もあります。 XPCLASSLIBS および CCFLAGS の定義が Motif XP ライブラリとインクルードファイルをアクセスすることを確認してください。VISUROOT は、Sun WorkShop Visual のインストールディレクトリのルートへのパスです。
XPCLASS = $(VISUROOT)/src/motifxp
XPCLASSLIBS = $(XPCLASS)/lib${ABIDIR}/libmotifxp.a
GEN_CFLAGS=-I. ${XINCLUDES} -I${XPMDIR} ${GROUP_COMPILEFLAGS}
CCFLAGS=${CFLAGS} ${ABICCFLAGS} -I${XPCLASS}/h ${GROUP_COMPILEFLAGS}
Microsoft Windows 用のコード生成手順は、上記の Motif 用の手順とほとんど同じですが、一部が異なっています。Sun WorkShop Visual は、様式ごとに異なる一連のファイルをそれぞれ記憶するため、異なる様式に対して一度ファイルの名前を 指定すると、ツールバーの様式メニューおよびコード生成ボタンを使用することができます。
PC の場合には、ファイル名の拡張子前部分は 8 バイト以下であることが必要です。Visual C++ などいくつかの IDE (統合開発環境) では、C++ コードを含むソースファイルの拡張子として .c を指定しても受け入れられません。 .cpp または .cxx を指定してください。
混乱を避けるには、Motif XP コードと Microsoft Windows MFC コードを別々のディレクトリに生成してください。
「コード」テキストボックスの横にある「オプション」というボタンを押します。
変更が保存され、「C++ コードのオプション」ダイアログが閉じます。
このファイルにはダイアログテンプレートが含まれています。このトグルがオンに されると、「ピックスマップ、 ビットマップ、アイコン」で説明するように、Sun WorkShop Visual は、ピックスマップを Windows ビットマップに (ファイルごとに 1 つずつ) 変換します。
「コードオプション」ダイアログの下部にある「オプション」ボタンを押します。
これにより Sun WorkShop Visual は、「ダイアログテンプレートの生成」で説明するように、Microsoft Windows リソースファイルであるダイアログテンプレートを生成します。
注 - Microsoft Windows コードの場合には、メークファイルを生成する必要はありません。これらのファイルは別の方法で構築され ます。これについては、「Microsoft Windows 版のコンパイル」を参照してください。
ピックスマップ用のビットマップファイルが生成されたことを知らせるメッセージ が表示されます。ファイルのベース名は、ピックスマップオブジェクトの名前です。
MFC を生成すると、コード、スタブ、およびヘッダーファイルに加えて、特別なファイルも生成されます。これ らのファイルは次のとおりです。
生成したコードに日本語テキストが含まれる場合には、そのコードを PC に転送する前に、Sun WorkShop Visual に付属のフィルタユーティリティ xdtosj を使用して、コードの後処理を行う必要があります。詳細については、「日本語フォントの使用」を参照してください。
スタブファイルには、Motif 用と MFC 用の 2 つがあります。この学習では Motif アプリケーション用に Motif XP コードを生成したため、いくつかのコードを共有できます。これは、Sun WorkShop Visual の XP ライブラリが Motif 用に MFC の一部を模倣しているためです。しかし、単純化と速度向上のため、この学習ではこの 2 つを別個に扱います。ソースの共有の詳細については、「ソースの共有化」を参照してください。
コールバックには、アプリケーションを終了するためのものと、描画領域からメニ ューをポップアップするためのものがあります。スタブは下記のように記入してください。
void
shell_c::DoExit ( )
{
exit(0); /* この行を追加 */
}
void
sub_shell_c::DoClose ( )
{
this->ShowWindow(SW_HIDE); /* この行を追加 */
}
afx_msg void popup_window_c::OnRButtonDown( UINT nFlags, CPoint point )
{
ClientToScreen(&point); /* この行を追加 */
popup->TrackPopupMenu( TPM_LEFTALIGN|TPM_RIGHTBUTTON, /* この行を追加 */
point.x, point.y, this, NULL);
}
MFC スタブファイルには、Motif スタブファイルに合わせて 2 つのコールバックがあります。終了コールバックのシグニチャーは両方のプラットフォームで同じですが、 内容は異なっています。
void
shell_c::DoExit ( )
{
exit (0); /* この行を追加 */
}
void
sub_shell_c::DoClose ( )
{
this->ShowWindow(SW_HIDE); /* この行を追加 */
}
void
popup_window_c::DoInput ( )
{
popup->TrackPopupMenu(0, 0, 0, this, NULL); /* この行を追加 */
}
デザインを作成し、コードを生成し、コールバックスタブを記入すると、Motif および Microsoft Windows のどちらでもアプリケーションをコンパイルできます。以降の節では、Motif アプリケーションの構築に関する簡単な説明の後に、Microsoft Windows 上でアプリケーションを構築する手順について記述します。
Microsoft Windows 上で Visual C++ バージョン 4.0 および 5 を使用してアプリケーションを構築する手順の詳細については、「Microsoft Windows 版のコンパイル」で説明します。ただし、Microsoft Foundation Class を統合できる Symantec C++ などの C++ 開発環境であれば、生成コードを構築することができます。Microsoft Windows ベースの C++ コンパイラでアプリケーションを構築する方法に関する一般説明については、「他のアプリケーションの使用」を参照してください。
すでにコードが生成されているため、Motif コードを生成したディレクトリのコマンドプロンプトから
make
と入力するだけで、アプリケーションを作成できます。メークファイルが生成して あるため、アプリケーション内のすべてのファイルが自動構築されます。
アプリケーションを実行する前に、「X リソースファイルの設定」で説明したように、読み込むリソースファイルを準備してください。
Visual C++ バージョン 5 を使用している場合には、Sun WorkShop Visual がユーザーに代わって Visual C++ のプロジェクトファイルをすべて生成するため、PC 上でのアプリケーションのコンパイルはきわめて簡単です。Visual C++ の古いバージョンを使用している場合には、プロジェクトファイルを作成する必要があります。これはあま り便利ではありませんが、操作は短時間で終わり、一度行うだけで済みます。Visual C++ バージョン 5 と Visual C++ バージョン 4.0 を使用するための詳細を以下に示します。Visual C++ を使用していない場合には、アプリケーションをコンパイルするためのヒントとして 「他のアプリケーションの使用」を参照してください。
Visual C++ は、Microsoft Windows 上で実行するアプリケーションの開発を支援する IDE であり、コンパイラ、デバッガ、および各種のエディタなど、多数のツールから構成されます。これは、ア プリケーションのソースを構築、デバッグ、制御するための便利なツールです。しかし、Visual C++ でのコード変更は、Sun WorkShop Visual には反映できません。Visual C++ では、プロジェクトの概念を使用しています。アプリケーション内のファイルの管理に Visual C++ を使用する場合には、必ずプロジェクトが必要となります。バージョン 5 の場合には、Sun WorkShop Visual がユーザーに代わってプロジェクトファイルを生成します。
Sun WorkShop Visual は、バージョン 5 以降の Visual C++ に対して、フル構成のプロジェクトファイルを生成します。これらは、「.dsw」と「.dsp」の接尾辞で終わ るファイルです。これらのファイルは、すべての MFC ソースファイル (コードファイル、リソースファイル、ビットマップファイル、ヘッダーファイルを含む) と一緒にPC で使用してください。
これによって、Sun WorkShop Visual は、プロジェクトを読み込んだ状態で Visual C++ を開きます。
Visual C++ がエラーを検出した場合には、エラーが表示され、コンパイルが停止します。F4 キーを押すと、エラーを含むファイルが開き、エラーに関連のある場所が報告されます。続けて F4 キーを押すと、次のエラーへと進み、関連のあるファイルが必要に応じて開きます。エラー項目をダブルク リックすると、関連するファイルが開き、エラーの発生箇所にカーソルが移動します。このようなファイル を表示するウィンドウでは、直接ファイルの内容を編集することもできます。「ファイル」メニューから「 開く」を選択しても、ファイルの表示と編集を行うことができます。
Visual C++ バージョン 4 を使用している場合には、Sun WorkShop Visual によって生成されるプロジェクトファイルを使用できません。プロジェクトファイルの作成に必要な手順を 以下に説明します。
「.dsp」ファイルと「.dsw」ファイルに関しては、Visual C++ バージョン 5 以降にだけ関連するファイルであるため、取り込む必要はありません。
「新規プロジェクトワークスペース」ダイアログが表示されます。
Visual C++ のメインウィンドウが表示されます。次に、構築したいファイルをプロジェクトに追加します。
次に示すような「プロジェクト設定」ダイアログが表示されます。
Visual C++ がエラーを検出した場合には、エラーが表示され、コンパイルが停止します。F4 キーを押すと、エラーを含むファイルが開き、エラーに関連のある場所が報告されます。続けて F4 キーを押すと、次のエラーへと進み、関連のあるファイルが必要に応じて開きます。エラー項目をダブルク リックすると、関連するファイルが開き、エラーの発生箇所にカーソルが移動します。このようなファイル を表示するウィンドウでは、直接ファイルの内容を編集することもできます。「ファイル」メニューから「 開く」を選択しても、ファイルの表示と編集を行うことができます。
Sun WorkShop Visual によって生成されたコードは MFC コードです。これは特定の Microsoft Windows アプリケーション用に生成されたものではありません。Visual C++ を使用していない場合、Microsoft Windows 上でユーザーインタフェースを構築する際に注意すべき重要なポイントを以下に示します。この節はすべて のコンパイラに適用されます。
Sun WorkShop Visual の Motif XP ライブラリを使用すると、一部のコールバックコードを Motif と MFC で共有することができます。Motif で使用できるクラスについては、付録 B「Motif XP リファレンス」を参照してください。この付録では、Motif と MFC の両方のプラットフォームで使用できる、MFC ツールキットへの呼び出しについて説明しています。
XP ライブラリを使用するには、Motif アプリケーション用に生成する言語として「コード生成」ダイアログで「C++ (Motif XP)」を選択してください。コードを生成する際には、UNIX と Windows の両方のプラットフォームで受け入れられる接尾辞は「.cxx」または「.cpp」だけであることを忘れないで ください。以下の手順リストでは、構築済みのデザインとスタブファイルを使用します。このスタブファイ ルは、Motif XP を使用して Motif と Windows の両方で使用できるコールバックファイルを記述する方法を示すために、すでに記入されているものです。 このために必要なファイルは $VISUROOT/src/examples/tutorial にあります。ここで、VISUROOT は Sun WorkShop Visual のインストールディレクトリです。
この詳細については、「Microsoft Windows モードでの起動」を参照してください。
$VISUROOT/src/examples/tutorial/singlesource.xd
これは、2 つのオプションメニュー、2 つのトグル、およびテキストフィールドから構成される簡単なダイアログです。
Motif 専用ソースのターゲットディレクトリがあることを確認します。
現在のスタブファイルは設定済みのスタブファイルによって上書きされますが、Su n WorkShop Visual を使用してメークファイル内にその依存情報を作成する必要があります。
前述の同じ設定済みのスタブファイルを使用しますが、Sun WorkShop Visual を使用して、Visual C++ プロジェクトファイル内にその依存情報を作成する必要があります。
$VISUROOT/src/examples/mfc/singlesource_stubs.cpp
このファイルは、生成した MFC ソースと一緒に PC にコピーする必要があることを忘れないでください。
テキストエディタでスタブファイルを見ることができます。3 つのコールバックがあります。
1. JazzChanged
「Jazz」トグルの状態をチェックし、オンになっている場合は「Jazz」オプションメニューを表示し、「Cl
assical」オプションメニューを非表示にします。
2. ClassicalChanged
「Classical」トグルの状態をチェックし、オンになっている場合は「Classical」オプションメニューを表
示し、「Jazz」オプションメニューを非表示にします。
3. DoSetText
目に見えるオプションメニューから選択した項目を取り出し、テキストをテキストフィールドに書き込みま
す。
このコードはすべて、Motif XP アプリケーションと MFC アプリケーションによって共有できます。
make
コードの生成、コンパイル、および実行の詳細については、第 7 章「コードの生成」を参照してください。
Visual C++ バージョン 5 を使用している場合には、「.dsw」ファイルと「.dsp」ファイルを取り込むことを忘れないでください。こ れらは、Visual C++ のプロジェクトファイルです。
この場合には、Visual C++ バージョン 5 を使用しているものと想定します。これより古いバージョンや別のアプリケーションを使用している場合に は、「Microsoft Windows 版のコンパイル」を参照してください。
コールバックファイルのソースを共有化するには、この他に 2 つの方法があります。
Java プログラム言語を使用すれば、プラットフォームからの独立したコードを生成できます。Sun WorkShop Visual では、デザインを Java コードでも生成できます。さらに、デザインを Java アプリケーションビルダーである Visaj に取り込める形で保存できます。デザインから Java アプリケーションを作成する方法の詳細については、第 10 章「Java 用のデザイン」を参照してください。
取得/設定スマートコードにより、特定のウィジェットの周りにツールキットから 独立した「ラッパー」が提供されます。簡単な学習を含む詳細については、第 16 章「取得/設定用スマートコード」を参照してください。
サン・マイクロシステムズ株式会社 Copyright information. All rights reserved. |